UEFI学习笔记(十三):Capsule Update
- 一、Capsule update相关概念
- 1、胶囊文件(Capsule File):
- 2、胶囊负载(Capsule Payload):
- 3、交付机制:
- 4、EFI 胶囊更新协议:
- 5、更新过程:
- 6、应用场景:
- 二、Capsule Services
- 1、Firmware Management Protocol(FMP)
- 1)固件发现:
- 2)固件更新:
- 3)固件管理:
- 2、EFI System Resource Table(ESRT)
- 1)固件资源描述:
- 2)支持固件更新:
- 3)与 FMP 协议结合:
- 三、如何更新Capsule
- 1、Memory Persistant Reset:
- 2、Capsule on disk:
- 1)存储:
- 2)读取和应用:
- 3)恢复和回滚:
- 4)安全性:
一、Capsule update相关概念
在UEFI(统一可扩展固件接口)中,胶囊更新(Capsule Update) 是通过胶囊文件来更新固件组件(如BIOS或系统固件)的机制。胶囊更新对于安全应用固件更新非常重要,且不需要通过操作系统来完成。两个特点:安全、
1、胶囊文件(Capsule File):
胶囊文件是一种封装了固件更新负载及相关元数据的文件。该文件可以通过不同方式传递,例如操作系统或从USB设备引导。
2、胶囊负载(Capsule Payload):
胶囊内包含的更新负载是实际要应用的固件或数据,可能包括更新的BIOS代码、ACPI表、微码或其他系统关键更新。
3、交付机制:
胶囊文件可以通过运行的操作系统使用UEFI的固件接口传递。
它也可以在启动时由固件直接从存储介质(如USB驱动器)加载。
4、EFI 胶囊更新协议:
UEFI 定义了 EFI_CAPSULE_UPDATE_PROTOCOL 来处理胶囊更新。此协议允许操作系统与固件之间进行通信,以便顺利执行更新过程。
5、更新过程:
加载胶囊: 通过操作系统应用程序或UEFI Shell命令将胶囊文件传递给系统固件。
系统重启: 大多数UEFI胶囊更新需要系统重启进入一个特殊的UEFI固件模式,处理胶囊文件。
处理胶囊: 在重启期间,UEFI固件检查是否存在待处理的胶囊更新,并处理负载。
验证: 胶囊更新通常通过数字签名进行验证,以确保其完整性和真实性。
固件更新: 如果验证通过,固件更新将被应用,完成后系统可能会再次重启。
6、应用场景:
固件的错误修复、安全补丁或新功能更新;CPU 微码更新;更新平台配置数据,如ACPI表。
二、Capsule Services
1、Firmware Management Protocol(FMP)
FMP(Firmware Management Protocol,固件管理协议是由 UEFI(统一可扩展固件接口)规范定义的一种协议,旨在提供固件更新和管理的标准化方法。FMP 主要用于支持固件更新的功能,包括固件的发现、管理和更新。核心功能
1)固件发现:
FMP 协议允许操作系统或应用程序查询系统中可用的固件组件(如 BIOS、UEFI 组件、设备固件等)。
可以获取固件的版本、状态以及相关信息,帮助用户了解当前固件的状态。
2)固件更新:
FMP 协议提供了一种标准化的方式来进行固件更新,支持固件的下载、验证和安装。
协议允许用户在系统运行时进行固件更新,而无需重新启动系统或中断服务。
3)固件管理:
FMP 还支持固件的管理功能,包括固件的启用、禁用、删除和备份等操作。
协议可以定义固件组件之间的依赖关系,确保更新的顺序和完整性。
2、EFI System Resource Table(ESRT)
ESRT(EFI System Resource Table,EFI 系统资源表是 UEFI(统一可扩展固件接口)规范中定义的一种数据结构,用于描述系统中固件更新资源的信息。ESRT 的主要目的是为操作系统或固件更新工具提供一个统一的接口,以便于发现和管理可更新的固件组件。主要功能:
1)固件资源描述:
ESRT 提供了系统中所有可更新固件组件的描述,包括每个组件的版本、状态、类型和位置等信息。
这些信息使得操作系统或更新工具可以轻松识别系统中可用的固件更新。
2)支持固件更新:
ESRT 支持固件更新流程的管理,包括更新的可用性、当前状态和更新历史等。
通过访问 ESRT,操作系统可以了解当前固件的版本,并决定是否需要进行更新。
3)与 FMP 协议结合:
ESRT 通常与 FMP(Firmware Management Protocol,固件管理协议)一起使用,为固件的发现和更新提供标准化的支持。
通过 FMP,ESRT 中描述的固件组件可以被下载、验证和更新。
三、如何更新Capsule
1、Memory Persistant Reset:
这是一种在计算机系统中用于恢复或重置内存状态的机制,尤其是在持久性内存(Persistent Memory)中。这种重置通常用于确保系统在发生故障或错误后能够恢复到已知的良好状态。
把capsule放到memory,然后重启系统。Memory里面的content是不变的,bios可以找到capsule (Memory reset / S3)
Protocol:
typedef struct \_EFI_FIRMWARE_MANAGEMENT_PROTOCOL {
EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_IMAGE_INFO GetImageInfo;
EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_IMAGE GetImage;
EFI_FIRMWARE_MANAGEMENT_PROTOCOL_SET_IMAGE SetImage;
EFI_FIRMWARE_MANAGEMENT_PROTOCOL_CHECK_IMAGE CheckImage;
EFI_FIRMWARE_MANAGEMENT_PROTOCOL_GET_PACKAGE_INFO GetPackageInfo;
EFI_FIRMWARE_MANAGEMENT_PROTOCOL_SET_PACKAGE_INFO SetPackageInfo;
} EFI_FIRMWARE_MANAGEMENT_PROTOCOL;
2、Capsule on disk:
这是UEFI(统一可扩展固件接口)规范中的一个概念,主要用于固件更新和管理。它指的是将固件更新包( Capsule)存储在磁盘上,以便在需要时进行读取和更新。主要功能:
1)存储:
胶囊可以存储在持久性存储设备上,如硬盘驱动器(HDD)、固态硬盘(SSD)或其他存储介质。这使得固件更新可以在系统启动后或运行时进行。
2)读取和应用:
系统可以在启动过程中或通过操作系统读取胶囊数据,执行固件更新。
更新过程通常包括验证胶囊的完整性和安全性,确保固件更新的有效性。
3)恢复和回滚:
在更新过程中,如果出现故障或错误,Capsule on Disk 可以支持固件的恢复和回滚操作。这意味着系统可以在固件更新失败时,恢复到先前的稳定版本。
4)安全性:
胶囊通常会包含数字签名和完整性校验,以防止未授权的更新和数据篡改。通过确保胶囊的合法性和完整性,Capsule on Disk 提高了系统的安全性。