作者簡介
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之間的切換模型,可以看出所有的交互和跳轉都是通過異常向量表進行的。
異常特權等級之間的跳轉模型都是通過同步異?;虍惒疆惓_M行的:
進入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文章
838瀏覽量
48091 -
代碼
+關注
關注
30文章
4802瀏覽量
68736
原文標題:ATF快速掃盲(Quick Start)
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論