我需要创建一个initramfs来加载驱动程序以访问包含rootfs的EMMC .

  • 在我当前的内核构建中,EMMC驱动程序是模块化的(抱歉,无法更改此内容) .

  • 内核启动后,它会加载initramfs .

  • 从initramfs,它需要切换到EMMC上的一个分区,该分区包含使用switch_root函数的实际rootfs .

直到这里一切都运作良好 . 我可以创建initramfs,让内核加载它然后也让它切换到/ dev / mmcblk0p2,这是包含实际rootfs的EMMC分区 . 我的查询:

引导完成后,mount命令显示以下内容:

rootfs on / type rootfs(rw)
/dev/mmcblk0p2 on / type ext4 (rw,sync,noatime,data=ordered)
proc on / proc type proc(rw,relatime)<...>
/ var / volatile / run / media / mmcblk0p1上的/ dev / mmcblk0p1类型vfat(rw,relatime,fmask = 0022,dmask = 0022,codepage = 437,iocharset = iso8859-1,sh)
/ var / volatile / run / media / mmcblk0p3上的/ dev / mmcblk0p3类型为ext4(rw,relatime,data = ordered)
/ var / volatile / run / media / mmcblk0p4上的/ dev / mmcblk0p4类型为ext4(rw,relatime,data = ordered)

如果我将EMMC驱动程序构建为内核的一部分(并摆脱initramfs),则输出非常不同:

rootfs on / type rootfs(rw)
/dev/root on / type ext4 (rw,relatime,discard,journal_checksum,commit=1,data=ordered)
devtmpfs on / dev type devtmpfs(rw,relatime,size = 112272k,nr_inodes = 28068,mode = 755)<....>
/ var / volatile / run / media / mmcblk0p1上的/ dev / mmcblk0p1类型vfat(rw,relatime,fmask = 0022,dmask = 0022,codepage = 437,iocharset = iso8859-1,sh)
/ var / volatile / run / media / mmcblk0p3上的/ dev / mmcblk0p3类型为ext4(rw,relatime,data = ordered)
/ var / volatile / run / media / mmcblk0p4上的/ dev / mmcblk0p4类型为ext4(rw,relatime,data = ordered)

  • 虽然当我检查内核日志和主要的次要设备号时,我发现/ dev / root仅对应于/ dev / mmcblk0p2 .

  • 但我无法弄清楚为什么mount的输出不同 .

在花了这么多努力让initramfs工作之后,我不想错过任何微不足道的事情 . 任何帮助,非常感谢 .