自定义构建 - 无法挂载文件系统

自定义构建 - 无法挂载文件系统

因此,我正在构建一个基于 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

相关内容