Embedded 如何在嵌入式linux上找出哪个分区映射到哪个内存设备类型?

Embedded 如何在嵌入式linux上找出哪个分区映射到哪个内存设备类型?,embedded,embedded-linux,yocto,openembedded,Embedded,Embedded Linux,Yocto,Openembedded,fdisk命令没有提供有关此问题的详细信息。我想知道哪个硬件内存设备映射到嵌入式linux上/dev/下的哪个分区节点 我正在I.mx处理器6quad SABRESD上运行3.10嵌入式linux(yocto项目),用于智能设备板。如果您在嵌入式系统中使用udev,您可以从udev获取一些信息(因为您使用的是Yocto,所以很有可能您使用的是udev,除非您真的将其缩减到最小系统) 例如,我在BeagleBone Black类型的系统上运行Yocto,该系统有一个SD卡和一个板载eMMC。设备显

fdisk命令没有提供有关此问题的详细信息。我想知道哪个硬件内存设备映射到嵌入式linux上/dev/下的哪个分区节点


我正在I.mx处理器6quad SABRESD上运行3.10嵌入式linux(yocto项目),用于智能设备板。

如果您在嵌入式系统中使用
udev
,您可以从
udev
获取一些信息(因为您使用的是Yocto,所以很有可能您使用的是
udev
,除非您真的将其缩减到最小系统)

例如,我在BeagleBone Black类型的系统上运行Yocto,该系统有一个SD卡和一个板载eMMC。设备显示为
/dev/mmcblk0
/dev/mmcblk1
,其运行方式取决于它从哪个内存启动(启动设备总是
/dev/mmcblk0

您可以使用
udevadm info-a-n
获取有关设备的信息:

# 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

键入
mount
。它应该说明每个装载点是什么。另外
cat/etc/mtab
。mount不会显示设备名称的含义,除非名称本身有意义(通常是有意义的)。最终,您需要查看MTD的配置或实际提供MTD的任何内容。这通常会编译到内核本身(这应该可以消除关于它的任何疑问)您是否尝试过
cat/proc/mtd
cat/proc/partitions
cat-proc/mtd
恰好提供了最有意义的信息,但它只提供了一个SPI设备的相关信息。每一个其他命令都会提供有意义的信息,如文件系统类型、磁道和扇区以及块大小,但没有设备名称。此设备名称似乎是在硬件的设备树绑定器中分配的。我希望linux能够将其吐出来。linux MTD是主数字90。您可以使用
ls-l/dev/MTD*
ls-l/dev/| grep 90
。如果您使用的是完全没有大脑的用户空间,则将/dev与/proc/MTD绑定。MTD不是一个设备,它是设备的一个分区。
cat/proc/cmdline
可能有一个
root=xxx
行。