Amorçage dans une image de kernel

J'ai une image de kernel Linux compilée récemment (file vmlinuz) et je veux démarrer dans le. Je suis conscient que cela ne me donnera pas un système Linux familier, mais j'espère pouvoir au less exécuter un programme "Hello world" de base comme process init. Est-ce possible, et si oui, comment?

Jusqu'à présent, j'ai essayé de le faire en installant GRUB sur un USB qui avait un système de files ext2 avec le file vmlinuz dans / boot. Il doit avoir chargé l'image du kernel car il s'est terminé par un message de panique du kernel: "VFS: Impossible de monter la racine fs sur le bloc inconnu (0,0)"

Voici l'input dans 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 } 

Merci pour toute aide.

C'est possible, oui. Vous devez passer init=/bin/sh au kernel et vous devez vous callbacker que le rootfs est probablement monté ro après.

Pour exécuter directement votre programme, vous devez requestr au kernel de l'appeler après avoir configuré le matériel, mais notez que l'espace user normal ne sera pas disponible pour votre programme.

Vous n'avez pas besoin de GRUB pour démarrer le kernel: il a déjà son propre bootloader, donc quand vous exécutez:

 make isoimage FDINITRD="$ROOTFS_PATH" 

l' arch/x86/boot/image.iso généré est déjà amorçable comme cela peut être vérifié avec:

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

Ce que vous avez besoin est un rootfs.cpio.gz , qui est un file qui contient le système de files racine sur lequel le kernel s'exécutera:

Si vous voulez toujours utiliser GRUB, l'input minimale est la suivante:

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

bzImage provient de arch/x86/boot/bzImage . Vous pouvez essayer ceci facilement avec grub-mkrescue et un directory comme celui-ci .