그래서 저는 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.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