通过遵循这个tutorial,我能够创建一个简单的efi应用程序,在从uefi shell执行时打印hello world。但是,我想知道如何创建可启动的EFI映像。我尝试在shell中使用bcfg命令,并将我的efi二进制文件添加为启动序列之一。但是,无论如何都可以在不需要进入shell的情况下完成它吗?
但是,如果您实际构建自己的固件,还可以查看创建可引导的EFI映像并将默认引导选项设置为此二进制文件。如果您将二进制文件作为ROM的一部分包含在内,这是非常有用的,但是设置文件系统可能会涉及到它被视为正常启动选项。
在this question,Nicholas Embry给出了一个很好的答案,但我无法找到任何资源来进一步探讨他提到的话题。任何帮助,将不胜感激。谢谢!
bcfg
,就像Linux中的efibootmgr
一样,最终使用GetVariable()
和SetVariable()
运行时服务(在启动时也可用)来修改系统启动配置。
实现bcfg
命令的UEFI Shell本身就是UEFI应用程序。由于它的源代码是公开的,你可以查看bcfg
命令的实现 - 特别是BcfgAdd()函数。
再加上unixsmurf的答案,我认为UEFI会自动查找位于EFI / BOOT / bootx64.efi的文件名。在制作要在引导时由机器自动加载的UEFI应用程序时,只需将应用程序放在指定的路径上即可。结合unixsmurf提到的内容,我可以让计算机在启动时自动加载任何UEFI应用程序。