引导至内核映像

引导至内核映像

我有一个最近编译的 Linux 内核映像(vmlinuz 文件),我想启动它。我知道这不会给我一个熟悉的 Linux 系统,但我希望至少能够运行一些基本的“Hello world”程序作为 init 进程。这可能吗?如果可能的话,如何实现?

到目前为止,我已经尝试通过在 USB 上安装 GRUB 来实现此目的,该 USB 具有 ext2 文件系统,且 vmlinuz 文件位于 /boot 中。它一定已经加载了内核映像,因为它以内核恐慌消息结束:“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

你什么need 是一个rootfs.cpio.gz,它是一个包含内核将在其上运行的根文件系统的文件:

如果您仍然想使用 GRUB,则最少的条目是:

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

从哪里来。bzImage​您可以使用目录arch/x86/boot/bzImage轻松尝试此操作grub-mkrescue像这样

相关内容