UEFI编程添加启动选项

3

如何编写代码以通过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应用程序引导的启动选项。


  1. 结果是什么?
  2. 你不明白的方面是什么?
- unixsmurf
  1. NVRAM中的新变量为"Boot0001"。
  2. 如何将"BootOrder"变量更改为将"Boot0001"选项作为第二个选项添加进去?
- yakovlev.it
抱歉,我正在旅行中,电脑使用不稳定。好的,这已经足够清楚了,可以回答你的问题了。 - unixsmurf
2个回答

2

添加到UEFI启动列表的步骤如下:

  1. 创建BootXXXX变量,其格式类似于这样
  2. 更改BootOrder变量,在列表中的某处添加新创建的选项。

您可以在UEFI shell源代码中找到可用的代码段(链接)


1
这是如何工作的在UEFI规范中有描述 - 可以免费从UEFI论坛获取。当前版本为2.4B。
BootOrder变量机制(以及其他内容)在3.2节 - 全局定义变量中进行了描述,但我将简要概括一下。
它是一个UINT16元素数组,按照首选启动顺序排序。 UINT16值是您的 Boot#### 变量名称的数字部分。因此,要按反向优先级对选项 Boot0001 , Boot0002 和 Boot0003 进行排名,您的BootOrder变量应包含(十六进制,忽略字节顺序) 000300020001 。
它还需要设置非易失性、启动服务和运行时服务属性(如该章节中的表11所述)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接