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

Operating system 如何通过代码将efi应用程序设置为引导加载程序?,operating-system,boot,bootloader,uefi,Operating System,Boot,Bootloader,Uefi,通过这样做,我能够创建一个简单的efi应用程序,当从uefi shell执行时,打印hello world。然而,我想知道如何创建可引导的EFI映像。我尝试在shell中使用bcfg命令,并将efi二进制文件添加为引导序列之一。然而,是否有任何方法可以不需要进入外壳就可以做到这一点 但是,如果您实际上正在构建自己的固件,您也可以 查看创建可引导EFI映像并设置默认引导选项 到这个二进制文件。如果将二进制文件包括为 是ROM的一部分,但设置 文件系统,以便将其视为正常启动选项 年,尼古拉斯·安布里

通过这样做,我能够创建一个简单的efi应用程序,当从uefi shell执行时,打印hello world。然而,我想知道如何创建可引导的EFI映像。我尝试在shell中使用bcfg命令,并将efi二进制文件添加为引导序列之一。然而,是否有任何方法可以不需要进入外壳就可以做到这一点

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


年,尼古拉斯·安布里给出了一个很好的答案,但我找不到任何资源来进一步探讨他提到的话题。任何帮助都将不胜感激。谢谢

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


UEFI Shell实现了
bcfg
命令,它本身就是一个UEFI应用程序。因为它的源代码是公开的,所以您可以查看一下
bcfg
命令的实现,尤其是函数。

在unixsmurf的答案上,我认为UEFI将在规范中自动查找位于EFI/BOOT/bootx64.EFI的文件名。当创建一个UEFI应用程序,该应用程序打算在引导时由计算机自动加载时,只需将该应用程序放在指定的路径上即可。结合unixsmurf所提到的,我可以让计算机在启动时自动加载任何UEFI应用程序。

是的,但请注意,在许多系统上,这将绕过
boot\code>/
BootOrder
变量中设置的启动项。这被称为“可移动媒体路径”,通常用于操作系统安装程序等。另外值得注意的是,路径是特定于体系结构的。