grub-mkrescue
コマンドを使用してレスキューディスクを作成しようとしています。私はそれを次のように呼び出します:
grub-mkrescue -o grub.iso
これにより.isoファイルが生成されますが、VirtualBoxを使用してそこから起動しようとすると、起動メディアを読み取れないと表示されます。アーカイバでファイルを開くと、.isoには空の/ boot/grubディレクトリしかないことがわかります。
また、次のようなコマンドを使用している人もいます。
grub-mkrescue -o grub.iso /boot/grub
しかし、それはそのディレクトリが存在しないことについて不平を言います。 (現在、実際のLinux PCにアクセスできないため、Debian VPSでこれを作成していることが関係している可能性があります。)
この問題の原因は何ですか?起動可能なイメージに保存するGRUBファイルがありませんか、それともコマンドを間違った方法で使用していますか?
実は、これは、このコマンドを実行しているシステムに(アクセス可能な)/boot/grub
ディレクトリがない場合に発生します。サイレントに失敗し、空のISOファイルを生成します。
Linuxの通常のデスクトップインストールで同じコマンドを実行すると、コマンドは動作するブート可能イメージを生成します。
次の手順で、作業イメージが作成されます。
multiboot hello world main.elf
ファイルを作成します。 GRUBはそれらのファイルを起動する方法を知っています(GRUBはマルチブートではありませんがLinuxカーネルを起動する方法も知っています)
以下を含むiso/boot/grub/grub.cfg
ファイルを作成します。
menuentry "main" {
multiboot /boot/main.elf
}
main.elf
をiso/boot/
の下に配置します
Ubuntu 17.10、UEFIマシンの場合:
Sudo apt-get install grub-pc-bin
https://wiki.osdev.org/Bare_Bones で述べたように、それ以外の場合は単に機能せず、方法がわかりません。
TODO OMG本当に?!この狂気のタイプを取り除くには、ソースからGRUBを構築することを学ぶ必要があります。
画像を生成して実行します。
grub-mkrescue -o main.img iso
qemu-system-x86_64 -hda main.img
この例の正確なコードを次の場所に投稿しました: https://github.com/cirosantilli/x86-bare-metal-examples/tree/d217b180be4220a0b4a453f31275d38e697a99e0/multiboot/hello-world