사용자 정의 빌드 - 파일 시스템을 마운트할 수 없습니다.

사용자 정의 빌드 - 파일 시스템을 마운트할 수 없습니다.

그래서 저는 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
핵심 리눅스 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.gzgzip으로 압축되어 있으므로 CONFIG_RD_GZIP=y.

답변2

이 경우의 문제는 제가 만든 CPIO 아카이브와 직접적인 관련이 있습니다. 올바른 cpiogzip명령을 사용하고 있지만 오타로 인해 파이프라인이 올바르지 않습니다.작은 핵심 책. 다음 명령을 사용하여 읽을 수 있는 cpio 파일을 만들 수 있었습니다.

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

관련 정보