2

如何以编程方式编写从 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 应用程序添加引导选项引导。

4

2 回答 2

2

向 UEFI 引导列表添加内容:

  1. 创建 BootXXXX 变量,格式如下
  2. 更改 BootOrder 变量,在列表中的某处添加新创建的选项。

您可以在 UEFI shell 源代码中找到工作代码片段。

于 2014-10-25T11:37:31.010 回答
1

UEFI 规范中描述了其工作原理 - UEFI 论坛无需付费即可获得。当前版本是2.4B。

BootOrder 变量机制(除其他外)在第 3.2 节 - 全局定义的变量中进行了描述,但我将给出一个简短的总结。

它是按首选引导顺序排列的UINT16元素数组。UINT16值是Boot####变量名称的数字部分。因此,要对 options 进行排名Boot0001Boot0002并且Boot0003按照相反的优先顺序,您的 BootOrder 变量应该包含 (hex, ignoring endianness) 000300020001

它还需要设置 Non-Volatile、Boot-services 和 Runtime-services 属性(如该章表 11 所述)。

于 2014-09-05T17:28:47.233 回答