我学习了裸机编程并创建了一个简单的乒乓球游戏。
我的 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_gpt
和ntfs
分别是分区表类型和文件格式。search
将查找具有给定 UUID 的驱动器。并将chainloader
选择 .efi 文件在该驱动器上启动。
最后,我将此条目添加到 not togrub.cfg
而是 to/etc/grub.d/40_custom
以便类似程序update_grub
将保留此配置。 (注意:在 linux mint 21 下)