我需要创建一个initramfs来加载驱动程序以访问包含rootfs的EMMC。
- 在我目前的内核构建中,EMMC驱动程序是模块化的(抱歉,无法更改此内容)。
- 内核启动后,它会加载initramfs。
- 从initramfs开始,它需要使用switch_root函数切换到包含实际rootfs的EMMC上的分区。
直到这里一切顺利。我可以创建initramfs,让内核加载它然后也让它切换到/ dev / mmcblk0p2,这是包含实际rootfs的EMMC分区。
我的问题:
引导完成后,mount命令显示以下内容:
on rootfs on / type rootfs(rw)
/ dev / mmcblk0p2 on / type ext4(rw,sync,noatime,data = ordered)
proc on / proc type proc(rw,relatime)
< ...>
/ dev / mmcblk0p1 on / var / volatile / run / media / mmcblk0p1 type vfat(rw,relatime,fmask = 0022,dmask = 0022,codepage = 437,iocharset = iso8859-1,sh)
/ dev / mmcblk0p3 on / var / volatile / run / media / mmcblk0p3 type ext4(rw,relatime,data = ordered)
/ dev / mmcblk0p4 on / var / volatile / run / media / mmcblk0p4 type ext4(rw,relatime,data = ordered)
如果我将EMMC驱动程序构建为内核的一部分(并摆脱initramfs),那么输出就会大不相同:
on 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)
< ....>
/ dev / mmcblk0p1 on / var / volatile / run / media / mmcblk0p1 type vfat(rw,relatime,fmask = 0022,dmask = 0022,codepage = 437,iocharset = iso8859-1,sh)
/ dev / mmcblk0p3 on / var / volatile / run / media / mmcblk0p3 type ext4(rw,relatime,data = ordered)
/ dev / mmcblk0p4 on / var / volatile / run / media / mmcblk0p4 type ext4(rw,relatime,data = ordered)
- 虽然当我检查内核日志和主要的次要设备号时,我发现/ dev / root仅对应于/ dev / mmcblk0p2。
- 但我无法弄清楚为什么mount的输出不同。
在花了这么多精力让initramfs工作之后,我不想错过任何微不足道的事情。任何帮助,非常感谢。