Grubメニューにカスタム.efiを追加する

Grubメニューにカスタム.efiを追加する

ベアメタルプログラミングを学び、シンプルな卓球ゲームを作りました。

私のLinuxは/ dev / sdaドライブにあります。 pongの.efiファイルを/ dev / sdbドライブに配置し、そのドライブにefi / boot / bootx64.efiを配置しました。

適切なブートデバイスを選択してそれにアクセスし、卓球を打つことができます(ブート時にdelを押してブートメニューに移動します。grubで起動する最初のドライブを選択してLinuxを選択します。2番目のドライブを選択を選択すると、卓球ゲームが必要です)

これで、/dev/sdaから起動し、grubを表示し、linuxまたはpongを選択できるように、この起動オプションをgrubに通知するにはどうすればよいですか?

update-grub卓球ゲームを検出しません。 (ただし、/dev/sdcでWindowsブートローダを検出します。)

答え1

Grub構成を変更する必要があります。 /boot/grub/grub.confに移動します。

/dev/hdc の Windows 部分を探し、/dev/hdb のように進みます。

# You should have already something like
title Windows         
set root=(hd2,0)         
chainloader +1

# Add 
title Game         
set root=(hd1,0)         
chainloader +1

root使用するドライブとドライブのパーティションをgrubに伝えます。

chainloadergrubにドライブの実際のMBRに直接移動するように指示します。 BIOSローダーを使用してドライブから起動できるため、MBRは正しく設定されています。

詳細は:https://www.gnu.org/software/grub/manual/grub/grub.html

答え2

既存のgrubファイルからインスピレーションを得て/boot/grub/grub.cfgアイテムを作成しました。結果は次のとおりです。

menuentry 'Pong' $menuentry_id_option 'play pong' {
    insmod part_gpt
    insmod ntfs
    search --no-floppy --fs-uuid --set=root 7a844a6a-9734-49a4-881d-662251c39cc3
    chainloader /my/custom/path/Pong.efi
}

ここpart_gptで、とはntfsそれぞれパーティションテーブルタイプとファイル形式です。search指定されたUUIDを持つドライブを探します。chainloaderそのドライブから起動する.efiファイルを選択します。

grub.cfg最後に、/etc/grub.d/40_custom同様のプログラムがupdate_grubこの設定を維持するようにこのエントリを追加しました。 (注:Linux Mint 21から)

関連情報