カーネルイメージから起動

カーネルイメージから起動

最近コンパイルされた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このように

関連情報