ATF的啟動(dòng)過程根據(jù)ARMv8的運(yùn)行模式(AArch32/AArch64)會(huì)有所不同,但基本一致。
在AArch32中是不會(huì)去加載bl31而是將EL3或者M(jìn)onitor模式的運(yùn)行代碼保存在bl32中執(zhí)行。在AArch64中,ATF的完整啟動(dòng)流程如圖下所示。
AArch64模式的ATF啟動(dòng)流程
在上述啟動(dòng)過程中,從一個(gè)鏡像跳轉(zhuǎn)到另外一個(gè)鏡像文件執(zhí)行的方式各不相同,以下為鏡像跳轉(zhuǎn)的過程和方式說明。
概要流程
- bl1跳轉(zhuǎn)到bl2執(zhí)行
在bl1完成了將bl2鏡像文件加載到RAM中的操作、中斷向量表的設(shè)定以及其他CPU相關(guān)設(shè)定后,bl1_main函數(shù)會(huì)解析出bl2鏡像文件的描述信息,獲取入口地址,并設(shè)定下一個(gè)階段的cpu上下文。這些操作完成之后,調(diào)用el3_exit函數(shù)來實(shí)現(xiàn)bl1到bl2的跳轉(zhuǎn),進(jìn)入bl2中開始執(zhí)行。
- bl2跳轉(zhuǎn)到bl31執(zhí)行
在bl2中將會(huì)加載bl31、bl32、bl33的鏡像文件到對應(yīng)權(quán)限的內(nèi)存中,并將該三個(gè)鏡像文件的描述信息組成一個(gè)鏈表保存起來,以備bl31啟動(dòng)bl32和bl33使用。在AArch64中,bl31為EL3的執(zhí)行軟件,其運(yùn)行時(shí)的主要功能是對安全監(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來啟動(dòng)Linux內(nèi)核鏡像。
從bl2跳轉(zhuǎn)到bl31是通過帶入bl31的入口點(diǎn)信息作為參數(shù),然后調(diào)用安全監(jiān)控模式調(diào)用指令,觸發(fā)在bl1中設(shè)定的安全監(jiān)控模式調(diào)用請求,該請求處理完成后會(huì)將中央處理器的執(zhí)行權(quán)限交給bl31,并跳轉(zhuǎn)到bl31中去執(zhí)行。
- bl31跳轉(zhuǎn)到bl32執(zhí)行
在bl31中會(huì)執(zhí)行runtime_service_inti函數(shù),該函數(shù)會(huì)調(diào)用注冊到EL3中所有服務(wù)的初始化函數(shù),其中有一個(gè)服務(wù)項(xiàng)就是TEE服務(wù),該服務(wù)項(xiàng)的初始化函數(shù)會(huì)將TEEOS的初始化函數(shù)賦值給bl32_init變量,當(dāng)所有服務(wù)項(xiàng)執(zhí)行完初始化后,在bl31中會(huì)調(diào)用bl32_init執(zhí)行的函數(shù)來跳轉(zhuǎn)到TEE OS中并開始執(zhí)行TEE
OS的啟動(dòng)。
- bl31跳轉(zhuǎn)到bl33執(zhí)行
當(dāng)TEE-OS鏡像啟動(dòng)完成后會(huì)觸發(fā)一個(gè)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è)定下一個(gè)階段的CPU上下文,退出el3后進(jìn)入到bl33鏡像中開始執(zhí)行。
-
ARM
+關(guān)注
關(guān)注
134文章
9270瀏覽量
373482 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3102瀏覽量
74882 -
鏡像
+關(guān)注
關(guān)注
0文章
177瀏覽量
11064
發(fā)布評論請先 登錄
相關(guān)推薦
詳解STM32啟動(dòng)過程
專家揭秘:STM32啟動(dòng)過程全解

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

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

stm32啟動(dòng)過程

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

評論