我有一个编译和链接的 C 文件,据说可以由 UEFI 系统作为内核运行,我注意到使用 qemu 运行它很乏味。
有没有办法像 BIOS 引导加载程序一样运行此代码(将原始二进制文件(可能是 EFI 或 IMG 文件)注入 USB 记忆棒并打开它所连接的计算机)?
我有一个编译和链接的 C 文件,据说可以由 UEFI 系统作为内核运行,我注意到使用 qemu 运行它很乏味。
有没有办法像 BIOS 引导加载程序一样运行此代码(将原始二进制文件(可能是 EFI 或 IMG 文件)注入 USB 记忆棒并打开它所连接的计算机)?
要让 UEFI 在 USB 闪存上启动可执行文件,您需要:
USB闪存上的“MBR分区”或GPT;一个分区格式化为 FAT 文件系统。这个分区可能还需要在分区表中标记为“EFI 系统分区”(UEFI 规范不是很清楚,但对我来说很有意义)。
您要执行的文件必须位于特定目录中,并且具有取决于平台的特定名称(例如,“ \EFI\BOOT\BOOTx64.EFI
”代表 64 位 80x86)
可执行文件的 PE 标头中的“机器类型”字段必须与给定的名称匹配(例如0x8664
,对于 64 位 80x86)。
另一个限制是您需要确保在 UEFI 的设置中关闭 SecureBoot;或弄清楚如何使用固件接受的密钥对可执行文件进行数字签名。
请注意,可移动媒体(例如 USB 闪存)的规则与固定媒体(例如内部 SATA 驱动器)的规则不同。