我可以在UEFI环境中build and manually execute EFI应用程序。但是,我想让我的应用程序在启动时自动执行。
有没有办法告诉引导加载程序执行此操作,还是需要将我的应用程序转换为驱动程序才能自动执行?在FDF,DEC,DSC或INF文件中是否有一些条目我缺少?
答案 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
命令来影响您的启动顺序。
bcfg
命令。在这种情况下,请遵循this post的程序。这是使用USB记忆棒启动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>
- 启动顺序中的位置。请注意,您通常希望在OS之前放置应用程序。如果您的操作系统之前没有免费启动选项编号,您当然可以将您的操作系统向下移动一个选项bcfg boot mv <old_pos> <new_pos>
,然后在其间添加您的应用程序图像。
<path_to_uefi_image>
- UEFI图片的路径。这是UEFI可读路径即。 fs0:\foobar.efi
<boot_order_name>
- 这是应用程序在启动BIOS菜单中可见的方式