UEFI SysPrep应用程序永远不会启动

时间:2018-08-19 19:23:27

标签: uefi

根据UEFI规范(版本2.7勘误A)第3.1.7节(“所需的系统准备应用程序”):

  

“平台需要检查SysPrepOrder中引用的所有SysPrep ####变量。如果设置了属性位LOAD_OPTION_ACTIVE,并且存在FilePathList [0]引用的应用程序,则必须加载并启动由此标识的UEFI应用程序按照它们在SysPrepOrder中出现的顺序,以及在启动任何类型为Boot ####的加载选项之前。”

但是,在使用简单的“ Hello World +按任意键” UEFI应用程序进行的实验中,当我将其安装为SysPrep引导变量时,我没有发现能执行该应用程序的任何PC。

例如:

  • Ubuntu安装在具有单个HDD,GPT分区,UEFI引导的测试PC上。
  • 使用EFI shell,将测试应用程序“ hello.efi”从UFD(fs1 :)复制到fs0:\ EFI \ hello.efi
  • 启动到Ubuntu并使用efibootmgr添加sysprep变量:
  

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,然后使其正常启动。
  • 在操作系统开始引导之前,“ hello.efi” SysPrep应用程序未运行。

在我测试过的每台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 ####运行变量。

0 个答案:

没有答案