上述 capsule 更新仅适用于 Qualcomm Linux 高级(advanced)和基础(base)变体。
capsule 更新中使用的 UEFI 变量
与平台固件交互的协议和服务实现了操作系统与 UEFI 之间的通信。UEFI 提供标准启动环境、包含平台信息的数据表,以及供操作系统加载程序和操作系统使用的启动/运行时服务调用。表:capsule 更新中使用的 UEFI 变量
有关 OsIndications 和 OsIndicationsSupported 变量的更多信息,请参阅操作系统与固件之间的信息交换。
- 如果 ESP 分区(EFI/UpdateCapsule 中)中有多个 capsule,则将所有 capsule 纳入更新范围,并按字母顺序进行更新。
- 将所有 UEFI 非易失性变量存储在回滚保护内存块(RPMB)分区中,该分区必须处于已预配(Provisioned)状态。
- 在启用了 Qualcomm 安全启动的设备上自动预配 RPMB。
- 在 Qualcomm 非安全设备上,不自动预配 RPMB;而是使用测试密钥进行预配。
- 如果在非安全设备上使用测试密钥预配了 RPMB,则在为设备启用 Qualcomm 安全启动时,无法使用设备密钥重新预配 RPMB。
- 从 Linux 使用
rpmbClient应用程序进行 RPMB 预配。有关详细信息,请参阅 Qualcomm 安全 Linux 指南。
用于 capsule 更新状态的 EFI 系统资源表(ESRT)
ESRT 是一种可选机制,用于标识用于提供固件更新的设备和系统固件资源。每个 ESRT 条目描述一个可更新的固件资源,并报告上次尝试更新的状态。下表列出了用于报告上次尝试更新状态的 ESRT 条目:表:ESRT 条目
操作系统通过 sysfs 路径公开 ESRT 内容。
只有在 RPMB 已预配的情况下才能获取上次尝试的固件版本。
有关 ESRT 的更多信息,请参阅固件更新和报告 - UEFI 规范 2.10 文档。
使用 Capsule 进行固件更新
流程图展示了如何使用 UEFI capsule 方法更新设备固件,利用不同的 UEFI 变量并支持回滚。- 启动:空中下载(OTA)更新过程开始,操作系统准备更新 capsule,(通过设置
OsIndications)向 UEFI 发出开始更新的信号。操作系统设置TrialBootMaxCount以跟踪允许的试启动次数,然后重启设备。 - UEFI 更新:重启后,系统检查
OsIndications。如果存在,则执行 capsule 更新,更新 EFI 系统资源表(ESRT),清除OsIndications;如果设置了TrialBootMaxCount,则启用TrialBootEnabled并再次重启系统。 - 试启动处理:
- 如果未设置
OsIndications,系统检查TrialBootEnabled是否处于激活状态。 - 如果
TrialBootEnabled处于激活状态且TrialBootCount等于TrialBootMaxCount,则检查回滚计数。- 如果允许回滚,UEFI 将恢复固件、更新 ESRT 并重启。
- 如果不允许回滚,则表示已达到回滚上限。
- 如果
TrialBootCount小于TrialBootMaxCount,则递增TrialBootCount并继续该流程。
- 如果未设置
- 完成:系统启动到操作系统,检查 ESRT,如果操作系统成功启动,则重置
TrialBootEnabled字段。 - 结果:
- 如果
TrialBootEnabled未激活,则确认 OTA 更新已完成。 - 系统清除
OtaTrialBootStatus,并将LwSupportedFwVersion设置为当前固件版本以禁用回滚。
- 如果
- 恢复:如果固件 capsule 更新在更新过程中失败,UEFI 具有恢复机制以保持稳定性和功能性。
- 回滚:如果允许回滚,UEFI 将恢复到以前的固件版本,并将固件还原到更新尝试之前的状态。
- ESRT 更新:系统更新 ESRT 以反映回滚。
- 重启:回滚完成后,UEFI 触发重启,以确保运行的是先前的稳定固件版本。此过程应用更新,并在试用期内出现问题时启用回滚。
- 确保系统仅应用来自受信任来源的更新。
- 防止恶意或未经授权的更新。
- 验证数字签名以确认传输过程中的完整性。
- 仅安装经过验证和测试的更新。
- 降低因固件故障导致系统崩溃或功能异常的风险。

