根据UEFI规范(版本2.7勘误A)第3.1.7节(“所需的系统准备应用程序”):
“平台需要检查SysPrepOrder中引用的所有SysPrep ####变量。如果设置了属性位LOAD_OPTION_ACTIVE,并且存在FilePathList [0]引用的应用程序,则必须加载并启动由此标识的UEFI应用程序按照它们在SysPrepOrder中出现的顺序,以及在启动任何类型为Boot ####的加载选项之前。”
但是,在使用简单的“ Hello World +按任意键” UEFI应用程序进行的实验中,当我将其安装为SysPrep引导变量时,我没有发现能执行该应用程序的任何PC。
例如:
sudo efibootmgr -y –创建–disk / dev / sda –第1部分–loader /EFI/hello.efi –标签“ hello” –详细
结果:
SysPrepOrder:0000
SysPrep0000 *您好HD(1,GPT,f440c17d -... c72d,0x800,0x100000)/ File(\ EFI \ hello.efi)
在我测试过的每台PC上,我都验证了EFI BootOptionSupport变量是否已将第4位设置为(0x10),表示EFI_BOOT_OPTION_SUPPORT_SYSPREP。
关于UEFI规范第3.1.7节中的另一条报价:
“启动时,平台需要为SysPrep ####加载的应用程序提供与启动时通常提供给Boot ####变量引用的应用程序相同的服务,例如控制台和网络。 “
在我看来,任何将作为Boot ####变量运行的EFI应用程序也将作为SysPrep ####变量运行。这是正确的吗?
在我测试过的每台PC上,hello.efi应用程序的确从Boot ####变量运行(使用与上述相同的efibootmgr命令,但不带“ -y”),但从未作为SysPrep ####运行变量。