ATF的啟動過程根據(jù)ARMv8的運行模式(AArch32/AArch64)會有所不同,但基本一致。
在AArch32中是不會去加載bl31而是將EL3或者Monitor模式的運行代碼保存在bl32中執(zhí)行。在AArch64中,ATF的完整啟動流程如圖下所示。
AArch64模式的ATF啟動流程
在上述啟動過程中,從一個鏡像跳轉到另外一個鏡像文件執(zhí)行的方式各不相同,以下為鏡像跳轉的過程和方式說明。
概要流程
- bl1跳轉到bl2執(zhí)行
在bl1完成了將bl2鏡像文件加載到RAM中的操作、中斷向量表的設定以及其他CPU相關設定后,bl1_main函數(shù)會解析出bl2鏡像文件的描述信息,獲取入口地址,并設定下一個階段的cpu上下文。這些操作完成之后,調用el3_exit函數(shù)來實現(xiàn)bl1到bl2的跳轉,進入bl2中開始執(zhí)行。
- bl2跳轉到bl31執(zhí)行
在bl2中將會加載bl31、bl32、bl33的鏡像文件到對應權限的內存中,并將該三個鏡像文件的描述信息組成一個鏈表保存起來,以備bl31啟動bl32和bl33使用。在AArch64中,bl31為EL3的執(zhí)行軟件,其運行時的主要功能是對安全監(jiān)控模式調用(smc)指令和中斷處理,運行在ARM的Monitor模式中。
bl32一般為TEE OS鏡像文件,本章以OP-TEE為例進行說明。
bl33為正常世界狀態(tài)的鏡像文件,例如uboot、EKD2等。當前該部分為BootLoader部分的鏡像文件,再由BootLoader來啟動Linux內核鏡像。
從bl2跳轉到bl31是通過帶入bl31的入口點信息作為參數(shù),然后調用安全監(jiān)控模式調用指令,觸發(fā)在bl1中設定的安全監(jiān)控模式調用請求,該請求處理完成后會將中央處理器的執(zhí)行權限交給bl31,并跳轉到bl31中去執(zhí)行。
- bl31跳轉到bl32執(zhí)行
在bl31中會執(zhí)行runtime_service_inti函數(shù),該函數(shù)會調用注冊到EL3中所有服務的初始化函數(shù),其中有一個服務項就是TEE服務,該服務項的初始化函數(shù)會將TEEOS的初始化函數(shù)賦值給bl32_init變量,當所有服務項執(zhí)行完初始化后,在bl31中會調用bl32_init執(zhí)行的函數(shù)來跳轉到TEE OS中并開始執(zhí)行TEE
OS的啟動。
- bl31跳轉到bl33執(zhí)行
當TEE-OS鏡像啟動完成后會觸發(fā)一個ID為TEESMC_OPTEED_RETURN_ENTRY_DONE的安全監(jiān)控模式調用,該調用是用來告知EL3 TEE OS鏡像已經完成了初始化,然后將CPU的狀態(tài)恢復到bl31_init的位置繼續(xù)執(zhí)行。
bl31通過遍歷在bl2中記錄的所有鏡像信息的鏈表來找到需要執(zhí)行的bl33的鏡像。然后通過獲取到bl33鏡像的信息,設定下一個階段的CPU上下文,退出el3后進入到bl33鏡像中開始執(zhí)行。
-
ARM
+關注
關注
134文章
9176瀏覽量
369365 -
內存
+關注
關注
8文章
3060瀏覽量
74368 -
鏡像
+關注
關注
0文章
170瀏覽量
10806
發(fā)布評論請先 登錄
相關推薦
詳解STM32啟動過程
專家揭秘:STM32啟動過程全解
![專家揭秘:STM32<b class='flag-5'>啟動過程</b>全解](https://file1.elecfans.com//web2/M00/A6/51/wKgZomUMPOGAV3l7AAB574HaBVg441.jpg)
STM32啟動過程
介紹一下avr芯片的啟動過程
系統(tǒng)啟動過程
嵌入式uCLinux內核啟動過程分析
IC啟動過程及Vcc電壓波形的認知
Windows XP 啟動過程詳解
國產300MW機組中壓缸啟動的特點及啟動過程
![國產300MW機組中壓缸<b class='flag-5'>啟動</b>的特點及<b class='flag-5'>啟動過程</b>](https://file.elecfans.com/web2/M00/4A/05/pYYBAGKhvIqALhvFAABRiGM1xxo432.png)
詳解bootloader的執(zhí)行流程與ARM Linux啟動過程分析
![詳解bootloader的執(zhí)行流程與ARM Linux<b class='flag-5'>啟動過程</b>分析](https://file1.elecfans.com//web2/M00/A7/19/wKgZomUMQmGATJLlAABw36rp0a4271.png)
stm32啟動過程
![stm32<b class='flag-5'>啟動過程</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
logd的啟動過程和內容
![logd的<b class='flag-5'>啟動過程</b>和內容](https://file1.elecfans.com/web2/M00/B0/9F/wKgaomVfDgKASNKOAAEWDGYfmfM885.jpg)
評論