作者简介
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?
审核编辑 :李倩
-
驱动程序
+关注
关注
19文章
827浏览量
47966 -
代码
+关注
关注
30文章
4752浏览量
68364
原文标题:ATF快速扫盲(Quick Start)
文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论