Linux

MTD分區的命名方案

  • July 16, 2018

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

引用自:https://unix.stackexchange.com/questions/456418