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 支持以及支持的固件实现。