ATF快速扫盲(Quick Start)

217 阅读3分钟

目录
1、什么是ATF
2、那么ATF里都包括哪些东西呢?
3、ATF定义的启动模型
4、ATF的rt_svc介绍(runtime service)
4.1、SPD(opteed)举例
5、ATF参与的多系统交互模型
6、ATF如何处理业务逻辑的呢
推荐

本文转自 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,11年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发。
1、什么是ATF
首先什么是TF-A(ATF)? ATF就是一个固件, 一段代码,一个为armv7-A/armv8-A/armv9-A提供的参考实现代码。(注意,这只是参考实现,你也可以不用ATF,用自己写的一个固件。)
image.png
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的概念)
image.png
4、ATF的rt_svc介绍(runtime service)
image.png
4.1、SPD(opteed)举例
例如负责双系统切换的SPD,它是OEN_TOS的RT-Service,它负责启动TEE和双系统切换。
image.png
补充双系统切换时寄存器的保存和恢复模型(switch cpu_context模型)
image.png
5、ATF参与的多系统交互模型
特权等级、security State之间的交互模型
ATF是一段跑在EL3特权等级的代码。如下是一个特权等级、security State之间的切换模型,可以看出所有的交互和跳转都是通过异常向量表进行的。

image.png
异常特权等级之间的跳转模型都是通过同步异常或异步异常进行的:
image.png
进入ATF的方式触发异常:同步异常(不限于smc)、异步异常(irq,fiq,serror)

➨ 如果是同步异常,那么会判断是不是smc调用触发的同步异常,如果是则进入跳转ATF中异常向量表中的同步异常程序smc_handler64或smc_handler32
在该程序中,解析smc id,来选择跳转到具体哪一个rt-svc(runtime service)

➨ 如果是异步异常,那么一定是触发了irq或fiq或serror中断等,此时进入跳转ATF中异常向量表中的异步异常程序,进而跳转到响应的中断处理函数.

6、ATF如何处理业务逻辑的呢
那么ATF里都有哪些业务逻辑呢,如何区分和处理的呢?

当有异常进来后,进行一些判断,如您是同步异常还是异步异常? 如果是异步异常,那么你是do something 还是转发中断 ? 如果是同步异常,那么你是do something,还是执行RT-Service?
image.png 添加威♥:sami01_2023,回复ARM中文,领取ARM中文手册