0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ATF的啟動過程介紹

麥辣雞腿堡 ? 來源:TrustZone ? 作者:TrustZone ? 2023-11-07 15:48 ? 次閱讀

ATF的啟動過程根據(jù)ARMv8的運行模式(AArch32/AArch64)會有所不同,但基本一致。

在AArch32中是不會去加載bl31而是將EL3或者Monitor模式的運行代碼保存在bl32中執(zhí)行。在AArch64中,ATF的完整啟動流程如圖下所示。

圖片AArch64模式的ATF啟動流程

在上述啟動過程中,從一個鏡像跳轉(zhuǎn)到另外一個鏡像文件執(zhí)行的方式各不相同,以下為鏡像跳轉(zhuǎn)的過程和方式說明。

概要流程

  1. bl1跳轉(zhuǎn)到bl2執(zhí)行

在bl1完成了將bl2鏡像文件加載到RAM中的操作、中斷向量表的設(shè)定以及其他CPU相關(guān)設(shè)定后,bl1_main函數(shù)會解析出bl2鏡像文件的描述信息,獲取入口地址,并設(shè)定下一個階段的cpu上下文。這些操作完成之后,調(diào)用el3_exit函數(shù)來實現(xiàn)bl1到bl2的跳轉(zhuǎn),進入bl2中開始執(zhí)行。

  1. bl2跳轉(zhuǎn)到bl31執(zhí)行

在bl2中將會加載bl31、bl32、bl33的鏡像文件到對應(yīng)權(quán)限的內(nèi)存中,并將該三個鏡像文件的描述信息組成一個鏈表保存起來,以備bl31啟動bl32和bl33使用。在AArch64中,bl31為EL3的執(zhí)行軟件,其運行時的主要功能是對安全監(jiān)控模式調(diào)用(smc)指令和中斷處理,運行在ARM的Monitor模式中。

bl32一般為TEE OS鏡像文件,本章以O(shè)P-TEE為例進行說明。

bl33為正常世界狀態(tài)的鏡像文件,例如uboot、EKD2等。當(dāng)前該部分為BootLoader部分的鏡像文件,再由BootLoader來啟動Linux內(nèi)核鏡像。

從bl2跳轉(zhuǎn)到bl31是通過帶入bl31的入口點信息作為參數(shù),然后調(diào)用安全監(jiān)控模式調(diào)用指令,觸發(fā)在bl1中設(shè)定的安全監(jiān)控模式調(diào)用請求,該請求處理完成后會將中央處理器的執(zhí)行權(quán)限交給bl31,并跳轉(zhuǎn)到bl31中去執(zhí)行。

  1. 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的啟動。

  1. 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后進入到bl33鏡像中開始執(zhí)行。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9094

    瀏覽量

    367540
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3025

    瀏覽量

    74042
  • 鏡像
    +關(guān)注

    關(guān)注

    0

    文章

    164

    瀏覽量

    10717
