
최근에 컴파일된 Linux 커널 이미지(vmlinuz 파일)가 있고 이를 부팅하고 싶습니다. 이것이 나에게 친숙한 Linux 시스템을 제공하지는 않는다는 것을 알고 있지만 최소한 몇 가지 기본 "Hello world" 프로그램을 init 프로세스로 실행할 수 있기를 바랍니다. 가능합니까? 가능하다면 어떻게 달성할 수 있나요?
지금까지 나는 ext2 파일 시스템과 /boot에 있는 vmlinuz 파일을 사용하여 USB에 GRUB를 설치하여 이를 달성하려고 했습니다. 다음 커널 패닉 메시지로 끝나기 때문에 커널 이미지를 로드했어야 합니다. "VFS: 알 수 없는 블록(0,0)에 루트 파일 시스템을 마운트할 수 없습니다."
grub.cfg의 항목은 다음과 같습니다.
menuentry 'linux' --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0)'
search --no-floppy --fs-uuid --set=root <my USB drive's UUID>
linux /boot/vmlinuz root=UUID=<my USB drive's UUID> ro $vt_handoff
}
도와주셔서 감사합니다.
답변1
가능합니다. 그렇습니다. init=/bin/sh
커널에 전달해야 하며 , rootfs는 나중에 마운트될 가능성이 높다는 점을 기억해야 합니다.
프로그램을 직접 실행하려면 하드웨어를 구성한 후 이를 호출하도록 커널에 지시해야 합니다. 그러나 일반 사용자 공간은 프로그램에서 사용할 수 없습니다.
답변2
커널을 부팅하는 데 GRUB가 필요하지 않습니다. 이미 자체 부트로더가 있으므로 다음을 실행하면:
make isoimage FDINITRD="$ROOTFS_PATH"
생성된 파일은 arch/x86/boot/image.iso
이미 부팅 가능하며 다음을 통해 확인할 수 있습니다.
qemu-system-x86_64 arch/x86/boot/image.iso
너 뭐야하다rootfs.cpio.gz
need 는 커널이 실행될 루트 파일 시스템을 포함하는 파일인 one 입니다 .
- 초소형을 만드는 방법:단일 애플리케이션 Linux 슈퍼유저 |
- BusyBox를 시작하고 실행하는 방법:https://github.com/cirosantilli/runlinux
GRUB을 계속 사용하려는 경우 최소 항목은 다음과 같습니다.
menuentry "main" {
linux /boot/bzImage
initrd /boot/rootfs.cpio.gz
}
그거 어디서 났어. 디렉토리를 사용하여 쉽게 시도해 bzImage
볼 수 있습니다 .arch/x86/boot/bzImage
grub-mkrescue
이와 같이.