【问题标题】:How is an efi application being set as the bootloader through code?如何通过代码将 efi 应用程序设置为引导加载程序?
【发布时间】:2018-10-22 22:09:51
【问题描述】:

通过关注tutorial,我能够创建一个简单的 efi 应用程序,当从 uefi shell 执行时打印 hello world。但是,我想知道如何创建可启动的 EFI 映像。我尝试在 shell 中使用 bcfg 命令并将我的 efi 二进制文件添加为引导序列之一。但是,有没有不需要进入shell的方法呢?

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

this question 中,Nicholas Embry 给出了一个很好的答案,但我无法找到任何资源来进一步探索他提到的主题。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: operating-system boot bootloader uefi


    【解决方案1】:

    bcfg,就像 Linux 中的efibootmgr,最终使用GetVariable()SetVariable() 运行时服务(在启动时也可用)来修改系统启动配置。

    执行bcfg 命令的UEFI Shell 本身就是一个UEFI 应用程序。由于其源代码是公开的,您可以查看bcfg 命令的实现——尤其是BcfgAdd() 函数。

    【讨论】:

      【解决方案2】:

      除了 unixsmurf 的回答之外,我认为 UEFI 在规范中会自动查找文件名/位于 EFI/BOOT/bootx64.efi。当制作一个打算在启动时由机器自动加载的 UEFI 应用程序时,只需将应用程序放在指定的路径中即可。结合 unixsmurf 提到的,我可以让电脑在启动时自动加载任何 UEFI 应用程序。

      【讨论】:

      • 是的,但请注意,在许多系统上,这将绕过在 Boot####/BootOrder 变量中设置的引导条目。这被称为“可移动媒体路径”,通常用于操作系统安装程序等。另外值得注意的是,路径是特定于架构的。
      猜你喜欢
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      相关资源
      最近更新 更多