커널 이미지로 부팅

커널 이미지로 부팅

최근에 컴파일된 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.gzneed 는 커널이 실행될 루트 파일 시스템을 포함하는 파일인 one 입니다 .

GRUB을 계속 사용하려는 경우 최소 항목은 다음과 같습니다.

menuentry "main" {
    linux /boot/bzImage
    initrd /boot/rootfs.cpio.gz
}

그거 어디서 났어. ​디렉토리를 사용하여 쉽게 시도해 bzImage볼 수 있습니다 .arch/x86/boot/bzImagegrub-mkrescue이와 같이.

관련 정보