как узнать, какой раздел соответствует типу устройства памяти во встроенном Linux?

Команда fdisk не предоставляет подробностей по этому вопросу. Я хотел бы знать, какое аппаратное устройство памяти сопоставляется с каким узлом раздела в /dev/ во встроенном Linux.

Я запускаю встроенный Linux 3.10 (проект yocto) на процессоре i.mx 6quad SABRESD для платы смарт-устройств.


person marc    schedule 19.01.2015    source источник
comment
Тип 1_. В нем должно быть указано, что представляет собой каждая точка монтирования. Также cat /etc/mtab.   -  person artless noise    schedule 19.01.2015
comment
mount не покажет, что означают имена устройств, если только сами имена не имеют смысла (что часто бывает). В конечном итоге вам нужно будет посмотреть на конфигурацию MTD или что-то еще, что их фактически предоставляет. Это часто компилируется в само ядро ​​(что не должно вызывать никаких сомнений в том, что это тема здесь).   -  person Chris Stratton    schedule 20.01.2015
comment
Вы пробовали cat /proc/mtd и cat /proc/partitions?   -  person yegorich    schedule 20.01.2015
comment
cat proc/mtd дает наиболее значимую информацию, но она предоставляет информацию только об одном устройстве, которое является устройством SPI. Каждая другая команда дает значимую информацию, такую ​​как тип файловой системы, дорожки и сектора и размеры блоков, НО не имя устройства. Эти имена устройств, по-видимому, были назначены в связующем дереве устройств для оборудования. Я бы хотел, чтобы Linux выплюнул это.   -  person marc    schedule 20.01.2015
comment
Linux MTD — основной номер 90. Вы можете использовать ls -l /dev/mtd* или ls -l /dev/ | grep 90. Это связывает /dev с /proc/mtd, если вы используете какое-то абсолютно мертвое пользовательское пространство. MTD — это не устройство, это раздел устройства. Также cat /proc/cmdline может иметь строку root=xxx.   -  person artless noise    schedule 20.01.2015


Ответы (1)


Вы можете получить некоторую информацию от udev, если вы используете udev во встроенной системе (поскольку вы используете Yocto, есть большая вероятность, что вы используете udev, если вы действительно не сокращаете его до минимальной системы).

Например, я запускаю Yocto в системе типа BeagleBone Black, в которой есть SD-карта и встроенная eMMC. Устройства отображаются как /dev/mmcblk0 и /dev/mmcblk1, а их способ зависит от того, из какой памяти они загружаются (загрузочное устройство всегда /dev/mmcblk0).

Вы можете использовать udevadm info -a -n <dev-name> для получения информации об устройстве:

# udevadm info -a -n /dev/mmcblk0

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/ocp/48060000.mmc/mmc_host/mmc0/mmc0:b368/block/mmcblk0':
    KERNEL=="mmcblk0"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{ro}=="0"
    ATTR{size}=="1953792"
    ATTR{stat}=="     585      388    38332     3420       78       64     1136     1370        0     2960     4790"
    ATTR{range}=="8"
    ATTR{discard_alignment}=="0"
    ATTR{force_ro}=="0"
    ATTR{ext_range}=="8"
    ATTR{alignment_offset}=="0"
    ATTR{inflight}=="       0        0"
    ATTR{removable}=="0"
    ATTR{capability}=="10"

  looking at parent device '/devices/ocp/48060000.mmc/mmc_host/mmc0/mmc0:b368':
    KERNELS=="mmc0:b368"
    SUBSYSTEMS=="mmc"
    DRIVERS=="mmcblk"
    ATTRS{cid}=="1b534d30303030301002b2ffa200b27f"
    ATTRS{csd}=="002f00325b5983b9edb7ff9f16400005"
    ATTRS{scr}=="0225000000000000"
    ATTRS{date}=="02/2011"
    ATTRS{name}=="00000"
    ATTRS{type}=="SD"
    ATTRS{preferred_erase_size}=="4194304"
    ATTRS{fwrev}=="0x0"
    ATTRS{hwrev}=="0x1"
    ATTRS{oemid}=="0x534d"
    ATTRS{manfid}=="0x00001b"
    ATTRS{serial}=="0x02b2ffa2"
    ATTRS{erase_size}=="512"

  looking at parent device '/devices/ocp/48060000.mmc/mmc_host/mmc0':
    KERNELS=="mmc0"
    SUBSYSTEMS=="mmc_host"
    DRIVERS==""

  looking at parent device '/devices/ocp/48060000.mmc':
    KERNELS=="48060000.mmc"
    SUBSYSTEMS=="platform"
    DRIVERS=="omap_hsmmc"

  looking at parent device '/devices/ocp':
    KERNELS=="ocp"
    SUBSYSTEMS=="platform"
    DRIVERS==""

Затем вы можете создать правило udev, чтобы создать символическую ссылку на интересующее вас устройство/раздел. Например:

SUBSYSTEM=="block", ATTRS{type}=="MMC", ATTR{partition}=="2", SYMLINK+="mmcblk-emmc-data"
SUBSYSTEM=="block", ATTRS{type}=="SD", ATTR{partition}=="2", SYMLINK+="mmcblk-sd-data"

Что должно сделать символическую ссылку или две:

# ls -al /dev/mmcblk-*
lrwxrwxrwx    1 root     root             9 Jul  1 17:34 /dev/mmcblk-emmc-data -> mmcblk1p2
lrwxrwxrwx    1 root     root             9 Jul  1 17:34 /dev/mmcblk-sd-data -> mmcblk0p2
person Craig McQueen    schedule 01.07.2015