【问题标题】:Running an EFI application automatically on boot在启动时自动运行 EFI 应用程序
【发布时间】:2014-05-03 17:03:13
【问题描述】:

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

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

【问题讨论】:

    标签: uefi efi


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这个答案太棒了。 Nicholas,你能告诉我更多关于第二个和第三个选项的信息吗?
    【解决方案2】:

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

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

    MODULE_TYPE           = UEFI_APPLICATION
    

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

    bcfg 命令可以被您的 BIOS 供应商阻止。在这种情况下,请按照this post 的程序进行操作。这是使用 U 盘启动 rEFIndrEFInd 包含 bcfg 工具并让您能够使用它。

    bcfg怎么用?

    帮助help bcfg -b 中描述了所有内容。 -b 是 UEFI 寻呼机。对于喜欢快捷方式的人,这个命令会显示系统中的所有启动选项:

    bcfg boot dump -v
    

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

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

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

    &lt;path_to_uefi_image&gt; - UEFI 映像的路径。这是 UEFI 可读路径,即。 fs0:\foobar.efi

    &lt;boot_order_name&gt; - 这就是您的应用程序在启动 BIOS 菜单中的显示方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 2011-08-24
      • 1970-01-01
      • 2021-08-23
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多