最近コンパイルされた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.gz
needは、カーネルが実行されるルートファイルシステムを含むファイルであるoneです。
- 超小型を作る方法:シングルアプリケーションLinuxスーパーユーザー|
- BusyBoxを起動して実行するには:https://github.com/cirosantilli/runlinux
GRUBを引き続き使用する場合は、最小エントリは次のようになります。
menuentry "main" {
linux /boot/bzImage
initrd /boot/rootfs.cpio.gz
}
それはどこから出た。ディレクトリを使用して簡単に試すことがbzImage
できます。arch/x86/boot/bzImage
grub-mkrescue
このように。