![自定义构建 - 无法挂载文件系统](https://linux22.com/image/200437/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9E%84%E5%BB%BA%20-%20%E6%97%A0%E6%B3%95%E6%8C%82%E8%BD%BD%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F.png)
因此,我正在构建一个基于 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)
我的内核构建中是否有可能缺少此内容?
以下是我设计操作系统的方式:
成分 | 我的选择 |
---|---|
初始化守护进程 | 初始化程序 |
命令 | 繁忙盒子1.35.0 |
核心 | Linux 5.15.12 |
文件系统 | msdos、fat、exfat、ext2、ext3 或 ext4 |
引导加载程序 | syslinux 或 extlinux |
注意:我一次尝试了每个文件系统,并且都提供了相同的响应,这使我相信这不是文件系统本身的问题。我还尝试了 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
答案1
选项的状态是什么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
.
答案2
本例中的问题与我创建的 CPIO 存档直接相关。虽然我使用的是正确的cpio
并且gzip
命令,但由于拼写错误,我的管道不正确小核心书。使用以下命令,我能够创建一个可读的 cpio 文件:
cd fs_folder
sudo find | sudo cpio -o -H newc > ../fs.cpio
gzip -2 ../fs.cpio
advdef -z4 ../fs.cpio.gz