在引导时自动运行EFI应用程序

时间:2014-03-25 17:06:03

标签: uefi efi

我可以在UEFI环境中build and manually execute EFI应用程序。但是,我想让我的应用程序在启动时自动执行。

有没有办法告诉引导加载程序执行此操作,还是需要将我的应用程序转换为驱动程序才能自动执行?在FDF,DEC,DSC或INF文件中是否有一些条目我缺少?

2 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:3)

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

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

MODULE_TYPE           = UEFI_APPLICATION

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

BIOS供应商可以阻止

bcfg命令。在这种情况下,请遵循this post的程序。这是使用USB记忆棒启动rEFIndrEFInd包含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> - 启动顺序中的位置。请注意,您通常希望在OS之前放置应用程序。如果您的操作系统之前没有免费启动选项编号,您当然可以将您的操作系统向下移动一个选项bcfg boot mv <old_pos> <new_pos>,然后在其间添加您的应用程序图像。

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

<boot_order_name> - 这是应用程序在启动BIOS菜单中可见的方式