以下启动日志中列出的 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,我需要指定根= 因为启动日志显示,内核不知道根设备是什么。
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
顺便说一句:根文件系统作为 gzipped 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(开发版本,svn版本:176)
编辑:
有人说是MTD1,有人说是MTD2,有人说是/dev/MTD1,有人说是/dev/mtd1,有人说是MTDblock1,有人说是mtdblock1,有人说是mtdblock2,有人说是ubi.mtdblock1,有人说是ubi:mtdblock1,(为什么是冒号?)等等……
真相是什么?仅从U-Boot提示符或启动日志中如何发现?
答案1
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 的任何详细信息 - 应该有一些有关 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 时,内核会理解该格式。