ATF的啟動過程根據(jù)ARMv8的運(yùn)行模式(AArch32/AArch64)會有所不同,但基本一致。
在AArch32中是不會去加載bl31而是將EL3或者M(jìn)onitor模式的運(yùn)行代碼保存在bl32中執(zhí)行。在AArch64中,ATF的完整啟動流程如圖下所示。
AArch64模式的ATF啟動流程
在上述啟動過程中,從一個鏡像跳轉(zhuǎn)到另外一個鏡像文件執(zhí)行的方式各不相同,以下為鏡像跳轉(zhuǎn)的過程和方式說明。
概要流程
- bl1跳轉(zhuǎn)到bl2執(zhí)行
在bl1完成了將bl2鏡像文件加載到RAM中的操作、中斷向量表的設(shè)定以及其他CPU相關(guān)設(shè)定后,bl1_main函數(shù)會解析出bl2鏡像文件的描述信息,獲取入口地址,并設(shè)定下一個階段的cpu上下文。這些操作完成之后,調(diào)用el3_exit函數(shù)來實(shí)現(xiàn)bl1到bl2的跳轉(zhuǎn),進(jìn)入bl2中開始執(zhí)行。
- bl2跳轉(zhuǎn)到bl31執(zhí)行
在bl2中將會加載bl31、bl32、bl33的鏡像文件到對應(yīng)權(quán)限的內(nèi)存中,并將該三個鏡像文件的描述信息組成一個鏈表保存起來,以備bl31啟動bl32和bl33使用。在AArch64中,bl31為EL3的執(zhí)行軟件,其運(yùn)行時的主要功能是對安全監(jiān)控模式調(diào)用(smc)指令和中斷處理,運(yùn)行在ARM的Monitor模式中。
bl32一般為TEE OS鏡像文件,本章以O(shè)P-TEE為例進(jìn)行說明。
bl33為正常世界狀態(tài)的鏡像文件,例如uboot、EKD2等。當(dāng)前該部分為BootLoader部分的鏡像文件,再由BootLoader來啟動Linux內(nèi)核鏡像。
從bl2跳轉(zhuǎn)到bl31是通過帶入bl31的入口點(diǎn)信息作為參數(shù),然后調(diào)用安全監(jiān)控模式調(diào)用指令,觸發(fā)在bl1中設(shè)定的安全監(jiān)控模式調(diào)用請求,該請求處理完成后會將中央處理器的執(zhí)行權(quán)限交給bl31,并跳轉(zhuǎn)到bl31中去執(zhí)行。
- bl31跳轉(zhuǎn)到bl32執(zhí)行
在bl31中會執(zhí)行runtime_service_inti函數(shù),該函數(shù)會調(diào)用注冊到EL3中所有服務(wù)的初始化函數(shù),其中有一個服務(wù)項就是TEE服務(wù),該服務(wù)項的初始化函數(shù)會將TEEOS的初始化函數(shù)賦值給bl32_init變量,當(dāng)所有服務(wù)項執(zhí)行完初始化后,在bl31中會調(diào)用bl32_init執(zhí)行的函數(shù)來跳轉(zhuǎn)到TEE OS中并開始執(zhí)行TEE
OS的啟動。
- bl31跳轉(zhuǎn)到bl33執(zhí)行
當(dāng)TEE-OS鏡像啟動完成后會觸發(fā)一個ID為TEESMC_OPTEED_RETURN_ENTRY_DONE的安全監(jiān)控模式調(diào)用,該調(diào)用是用來告知EL3 TEE OS鏡像已經(jīng)完成了初始化,然后將CPU的狀態(tài)恢復(fù)到bl31_init的位置繼續(xù)執(zhí)行。
bl31通過遍歷在bl2中記錄的所有鏡像信息的鏈表來找到需要執(zhí)行的bl33的鏡像。然后通過獲取到bl33鏡像的信息,設(shè)定下一個階段的CPU上下文,退出el3后進(jìn)入到bl33鏡像中開始執(zhí)行。
-
ARM
+關(guān)注
關(guān)注
134文章
9353瀏覽量
377618 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3125瀏覽量
75274 -
鏡像
+關(guān)注
關(guān)注
0文章
178瀏覽量
11251
發(fā)布評論請先 登錄
詳解STM32啟動過程
專家揭秘:STM32啟動過程全解

介紹一下avr芯片的啟動過程
系統(tǒng)啟動過程
嵌入式uCLinux內(nèi)核啟動過程分析
IC啟動過程及Vcc電壓波形的認(rèn)知
Windows XP 啟動過程詳解
國產(chǎn)300MW機(jī)組中壓缸啟動的特點(diǎn)及啟動過程

詳解bootloader的執(zhí)行流程與ARM Linux啟動過程分析

stm32啟動過程

logd的啟動過程和內(nèi)容

評論