3

I have a recently-compiled Linux kernel image (vmlinuz file) and I want to boot into it. I am aware that this won't give me a familiar Linux system, but I am hoping to be able to at least run some basic "Hello world" program as the init process. Is this even possible, and if so, how?

So far I have tried to do this by installing GRUB on a USB which had an ext2 filesystem with the vmlinuz file in /boot. It must have loaded the kernel image because it ended in a kernel panic message: "VFS: Unable to mount root fs on unknown-block(0,0)"

Here is the entry in 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
}

Thanks for any help.

2

It is possible, yes. You need to pass init=/bin/sh to the kernel and you need to remember that the rootfs is most probably mounted ro afterwards.

To directly run your program you need to tell the kernel to invoke it after configuring the hardware, but note that the normal userspace won't be available to your program.

1

You don't need GRUB to boot the kernel: it already has its own bootloader, so when you run:

make isoimage FDINITRD="$ROOTFS_PATH"

the generated arch/x86/boot/image.iso is already bootable as can be verified with:

qemu-system-x86_64 arch/x86/boot/image.iso

What you do need is a rootfs.cpio.gz, which is a file that contains the root filesystem that the kernel will run on:

If you still want to use GRUB, the minimal entry is:

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

where bzImage comes from arch/x86/boot/bzImage. You can try this out easily with grub-mkrescue and a directory like this.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.