收藏 人收藏

    評論

    相關(guān)推薦

    詳解STM32啟動過程

    本章教程主要跟大家講STM32H7的啟動過程,這里的啟動過程是指從CPU上電復(fù)位執(zhí)行第1條指令開始(匯編文件)到進入C程序main()函數(shù)入口之間的部分。
    發(fā)表于 11-14 11:24 ?1853次閱讀

    專家揭秘:STM32啟動過程全解

    電子發(fā)燒友網(wǎng)核心提示: 本文主要闡述了STM32啟動過程全面解析,包括啟動過程介紹、啟動代碼的陳列以及深入解析。 相對于ARM上一代的主流ARM7/ARM9內(nèi)核架構(gòu),新一代Corte
    發(fā)表于 09-10 08:50 ?5.3w次閱讀
    專家揭秘:STM32<b class='flag-5'>啟動過程</b>全解

    STM32啟動過程

    一、STM32 啟動過程通過Boot引腳設(shè)定,尋找初始地址初始化棧指針 __initial_sp指向復(fù)位程序 Reset_Hander設(shè)置異常中斷 HardFault_Handler設(shè)置系統(tǒng)時鐘
    發(fā)表于 08-11 06:02

    介紹一下avr芯片的啟動過程

    嵌入式程序的啟動代碼,就是startup代碼,一般用匯編編寫,代碼效率高,但和C++代碼融合起來不太方便,例如,想直接在cpp文件定義中斷函數(shù)就需要asm語句。 下面介紹一下avr芯片的啟動過程:avr的
    發(fā)表于 02-28 12:29

    系統(tǒng)啟動過程

    系統(tǒng)啟動過程系統(tǒng)啟動過程主要由一下幾步組成(以硬盤啟動為例):1. 開機2. BIOS 加電自檢 ( Power On Self Test -- POST ),內(nèi)存地址為 0ffff:00003. 將硬盤第一個
    發(fā)表于 10-11 12:17 ?2259次閱讀

    嵌入式uCLinux內(nèi)核啟動過程分析

    分析uCLinux的啟動過程,可以加快系統(tǒng)啟動速度、正確建立應(yīng)用環(huán)境。本文要研究的就是uCLinux操作系統(tǒng)內(nèi)核的啟動過程
    發(fā)表于 08-15 16:51 ?789次閱讀

    IC啟動過程及Vcc電壓波形的認知

    IC啟動過程及Vcc電壓波形的認知IC啟動過程及Vcc電壓波形的認知IC啟動過程及Vcc電壓波形的認知IC啟動過程及Vcc電壓波形的認知
    發(fā)表于 12-22 14:46 ?10次下載

    Windows XP 啟動過程詳解

    我們每天都在和 Windows 打交道,很多人可能每天都要面對多次 Windows 的啟動過程,可是您知道在 Windows 的啟動過程背后,隱藏著什么秘密嗎?在這一系列過程中都用到了哪些重要的系統(tǒng)文件?系統(tǒng)的
    發(fā)表于 11-10 18:24 ?11次下載

    國產(chǎn)300MW機組中壓缸啟動的特點及啟動過程

    機組采用合理啟動方式對減小啟動過程中的壽命損耗、縮短機組啟動時間尤為重要。介紹了國產(chǎn)300 MW機組中壓缸啟動的特點及
    發(fā)表于 10-14 10:40 ?18次下載
    國產(chǎn)300MW機組中壓缸<b class='flag-5'>啟動</b>的特點及<b class='flag-5'>啟動過程</b>

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

    RM Linux啟動過程分析是本文要介紹的內(nèi)容,嵌入式 Linux 的可移植性使得我們可以在各種電子產(chǎn)品上看到它的身影。對于不同體系結(jié)構(gòu)的處理器來說Linux的啟動過程也有所不同。 本文以
    的頭像 發(fā)表于 12-21 09:24 ?1.1w次閱讀
    詳解bootloader的執(zhí)行流程與ARM Linux<b class='flag-5'>啟動過程</b>分析

    STM32上電后啟動過程

    STM32上電后啟動過程
    發(fā)表于 11-15 18:21 ?16次下載
    STM32上電后<b class='flag-5'>啟動過程</b>

    stm32啟動過程

    一次性搞定stm32啟動模式與啟動過程一、stm32啟動模式二、從flash啟動過程2.1 數(shù)據(jù)在堆棧中存儲方式2.2 stm32的正常啟動過程
    發(fā)表于 12-16 16:57 ?8次下載
    stm32<b class='flag-5'>啟動過程</b>

    RL78啟動過程詳解

    RL78啟動過程詳解
    的頭像 發(fā)表于 09-28 16:39 ?1461次閱讀
    RL78<b class='flag-5'>啟動過程</b>詳解

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

    logd作為native service,系統(tǒng)啟動過程通過讀取rc文件來啟動,相關(guān)的屬性定義在如下logd.rc文件中。 2.2.1 logd啟動過程 logd啟動后會存在三個用來服務(wù)
    的頭像 發(fā)表于 11-23 16:54 ?866次閱讀
    logd的<b class='flag-5'>啟動過程</b>和內(nèi)容

    stm32啟動過程詳解

    啟動過程。本文將詳細介紹STM32的啟動過程。 一、復(fù)位電路 對于STM32微控制器來說,復(fù)位是啟動的第一步。任何系統(tǒng)都需要一個穩(wěn)定的狀態(tài)來啟動
    的頭像 發(fā)表于 12-08 15:47 ?1664次閱讀