以下引导日志中列出的 MTD 分区的命名方案是什么?
5 cmdlinepart partitions found on MTD device phys_mapped_flash
Creating 5 MTD partitions on "phys_mapped_flash":
0x00000000-0x00080000 : "bootloader"
0x00080000-0x00680000 : "kernel"
0x00680000-0x01680000 : "rootfs"
0x01680000-0x01780000 : "data"
0x01780000-0x017a0000 : "bootload-env"
特别是,我询问使用什么命名方案来指定 U-Boot 提示符中的“rootfs”分区作为命令的参数:
setenv bootargs 'root= ???????'
IMO,我需要指定root= 因为引导日志显示内核不知道根设备是什么。
VFS: Cannot open root device "<NULL>" or unknown-block(0,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
...而且启动日志显示:
Kernel command line: bootoctlinux 0x2a00200 mtdparts=phys_mapped_flash:512k(bootloader)ro,6M(kernel),16M(rootfs),1024k(data),128k(bootload-env) console=ttyS0,115200
顺便说一句:根文件系统作为 gzip 压缩的 cpio 存档存储在内核 ELF 文件 (vmlinux64) 的嵌入式部分 (.init.ramfs) 中,并且引导日志表明它已成功加载到 RAM 中:
Loading .init.ramfs @ 0xffffffff806ac000 (0x185ac7 bytes)
这是在仅具有 32MB 闪存存储的嵌入式系统上(Linux 内核 v2.6.21.7(发行版:Cavium-Octeon for MIPS64))。
U-Boot 1.1.1(开发版本,svnversion:176)
编辑:
有人说是 MTD1,有人说是 MTD2,有人说是 /dev/MTD1,有人说是 /dev/mtd1,有人说是 MTDblock1,有人说是 mtdblock1,有人说是 mtdblock2,有人说是 ubi.mtdblock1,有人说是 ubi:mtdblock1,(为什么是冒号?) 等等....
真相是什么?如何仅从 U-Boot 提示符或引导日志中发现它?
root=/dev/mtdblock3
或一些 UBI 选项。您没有注意到针对不同文件系统的不同建议 :-)。我不知道是否/dev/mtd3
用于任何树内文件系统。如果根文件系统是基于块的(非 mtd 感知)文件系统的只读实例,则使用
/dev/mtdblock3
.如果根文件系统是 JFFS2 的一个实例,则使用
/dev/mtdblock3
. 请参阅https://www.denx.de/wiki/DULG/RootFileSystemOnAJFFS2FileSystem 通常以及其他文件系统的一些示例,您可以查看http://www.denx.de/wiki/publish/DULG/DULG-enbw_cmc。 html#Section_9.5。(但本节未提及 UBI)。如果 rootfs 使用 UBI,请使用一些 UBI 选项。不过,您还没有显示有关 UBI 的任何详细信息 - 在您可以
root=
使用任何 UBI 设备/卷之前,应该有一些关于 UBI 设备/卷的内核启动消息。见这里:http ://www.linux-mtd.infradead.org/faq/ubifs.html#L_mount_ubifs 它给出了一个 UBI 选项的例子:ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs
. 由于您的 mtd 分区直接称为“rootfs”,因此我希望它不是 UBI。我会避免使用这种
root=mtdblock3
格式,至少如果你不确定的话。不同之处在于某些 initramfs 可能不支持它。然而,root=/dev/mtdblock3
当您使用内核挂载根文件系统并且不使用 initramfs 时,内核可以理解格式。