embedded - 如何找出嵌入式 Linux 上哪个分区映射到哪种存储设备类型?

标签 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。这些设备显示为 /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 规则来创建指向您感兴趣的设备/分区的符号链接(symbolic link)。例如:

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

这应该创建一个或两个符号链接(symbolic link):

# 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

关于embedded - 如何找出嵌入式 Linux 上哪个分区映射到哪种存储设备类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28029947/

相关文章:

c++ - 嵌入式 C++ : to use STL or not?

c++ - 只读内存映射寄存器在 C 中定义为 `volatile const` 但在 C++ 中仅定义为 `volatile`

ARM Cortex-M3 启动代码

linux - i.MX6 上的 Yocto + Qt5(FSL 社区 BSP): xcb dependency for webkit?

javascript - 在没有互联网连接的嵌入式系统中使用 AngularJS

linux - 从哪里开始学习 linux DMA/设备驱动程序/内存分配

sqlite - 为设备选择嵌入式Linux

linux - 交叉编译nginx-1.0.11

linux - bitbake 期间出现“ fatal error : linux/compiler-gcc5. h:没有此类文件或目录”

python-3.x - 从 Github 安装 Yocto Bitbake podman-py setuptools 失败