2014-03-25 120 views
6

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

有没有办法告诉引导加载程序来做到这一点,或者我需要将我的应用程序中的驱动程序自动执行?是否有可能在我失踪的FDF,DEC,DSC或INF文件中输入一些内容?

回答

6

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

以下链接应该作为使用shell中脚本的便捷参考:UEFI Shells and Scripting。具体看第3部分(EFI Shell脚本)。但是,如果您实际构建自己的固件,则还可以查看创建可引导的EFI映像并将默认引导选项设置为此二进制文件。如果您将二进制文件作为ROM的一部分包含在内,这是非常有用的,但它可能会涉及到设置文件系统,因此它被视为正常启动选项。另外,如果您可以完全访问固件源,也可以从BDS驱动程序加载并调用二进制文件。我不推荐这种路线,除非您专门打算创建一个永远不会启动任何其他图像的独立设备。

+0

这个答案是真棒可见。请Nicholas,你能告诉我更多关于第二个和第三个选项吗? –

1

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

添加UEFI应用程序映像到启动选项实际上是最知名的方法,当你没有你的固件的源代码,典型的情况是什么。您没有创建任何特殊的引导映像应该是简单的UEFI应用图像,什么意思,你INF应该包含:

MODULE_TYPE   = UEFI_APPLICATION 

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

bcfg命令可以被BIOS供应商阻止。在这种情况下,请按照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菜单

相关问题