我可以在UEFI环境中运行EFI应用程序build and manually execute。但是,我希望在启动时自动执行我的应用程序。在启动时自动运行EFI应用程序
有没有办法告诉引导加载程序来做到这一点,或者我需要将我的应用程序中的驱动程序自动执行?是否有可能在我失踪的FDF,DEC,DSC或INF文件中输入一些内容?
我可以在UEFI环境中运行EFI应用程序build and manually execute。但是,我希望在启动时自动执行我的应用程序。在启动时自动运行EFI应用程序
有没有办法告诉引导加载程序来做到这一点,或者我需要将我的应用程序中的驱动程序自动执行?是否有可能在我失踪的FDF,DEC,DSC或INF文件中输入一些内容?
您可以将startup.nsh脚本文件添加到调用您应用程序的UEFI Shell启动驱动器。
以下链接应该作为使用shell中脚本的便捷参考:UEFI Shells and Scripting。具体看第3部分(EFI Shell脚本)。但是,如果您实际构建自己的固件,则还可以查看创建可引导的EFI映像并将默认引导选项设置为此二进制文件。如果您将二进制文件作为ROM的一部分包含在内,这是非常有用的,但它可能会涉及到设置文件系统,因此它被视为正常启动选项。另外,如果您可以完全访问固件源,也可以从BDS驱动程序加载并调用二进制文件。我不推荐这种路线,除非您专门打算创建一个永远不会启动任何其他图像的独立设备。
@NicholasEmbry答案包含几乎所有需要的东西,但我想澄清一些事情并在该领域添加最新的改进。
添加UEFI应用程序映像到启动选项实际上是最知名的方法,当你没有你的固件的源代码,典型的情况是什么。您没有创建任何特殊的引导映像应该是简单的UEFI应用图像,什么意思,你INF
应该包含:
MODULE_TYPE = UEFI_APPLICATION
这个选项不只是选项ROM这是所有UEFI可读介质。例如,您可以在存储上创建FAT32
分区(无论它是USB,HDD,SSD等,只需要固件可读),并将应用程序映像放置在此分区上。然后启动到UEFI Shell并使用bcfg
命令来影响您的启动顺序。
bcfg
命令可以被BIOS供应商阻止。在这种情况下,请按照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菜单
这个答案是真棒可见。请Nicholas,你能告诉我更多关于第二个和第三个选项吗? –