Filesystems

自定義建構 - 無法掛載文件系統

  • January 6, 2022

因此,我正在建構一個基於 Linux 的定制作業系統,並選擇將其作為 RAM 磁碟 (initramfs) 執行。不幸的是,我在啟動過程中不斷出現核心恐慌。

RAMDISK: gzip image found at block 0
using deprecated initrd support, will be removed in 2021.
exFAT-fs (ram0): invalid boot record signature
exFAT-fs (ram0): failed to read boot sector
exFAT-fs (ram0): failed to recognize exfat type
exFAT-fs (ram0): invalid boot record signature
exFAT-fs (ram0): failed to read boot sector
exFAT-fs (ram0): failed to recognize exfat type
List of all partitions:
0100            4096 ram0 
(driver?)
0101            4096 ram1 
(driver?)
0102            4096 ram2 
(driver?)
0103            4096 ram3 
(driver?)
0104            4096 ram4 
(driver?)
0105            4096 ram5 
(driver?)
0106            4096 ram6 
(driver?)
0107            4096 ram7 
(driver?)
0108            4096 ram8 
(driver?)
0109            4096 ram9 
(driver?)
010a            4096 ram10 
(driver?)
010b            4096 ram11 
(driver?)
010c            4096 ram12 
(driver?)
010d            4096 ram13 
(driver?)
010e            4096 ram14 
(driver?)
010f            4096 ram15 
(driver?)
No filesystem could mount root, tried: 
vfat
msdos
exfat
ntfs
ntfs3

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)

我的核心建構中是否有可能缺少這些東西?

以下是我設計作業系統的方式:

注意:我一次嘗試了每個文件系統,並且都提供了相同的響應,這讓我相信這不是文件系統本身的問題。出於測試目的,我還嘗試了 syslinux 和 extlinux。

這是我建構磁碟的方式:

/media/vfloppy
└── [        512 Jan  3 08:06]  boot
   ├── [      36896 Jan  3 08:06]  initramfs.cpio.gz
   ├── [        512 Jan  3 08:06]  syslinux
   │   ├── [        283 Jan  3 08:06]  boot.msg
   │   ├── [     120912 Jan  3 08:06]  ldlinux.c32
   │   ├── [      60928 Jan  3 08:06]  ldlinux.sys
   │   └── [        173 Jan  3 08:06]  syslinux.cfg
   └── [     939968 Jan  3 08:06]  vmlinux

這是我的syslinux.cfg

DISPLAY boot.msg
DEFAULT linux
label linux
   KERNEL /boot/vmlinux
   INITRD /boot/initramfs.cpio.gz
   APPEND root=/dev/ram0 init=/init loglevel=3
PROMPT 1    
TIMEOUT 10
F1 boot.msg

我還在核心.config文件中啟用了以下文件系統選項:

CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_FS_IOMAP=y
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_FS_MBCACHE=y
CONFIG_EXPORTFS_BLOCK_OPS=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_PROC_FS=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_RD_GZIP=y
CONFIG_DECOMPRESS_GZIP=y

此實例中的問題與我創建的 CPIO 存檔直接相關。儘管我使用了正確的cpiogzip命令,但由於TinyCore book中的拼寫錯誤,我的管道不正確。使用以下命令,我能夠創建一個可讀的 cpio 文件:

cd fs_folder
sudo find | sudo cpio -o -H newc > ../fs.cpio
gzip -2 ../fs.cpio
advdef -z4 ../fs.cpio.gz

CONFIG_BLK_DEV_INITRD期權的狀態是什麼?它應該在 之前CONFIG_INITRAMFS_SOURCE,我相信它應該被啟用。

CONFIG_BLK_DEV_RAM是通用 RAM 磁碟,而CONFIG_BLK_DEV_INITRD具體是 initramfs/initrd。

由於您initramfs.cpio.gz是 gzip 壓縮的,因此您還需要CONFIG_RD_GZIP=y.

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