如何通过代码将 efi 应用程序设置为引导加载程序?

How is an efi application being set as the bootloader through code?

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

However, if you are actually building your own firmware, you can also look at creating a bootable EFI image and set your default boot option to this binary. This is most useful if you are including the binary as a part of your ROM, but it might be a little involved to set up the filesystem so that it is seen as a normal boot option.

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

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

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

加上 unixsmurf 的回答,我认为在规范中 UEFI 将自动在 EFI/BOOT/bootx64.efi 中查找文件 name/located。在制作要在开机时自动加载的UEFI应用程序时,只需将应用程序放在指定路径即可。结合unixsmurf提到的,我可以让电脑在开机时自动加载任何UEFI应用程序。