一个用x86 Assembly写的Bootloader如何写入U盘,同时支持BIOS和UEFI?

How can a Bootloader written in x86 Assembly be written to a USB Flash drive and support both BIOS and UEFI?

最近用x86 Assembly写了一个bootloader。引导加载程序现在没有做任何特别的事情,但我打算用这个引导加载程序加载我自己的内核。我能够将引导加载程序写入我的 FAT32 格式的 USB 闪存驱动器,它会被 BIOS 正确加载。

如何使 USB 闪存驱动器可同时通过 BIOS 和 UEFI 启动?

为此,您需要重新启动计算机。首次启动后,您必须按启动选项键。这通常是 F2 或 Del。从那里您可以选择计算机将从哪个设备启动。

但是,请小心并确保您 100% 确定自己知道自己在做什么。相反,我建议您安装一个 VM 并将其用作您正在制作的 OS 的测试对象。这样您就不必经常重新启动计算机,并且损坏它的风险也较小。

可移动媒体无需格式化为 GPT 即可让 UEFI 从中启动。您需要在可移动介质上的 FAT 分区上创建 efi/boot 文件夹,并将您的 UEFI 引导加载程序放在那里。对于 X86-64 架构,文件名必须是 bootx64.efi。在 Legacy 或 BIOS 模式下启动将无需更改即可处理 - 通过 MBR。在纯 UEFI 启动模式下,它将读取 /efi/boot/bootx64.efi 文件。
另请注意,FAT 分区应由第一个 MBR 分区条目寻址并处于活动状态。