ARM Trusted Firmware分析——固件升级(FWU)
参考文档:《Firmware Update (FWU)》。
ATF中关于FWU的实现没有如下文档描述完整,尤其是BL2U、NS_BL2U镜像。
可取的是FWU SMC处理、对升级包证书验签和镜像验签流程。
6.1 Introduction
FWU功能经过认证的固件从USB/SD/eMMC/NAND等外部设备获取固件进行更新。FWU可以在系统固件损坏情况下,作为恢复模式使用。
6.2 FWU Overview
参考设计:
- BL1处理:
- 检测和初始化FWU启动流程。
- 从非安全内存拷贝镜像到安全内存。
- FWU镜像认证。
- FWU过程中安全和非安全世界上下文切换。
- 其他安全世界FWU镜像处理FWU流程所需的平台初始化。
- 非安全世界FWU镜像从外部接口加载镜像到非安全内存。
FWU特性需求主要包括:
- 导出和其他EL执行的FWU镜像交互的BL1 SMC接口。
- 导出FWU代码获取信息所使用的通用平台接口,
6.3 Image Identification
每个FWU镜像和证书都通过唯一的ID识别,BL1通过调用bl1_plat_get_image_desc()获取镜像描述符image_desc_t。此ID同样用于准备CoT。
镜像描述符包括以下信息:
- 镜像是否可执行。
- 镜像在安全还是非安全世界认证和执行。
- 镜像基地址和大小。
- 镜像启动入口点配置。
- FWU镜像状态。
BL1使用FWU镜像描述符:
- 确认FWU SMC参数是否有效
- 管理FWU启动流程状态
- 初始化FWU镜像执行环境
6.4 FWU State Machine
FWU安全镜像在启动过程中可能的状态有:RESET、COPYING、COPIED、AUTHENTICATED、EXECUTED、INTERRUPTED。
FWU非安全惊险在启动过程中可能的状态有:RESET、AUTHENTICATED。
6.5 BL1 SMC接口
BL1_SMC_CALL_COUNT:获取BL1支持的SMC指令个数。
BL1_SMC_UID:获取BL1 SMC服务UUID。
BL1_SMC_VERSION:获取BL1 SMC服务版本号。
BL1_SMC_RUN_IMAGE:将执行权交给指定的EL3镜像开始执行。
FWU_SMC_IMAGE_COPY:将指定镜像从非安全内存拷贝到安全内存,后续用于认证。
FWU_SMC_IMAGE_AUTH:认证指定镜像。
FWU_SMC_IMAGE_EXECUTE:初始化认证过的镜像执行环境。
FWU_SMC_IMAGE_RESUME:
FWU_SMC_SEC_IMAGE_DONE:提示之前安全镜像执行完成。
FWU_SMC_UPDATE_DONE:完成固件更新流程。
FWU_SMC_IMAGE_RESET: