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

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

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

code層面 ATF中bl1的啟動

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

系統(tǒng)上電之后首先會運(yùn)行ChipRom,之后會跳轉(zhuǎn)到ATF的bl1中繼續(xù)執(zhí)行。bl1主要初始化CPU、設(shè)定異常向量、將bl2的鏡像加載到安全RAM中,然后跳轉(zhuǎn)到bl2中開始運(yùn)行。
bl1的主要代碼存放在bl1目錄中,bl1的鏈接文件是bl1/bl1.ld.s文件,該文件指定bl1的入口函數(shù)是bl1_entrypoint。

AArch32的該函數(shù)定義在bl1/aarch32/bl1_entrypoint.S文件中,AArch64的該函數(shù)定義在bl1/aarch64/bl1_entrypoint. S文件中。bl1的執(zhí)行流程如圖所示。

圖片
bl1執(zhí)行流程

bl1_entrypoint函數(shù)說明

bl1_entrypoint函數(shù)主要完成ARMv8架構(gòu)中EL3執(zhí)行環(huán)境的基礎(chǔ)初始化、設(shè)定異常向量表、加載bl2的鏡像文件到內(nèi)存中并進(jìn)行跳轉(zhuǎn)到bl2繼續(xù)執(zhí)行。該函數(shù)的內(nèi)容如下:

func bl1_entrypoint

        /*  EL3級別運(yùn)行環(huán)境的初始化,該函數(shù)定義在include/common/aarch64/el3_common_macros.S文

        件中*/

            el3_entrypoint_common           

                _set_endian=1               

                _warm_boot_mailbox=! PROGRAMMABLE_RESET_ADDRESS           

                _secondary_cold_boot=! COLD_BOOT_SINGLE_CPU                

                _init_memory=1              

                _init_c_runtime=1           

                _exception_vectors=bl1_exceptions

            bl  bl1_early_platform_setup  //調(diào)用bl1_early_platform_setup函數(shù)完成底層初始化

            bl  bl1_plat_arch_setup        //調(diào)用bl1_plat_arch_setup完成平臺初始化

            bl  bl1_main                     //調(diào)用bl1_main函數(shù),初始化驗(yàn)證模塊,加載下一階段的

            image到RAM中

            b   el3_exit                     //調(diào)用el3_exit函數(shù),跳轉(zhuǎn)到下一個image(bl2)

        endfunc bl1_entrypoint

el3_entrypoint_common函數(shù)執(zhí)行時帶入的參數(shù)包括大小端標(biāo)識、屬于冷啟動還是重啟操作、是否是從核的啟動、是否需要進(jìn)行內(nèi)存初始化、是否需要建立C語言運(yùn)行環(huán)境(棧初始化)、異常向量表地址注冊等。

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

    關(guān)注

    134

    文章

    8967

    瀏覽量

    365018
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61965
  • Code
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    15326
收藏 人收藏

    評論

    相關(guān)推薦

    【NanoPi M2試用體驗(yàn)】+SD卡啟動BL1拷貝BL2到DDR2運(yùn)行

    裸機(jī)程序SD卡啟動BL1拷貝BL2到DDR2運(yùn)行;代碼的拷貝會用到一些指針函數(shù),第一個參數(shù)為SD卡存放BL2的開始BLOCK,第二個參數(shù)
    發(fā)表于 06-11 17:03

    自制s5pv210啟動uboot的BL1代碼

    自制s5pv210啟動uboot的BL1代碼
    發(fā)表于 02-10 23:21

    關(guān)于iTop4412 iROM階段啟動流程簡析

    BL1讀取啟動模式寄存器判斷是從哪個設(shè)備上啟動的,然后從這個設(shè)備讀取BL2到SRAM里面,然后檢查SRAM
    發(fā)表于 04-21 11:45

    關(guān)于TF-A(ATF)固件的基本知識詳解

    。ATF定義的啟動模型ATF將鏡像進(jìn)行了劃分,BL1 BL2屬于啟動引導(dǎo)鏡像,
    發(fā)表于 06-15 16:57

    請問一下RK3399芯片啟動需要像三星一樣的bl1

      請問一下RK3399芯片啟動需要像三星一樣的bl1嗎?求大神解答
    發(fā)表于 07-11 09:32

    S32g如何在ATF啟用安全啟動?

    /cortexa53-wrs-linux/atf-s32g/2.5-r0/build/batman/release/bl2/bl2 .elf] 錯誤 1 原來的 BSP 版本似乎不支持
    發(fā)表于 04-03 07:12

    ls1046a如何查看BL1 LOG?

    BL1 嵌入 硬件(BootROM + PBLcommands),平臺未初始化。它無法查看日志。
    發(fā)表于 04-10 07:36

    TF-A的不同啟動階段有哪些

    不同的啟動階段,按照鏈?zhǔn)浇Y(jié)構(gòu)依次啟動,ATF 代碼啟動流程如圖所示: 當(dāng)芯片復(fù)位以后首先運(yùn)行 bl1 代碼,
    的頭像 發(fā)表于 09-11 16:54 ?768次閱讀
    TF-A的不同<b class='flag-5'>啟動</b>階段有哪些

    ATF啟動流程介紹

    一、BL32(TEE OS)的準(zhǔn)備 ATF啟動流程 ATF流程 ATF啟動實(shí)現(xiàn)分為5個步驟:
    的頭像 發(fā)表于 11-02 17:51 ?1011次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>啟動</b>流程介紹

    啟動(Cold boot)流程及階段劃分

    restart--冷啟動 reset--熱啟動 ATF啟動實(shí)現(xiàn)分為5個步驟: ? BL1 - AP Trusted ROM,一般為Boot
    的頭像 發(fā)表于 11-07 15:17 ?1569次閱讀
    冷<b class='flag-5'>啟動</b>(Cold boot)流程及階段劃分

    ATF啟動過程介紹

    ATF啟動過程根據(jù)ARMv8的運(yùn)行模式(AArch32/AArch64)會有所不同,但基本一致。 在AArch32是不會去加載bl31而是將EL3或者M(jìn)onitor模式的運(yùn)行代碼保
    的頭像 發(fā)表于 11-07 15:48 ?1037次閱讀
    <b class='flag-5'>ATF</b>的<b class='flag-5'>啟動</b>過程介紹

    ATFbl2的啟動

    bl2_entrypoint函數(shù)最終會觸發(fā)安全監(jiān)控模式調(diào)用(smc) ,通知bl1將CPU的控制權(quán)限轉(zhuǎn)交給bl31,然后執(zhí)行bl31。 該函數(shù)會執(zhí)行 ? 平臺相關(guān)的初始化、 ? 獲取
    的頭像 發(fā)表于 11-07 15:59 ?614次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>2的<b class='flag-5'>啟動</b>

    ATFbl2到bl31的跳轉(zhuǎn)介紹

    數(shù)之后,系統(tǒng)將跳轉(zhuǎn)到中斷處理函數(shù)(smc_handler64)繼續(xù)執(zhí)行。該函數(shù)定義在bl1/aarch64/bl1_exception.S文件。 該函數(shù)最終通過判定安全監(jiān)控模式調(diào)用的類型(在
    的頭像 發(fā)表于 11-07 16:09 ?713次閱讀

    ATFbl32的啟動方法

    ATFbl32的啟動 bl31的runtime_svc_init函數(shù)會初始化OP-TEE對應(yīng)
    的頭像 發(fā)表于 11-07 16:32 ?477次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>32的<b class='flag-5'>啟動</b>方法

    uboot的啟動BL1BL2兩個階段介紹

    之前對這個uboot的源碼了解有些許遺忘。最近做AVB校驗(yàn),需要uboot到kernel的這個過程。這里再復(fù)習(xí)一下。 與大多數(shù)BootLoader一樣,uboot的啟動過程分為BL1BL2兩個階段
    的頭像 發(fā)表于 12-04 17:53 ?2204次閱讀