作者简介
baron,九年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发。是国内较早一批做TEE的,对商用TEE、开源TEE研究也比较深入,对未来的安全架构/安全趋势也有着明确的看法...
1、什么是ATF
首先什么是TF-A(ATF)?ATF就是一个固件, 一段代码,一个为armv7-A/armv8-A/armv9-A提供的参考实现代码。(注意,这只是参考实现,你也可以不用ATF,用自己写的一个固件。)

2、那么ATF里都包括哪些东西呢?
最初的功能很简单:
cpu_context的保存和恢复,即: 双系统的切换
电源管理、PSCI等
但是随着技术的发展,功能也越来越多,越来越复杂,以下列举了当前的部分功能:
安全世界的初始化,例如异常向量表、一些控制寄存器和中断寄存器
CPU reset和power down的时序。包括Arm DynamIQ cpu的支持
标准的system IP的驱动,例如Generic Interrupt Controller (GIC), Cache Coherent Interconnect (CCI), Cache Coherent Network (CCN), Network Interconnect (NIC) and TrustZone Controller (TZC).
一种通用的SCMI驱动程序, 适用于电源控制接口,例如ARM SYSTEM Control Processor(SCP)
smc处理,using an EL3 runtime services framework
PSCI库的支持,用于CPU/Cluster/system的电源管理,这个库集成到了aarch64 el3的runtime中,也适用于aarch32 el3
secure monitor代码,用于world切换、中断routing
SPDs for the OP-TEE Secure OS, NVIDIA Trusted Little Kernel and Trusty Secure OS
SecureBoot实现
预集成TBB与Arm CryptoCell产品,利用其硬件Root的信任和加密加速服务。
3、ATF定义的启动模型
ATF将镜像进行了划分,BL1 BL2属于启动引导镜像,BL3属于runtime镜像。BL3又分为BL31 BL32 BL33对应的分别是ATF Runtime、REE Runtime、TEE Runtime。
(注:本文是Quick Start,不深入解释这些概念,请自行理解:BL1 BL2 BL31 BL32 BL33的概念、EL3 S-EL1 NS-EL1的概念)

4、ATF的rt_svc介绍(runtime service)

4.1、SPD(opteed)举例
例如负责双系统切换的SPD,它是 OEN_TOS的RT-Service,它负责启动TEE和双系统切换。
补充双系统切换时寄存器的保存和恢复模型( switchcpu_context模型)
5、ATF参与的多系统交互模型
特权等级、security State之间的交互模型,ATF是一段跑在EL3特权等级的代码。如下是一个特权等级、security State之间的切换模型,可以看出所有的交互和跳转都是通过异常向量表进行的。

异常特权等级之间的跳转模型都是通过同步异常或异步异常进行的:

进入ATF的方式触发异常:同步异常(不限于smc)、异步异常(irq,fiq,serror)
➨ 如果是同步异常,那么会判断是不是smc调用触发的同步异常,如果是则进入跳转ATF中异常向量表中的同步异常程序smchandler64或smchandler32 在该程序中,解析smc id,来选择跳转到具体哪一个rt-svc(runtime service)
➨ 如果是异步异常,那么一定是触发了irq或fiq或serror中断等,此时进入跳转ATF中异常向量表中的异步异常程序,进而跳转到响应的中断处理函数。
6、ATF如何处理业务逻辑的呢
那么ATF里都有哪些业务逻辑呢,如何区分和处理的呢?
当有异常进来后,进行一些判断,如您是同步异常还是异步异常? 如果是异步异常,那么你是 dosomething 还是 转发中断 ?如果是同步异常,那么你是 dosomething,还是执行 RT-Service?

(更多相关文章,百度/Google搜索"代码改变世界ctw ATF")
阅码场付费会员专业交流群
会员招募:各专业群会员费为88元/季度,权益包含群内提问,线下活动8折,每周定期技术分享(普通用户直播免费,分享后每次点播价为19元/次),有意加入请私信客服小月(小月微信号:linuxer2016)
专业群介绍:
甄建勇-性能优化与体系结构
本群定位Perf、cache和CPU架构技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师甄建勇主持。
李春良-Xenomai与实时优化
本群定位Xenomai与实时优化技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师李春良和彭伟林共同主持。
周贺贺-Tee和ARM架构
本群定位Tee和ARM架构技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师周贺贺主持。
谢欢-Linux tracers
本群定位Linux tracers技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师谢欢主持。
✦
✦