Linux-Kernel

uCLinux(linux 4.9 nommu)VFS:無法打開根設備“(空)”

  • December 27, 2016

我被這種核心恐慌所困擾。

我想要的是在核心 xip 映像中嵌入一個 initramfs,但是 linux 恐慌並告訴我傳遞一個有效的“root=”rootfs 值。但是為什麼 Linux 會尋找這個輸入呢?

(我沒有提供任何真正的 .cpio 的唯一原因是我無法建構一個,因為諸如“找不到 #include ”之類的錯誤)。但是預設的 initramfs 應該可以完成這項工作嗎?

CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_BLOCK=y
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_NULL_BLK is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=4096

Linux 不應該關心任何“root=”參數???不??

完整的 linux .config: http: //pastebin.com/gWGCEeCw

完整的 UART 輸出: http: //pastebin.com/Mk3c9su8

感謝您閱讀本文。

編輯:當我指定 “root=/dev/ram0” 時會發生這種情況:

[    0.580000] brd: module loaded
[    0.630000] loop: module loaded
[    0.650000] F2FS-fs (ram0): Magic Mismatch, valid(0xf2f52010) - read(0x0)
[    0.650000] F2FS-fs (ram0): Can't find valid F2FS filesystem in 1th superblock
[    0.650000] F2FS-fs (ram0): Magic Mismatch, valid(0xf2f52010) - read(0x0)
[    0.670000] F2FS-fs (ram0): Can't find valid F2FS filesystem in 2th superblock
[    0.680000] F2FS-fs (ram0): Magic Mismatch, valid(0xf2f52010) - read(0x0)
[    0.680000] F2FS-fs (ram0): Can't find valid F2FS filesystem in 1th superblock
[    0.690000] F2FS-fs (ram0): Magic Mismatch, valid(0xf2f52010) - read(0x0)
[    0.690000] F2FS-fs (ram0): Can't find valid F2FS filesystem in 2th superblock
[    0.700000] List of all partitions:
[    0.700000] 0100            4096 ram0 [    0.710000]  (driver?)
[    0.710000] No filesystem could mount root, tried: [    0.720000]  f2fs
[    0.720000] 
[    0.720000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
[    0.720000] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
[    1.520000] random: fast init done

我不確定“沒有文件系統可以掛載根”的含義,當然你(Linux)需要創建它!!!發生了什麼?

問題是雙重的:

  • 我不知道為什麼,但預設的 .cpio 不起作用。
  • 我在網上找到的“stm32 minimum blablabla”cpio 不起作用。

我嘗試使用 buildroot 執行整個系統建構,它可以開箱即用,並嘗試在那裡使用 rootfs.cpio,它可以工作!!

如果我找到原因,我會在這裡發布。

現在我調查一下,因為對我來說,這塊板的外部 RAM 從 0xD0000000 開始,但是 buildroot 創建了一個從 0x90000000 開始的系統。兩個系統都在工作……不知道如何大聲笑。

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