
第3章 ARM可信固件
3.1 为什么使用ATF
ARM可信任固件(ARM Trusted Firmware, ATF)是由ARM官方提供的底层固件,该固件统一了ARM底层接口标准,如电源状态控制接口(Power Status Control Interface, PSCI)、安全启动需求(Trusted Board Boot Requirements, TBBR)、安全世界状态(SWS)与正常世界状态(NWS)切换的安全监控模式调用(secure monitor call, smc)操作等。ATF旨在将ARM底层的操作统一使代码能够重用和便于移植。
3.2 ATF的主要功能
ATF的源代码共分为bl1、bl2、bl31、bl32、bl33部分,其中bl1、bl2、bl31部分属于固定的固件,bl32和bl33分别用于加载TEE OS和REE侧的镜像。整个加载过程可配置成安全启动的方式,每一个镜像文件在被加载之前都会验证镜像文件的电子签名是否合法。
ATF主要完成的功能如下:
□ 初始化安全世界状态运行环境、异常向量、控制寄存器、中断控制器、配置平台的中断。
□ 初始化ARM通用中断控制器(General Interrupt Controller, GIC)2.0版本和3.0版本的驱动初始化。
□ 执行ARM系统IP的标准初始化操作以及安全扩展组件的基本配置。
□ 安全监控模式调用(Secure Monitor Call, smc)请求的逻辑处理代码(Monitor模式/EL3)。
□ 实现可信板级引导功能,对引导过程中加载的镜像文件进行电子签名检查。
□ 支持自有固件的引导,开发者可根据具体需求将自有固件添加到ATF的引导流程中。
3.3 ATF与TEE的关系
为规范和简化TrustZone OS的集成,在ARMv8架构中,ARM引入ATF作为底层固件并开放了源码,用于完成系统中BootLoader、Linux内核、TEE OS的加载和启动以及正常世界状态和安全世界状态的切换。ATF将整个启动过程划分成不同的启动阶段,由BLx来表示。例如,TEE OS的加载是由ATF中的bl32来完成的,安全世界状态和正常世界状态之间的切换是由bl31来完成的。在加载完TEE OS之后,TEE OS需要返回一个处理函数的接口结构体变量给bl31。当在REE侧触发安全监控模式调用指令时,bl31通过查询该结构体变量就可知需要将安全监控模式调用指令请求发送给TEE中的那个接口并完成正常世界状态到安全世界状态的切换。
3.4 小结
在ARMv8架构中,如果系统需要支持TEE,则几乎都必须使用由ARM提供的ATF作为底层固件。关于ATF如何管理BootLoader、TEE OS、Linux内核以及各个阶段镜像的加载过程和跳转过程,本书第6章将结合实际代码详细分析。