ATF快速扫盲(Quick Start)


作者简介

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中异常向量表中的同步异常程序smchandler64smchandler32 在该程序中,解析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技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师谢欢主持。