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
Firmware 类 16 16 一个 GUID,用于标识可通过更新胶囊更新的固件组件。 此 GUID 将作为更新胶囊标头的 CapsuleGuid 参数在更新期间传递到 UEFI 更新胶囊运行时服务。
固件类型 4 32 标识固件资源类型的以下值之一:

0:未知

1:系统固件

2:设备固件

3:UEFI 驱动程序
固件版本 4 36 当前固件版本,其中较大的数字表示较新版本。 此值的格式未定义,但应包含版本主数字和次要数字。 建议的格式为第一个单词是主要单词,第二个单词是次要版本号。
最低支持的固件版本 4 40 固件资源可回滚给定系统/设备的最低固件资源版本。 如果此固件版本中提供了与安全相关的修补程序,则最不兼容的版本应等于当前固件版本。
胶囊标志 4 44 将传入 UEFI 更新胶囊运行时服务的标志(更新胶囊标头的 Flags 字段的位为 0 - 15)(OS 负责配置 16 – 31 个标志,由 UEFI 规范的第 7.5.3 节定义)。
上次尝试版本 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
Firmware 类 (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

无缝危机预防和恢复

固件更新状态