MTD分區的命名方案
以下引導日誌中列出的 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 時,核心可以理解格式。