6

我可以在 UEFI 环境中构建和手动执行EFI 应用程序。但是,我想让我的应用程序在启动时自动执行。

有没有办法告诉引导加载程序执行此操作,或者我需要将我的应用程序转入驱动程序以使其自动执行?我丢失的 FDF、DEC、DSC 或 INF 文件中是否有某些条目?

4

2 回答 2

9

您可以将 startup.nsh 脚本文件添加到调用您的应用程序的 UEFI Shell 引导驱动器。

以下链接可作为在 shell 中使用脚本的方便参考:UEFI Shells and Scripting。具体看第 3 节(EFI Shell 脚本)。

但是,如果您实际上是在构建自己的固件,您还可以查看创建可引导的 EFI 映像并将默认引导选项设置为此二进制文件。如果您将二进制文件作为 ROM 的一部分包含在内,这是最有用的,但设置文件系统可能会涉及一些问题,以便将其视为正常的引导选项。

此外,如果您可以完全访问您的固件源,您也可以从您的 BDS 驱动程序加载和调用您的二进制文件。我不推荐这条路线,除非您特别打算创建一个永远不会启动任何其他映像的独立设备。

于 2014-03-26T18:17:12.417 回答
3

@NicholasEmbry 答案包含几乎所有需要的内容,但我想澄清一些事情并添加该领域的最新改进。

当您没有固件的源代码时,将 UEFI 应用程序映像添加到启动选项实际上是最好的方法,这是典型的情况。您不必创建任何特殊的可启动映像,它应该是简单的 UEFI 应用程序映像,这意味着您INF应该包含:

MODULE_TYPE           = UEFI_APPLICATION

此选项不仅适用于 Option ROM,还适用于所有 UEFI 可读介质。例如,您可以FAT32在存储上创建分区(无论是 USB、HDD、SSD 等,它只需要固件可以读取)并将应用程序映像放置在该分区上。然后启动到 UEFI Shell 并使用bcfg命令来影响您的启动顺序。

bcfg您的 BIOS 供应商可能会阻止该命令。在这种情况下,请按照此帖子中的程序进行操作。这是使用 U 盘启动rEFInd 。rEFInd包含bcfg工具并让您能够使用它。

如何使用bcfg

所有都在帮助中描述help bcfg -b-b是 UEFI 寻呼机。对于那些喜欢快捷方式的人,此命令将显示系统中的所有启动选项:

bcfg boot dump -v

您可以使用以下命令添加您的应用程序:

bcfg boot add <boot_pos> <path_to_uefi_image> <boot_order_name>

<boot_pos>- 引导顺序中的位置。请注意,您通常希望将应用程序放在操作系统之前。如果在您的操作系统之前没有免费的启​​动选项编号,您当然可以将您的操作系统向下移动一个选项bcfg boot mv <old_pos> <new_pos>,然后在其间添加您的应用程序映像。

<path_to_uefi_image>- UEFI 映像的路径。这是 UEFI 可读路径,即。fs0:\foobar.efi

<boot_order_name>- 这就是您的应用程序在引导 BIOS 菜单中的显示方式

于 2016-01-11T12:14:46.083 回答