[ATF]-MTK:一篇文章了解ATF原理
關(guān)鍵詞: Non-cacheable,Cacheable, non-shareable,inner-shareable,outer-shareable, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、內(nèi)存管理、頁表…
快速鏈接:
.
👉👉👉 個人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
文章目錄
- 1、ARMv8的軟件結(jié)構(gòu)
- 2、ATF的編譯
- 3、ATF啟動
- 4、跳轉(zhuǎn)到ATF的兩種方式: 中斷和smc
- 5、ATF rt_svc(smc的劃分)
- 6、sip/tos的調(diào)用
- 7、sip/tos的業(yè)務(wù)劃分
環(huán)境 : armv8的MTK芯片, ATF v1.6版本
1、ARMv8的軟件結(jié)構(gòu)
(1)、armv8架構(gòu)下ARM官方的軟件框圖
(2)、armv8架構(gòu)下我們常用的軟件框圖
(3)、軟件框圖介紹–以指紋為例
2、ATF的編譯
(1)、編譯的命令
- make -C $DIRPATH RESET_TO_BL31=1 PLAT=xxxx clean
- make -C $DIRPATH RESET_TO_BL31=1 PLAT=xxx xxxx_VDK=0 xxxxxx=0
xxxxxx=0 HIGHADDR_DEVICE=1 all
(2)、lds文件,程序的入庫
在lds文件中,規(guī)定的ATF鏡像的起始地址
查看ATF源碼可知,有bl1、bl2、bl31等lds,由于我們編譯選項選擇了RESET_TO_BL31=1,所以呢,程序是從bl31啟動的,也就拋棄了前面的lds(bl1、bl2)
- ./bl1/bl1.ld.S
- ./bl2/bl2.ld.S
- ./bl31/bl31.ld.S
(2)、ATF內(nèi)存地址
- TZRAM_BASE是ATF的內(nèi)存地址
- 前面的0x1000、ATF、TEE共用TARAM_BASE這段內(nèi)存
這里也畫了張圖,說明下TZRAM地址
在linux kernel中要reserved出TZRAM地址,防止被其它人使用
3、ATF啟動
(1)、ATF的啟動,從lds的入口開始
ATF中沒有MMU,物理地址等于虛擬地址, 所以生成的匯編代碼的地址,一定在給鏡像分配的地址范圍內(nèi)
(2)、ATF的啟動流程
(3)、ATF(bl31)啟動時都干了啥
- 1、初始化幾個系統(tǒng)寄存器
- 2、初始話TEE線程向量表
- 3、電源管理相關(guān)的初始化
- 4、save/restore寄存器功能:定義了一個全局?jǐn)?shù)組, 用于保存secure或normal的寄存器
- 5、一些其它的driver初始化
(3)、以android為例,詳細(xì)的系統(tǒng)啟動流程
4、跳轉(zhuǎn)到ATF的兩種方式: 中斷和smc
SOC reset之后,除bootrom–>pl—>atf之外,PC再次進入ATF的方式有兩種 : smc和中斷
- 如果是smc,則會觸發(fā)同步中斷,進入同步中斷處理程序,在該程序中會調(diào)用rt_svc(runtime service)
- 如果是irq/fiq等,則會觸發(fā)異步中斷,進入異步中斷處理程序 ,在該程序中調(diào)用注冊的中斷處理程序
注 : 第2種,一般也沒有使用
5、ATF rt_svc(smc的劃分)
rt_svc是根據(jù)SCC文檔中的smc type來定義的.目前常用的只有 : sip和tos
6、sip/tos的調(diào)用
(1)、linux kernel中的sip調(diào)用
(2)、ATF中的sip響應(yīng)
(3)、linux kernel中的tos調(diào)用
(4)、ATF中的tos響應(yīng)
7、sip/tos的業(yè)務(wù)劃分
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的[ATF]-MTK:一篇文章了解ATF原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [reference]-armv8汇编学
- 下一篇: Google zerotouch方案介绍