ESRT 表定义

指向 ESRT 表的指针通过其在 EFI_CONFIGURATION_TABLE 中的相应 GUID 标识。

#define EFI_SYSTEM_RESOURCE_TABLE_GUID   \
{ 0xb122a263, 0x3661, 0x4f68,  0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80  }

下表描述了 ESRT 表的格式和表中包含的固件资源条目。

字段 数组值 字节长度 字节偏移量 描述
固件资源计数 4 0 ESRT 中的固件资源条目数。 不得为零。
固件资源最大值 4 4 在不重新分配表的情况下可以添加的资源数组条目的最大数目。 必须大于或等于固件资源计数。
固件资源版本 8 8 固件资源条目版本。 此值应设置为1。
固件资源条目数组 固件资源条目0
固件类 16 16 标识可通过 update 胶囊更新的固件组件的 GUID。 在更新过程中,此 GUID 将作为 update 胶囊标头的 CapsuleGuid 参数传递到 UEFI 更新包运行时服务。
固件类型 4 32 标识固件资源类型的下列值之一:
  • 0:未知
  • 1:系统固件
  • 2:设备固件
  • 3: UEFI 驱动程序
固件版本 4 36 当前固件版本,其中较大的数字表示较新的版本。 此值的格式未定义,但应包含版本的主要版本号和次要版本号。 建议的格式为第一个字,第二个单词为次要版本号。
支持的最低固件版本 4 40 固件资源可针对给定系统/设备回滚到的最低固件资源版本。 如果此固件版本中提供了与安全相关的修补程序,则兼容性最低的版本应等于当前固件版本。
胶囊标志 4 44 将传入 UEFI 更新胶囊运行时服务的标志,在 update 胶囊标头的 "标志" 字段 (的位0–15中,负责配置 UEFI 规范) 部分7.5.3 定义的标志的位 16-31。
上次尝试版本 4 48 尝试更新的最后一个固件版本。 此值使用与固件版本相同的格式。
上次尝试状态 4 52 描述上次固件更新尝试状态的下列值之一:
  • 0:成功
  • 1:失败
  • 2:资源不足
  • 3:版本不正确
  • 4:图像格式无效
  • 5:身份验证错误
  • 6:电源事件-未连接 AC
  • 7:电源事件-电池不足
 ... 固件资源条目1

为了 (系统固件) ,核心 UEFI 固件应分配和填充包含一个系统资源条目的 "ESRT" 配置表。 出于说明目的,在本指南中,核心固件还将创建一个额外的条目,该条目表示使用固件更新包机制支持设备固件更新的设备。

必须始终有一个描述系统固件的条目。 此条目用于作为系统固件更新的目标。 如果实现将系统和设备固件更新作为单一单一操作执行,则必须使用系统固件条目作为更新的目标。 在所有其他情况下,设备固件更新的目标是描述设备固件的 ESRT 项。

第一步是生成 Guid,用于表示这两个固件资源,即 {SYSTEM_FIRMWARE} 和 {DEVICE_FIRMWARE}。 表2显示了一个表定义的示例。 此示例假设两个固件版本当前为版本 1 (固件版本 = = 1) 。

字段 数组值 注释
固件资源计数 2 此表包含两个固件资源条目。
固件资源最大值 2 此表分配包含足够的空间,最多可描述两个资源。
固件资源版本 1 此表使用的固件资源条目格式版本为1。
固件资源条目数组 固件资源条目0
固件类 (SYSTEM_FIRMWARE) 此 GUID 标识用于通过 PnP 进行更新的系统固件。
固件类型 1 系统固件类型为 1。
固件版本 1 当前系统固件版本为 1。
支持的最低固件版本 1 支持的最低固件版本为 1,因此无法将固件回滚到版本 1 之前的版本。
"标记" 0 系统固件未定义任何专用设备更新标志。
上次尝试版本 1 尝试更新的最后一个系统固件版本是版本 1。
上次尝试状态 0 上次系统固件更新尝试成功。
固件资源条目 1
Firmware 类 (DEVICE_FIRMWARE) 此 GUID 通过 PnP 标识要更新的设备固件。
固件类型 2 设备固件类型为 2。
固件版本 1 当前设备固件版本为 1。
支持的最低固件版本 1 支持的最低固件版本为 1,因此无法将固件回滚到版本 1 之前的版本。
"标记" 0x8010 设备固件定义专用机更新标志 (0x8010) 。
上次尝试版本 1 尝试更新的最后一个设备固件版本是版本 1
上次尝试状态 0 上次设备固件更新尝试成功。

本文档的其他地方使用了上述 ESRT 示例来演练固件更新过程,并Windows更新过程和支持固件实现的支持。

即插即用设备

创作更新驱动程序包

处理更新

来自 UEFI 环境的设备 I/O

无缝危机预防和恢复

固件更新状态