UEFI以编程方式添加引导选项

时间:2014-08-27 11:08:21

标签: uefi

如何编写以编程方式从UEFI驱动程序添加启动选项的代码? 1)我尝试添加“Boot0001”变量:

  ZeroMem(Data, 2048);
  StrCpy(Data, L"Boot0001");
  DataSize = StrLen(Data) * 2;

  Status = gRT->SetVariable(L"Boot0001", &dGuid, Attr, DataSize, &Data);

2)我需要在“BootOrder”变量中添加条目。但我无法理解。 理想情况下,我想从示例efi应用程序添加启动选项启动。

2 个答案:

答案 0 :(得分:2)

向UEFI启动列表添加内容:

  1. 创建BootXXXX变量,其格式类似于this
  2. 更改BootOrder变量,在列表中的某处添加新创建的选项。
  3. 您可以找到有效的代码段in UEFI shell sources

答案 1 :(得分:1)

UEFI规范中描述了其工作原理 - 无需the UEFI Forum付款即可使用。目前的版本是2.4B。

BootOrder变量机制(以及其他内容)在3.2节 - 全局定义变量中描述,但我将给出一个简短的总结。

它是首选引导顺序的 UINT16 元素数组。 UINT16 值是Boot####变量名称的数字部分。因此,要按优先顺序相反的顺序对选项Boot0001Boot0002Boot0003进行排名,您的BootOrder变量应包含(十六进制,忽略字节顺序)000300020001

还需要设置非易失性,引导服务和运行时服务属性(如该章的表11所述)。