将自定义 .efi 添加到 grub 菜单

将自定义 .efi 添加到 grub 菜单

我学习了裸机编程并创建了一个简单的乒乓球游戏。

我的 Linux 位于 /dev/sda 的驱动器上。我将 pong 的 .efi 文件放在 /dev/sdb 的驱动器上,然后将 efi/boot/bootx64.efi 放在该驱动器上

我可以通过选择正确的引导设备来访问它并玩乒乓球(启动时,我按 del 进入引导菜单。如果我选​​择在 grub 上引导的第一个驱动器,然后是 linux。如果我选​​择第二个驱动器,则需要我乒乓球比赛)

现在,我怎样才能让 grub 知道这个引导选项,以便我可以在 /dev/sda 上引导,看到 grub,然后选择 linux 或 pong?

update-grub不检测 pong 游戏。 (但是,它在 /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 使用哪个驱动器、驱动器上的哪个分区。

它将chainloader告诉 grub 直接进入驱动器的实际 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_gptntfs分别是分区表类型和文件格式。search将查找具有给定 UUID 的驱动器。并将chainloader选择 .efi 文件在该驱动器上启动。

最后,我将此条目添加到 not togrub.cfg而是 to/etc/grub.d/40_custom以便类似程序update_grub将保留此配置。 (注意:在 linux mint 21 下)

相关内容