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

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

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

ATF中bl2的啟動

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

bl2鏡像將為后續(xù)鏡像的加載執(zhí)行相關(guān)的初始化操作,主要是內(nèi)存、MMU、串口以及EL3軟件運行環(huán)境的設(shè)置,并且加載bl3x的鏡像到內(nèi)存中。

通過查看bl2.ld.S文件可發(fā)現(xiàn),bl2鏡像的入口函數(shù)是bl2_entrypoint。該函數(shù)定義在bl2/aarch64/bl2_entrypoint.S文件中。該階段的執(zhí)行流程如圖所示。

圖片
bl2執(zhí)行流程

bl2_entrypoint函數(shù)

bl2_entrypoint函數(shù)最終會觸發(fā)安全監(jiān)控模式調(diào)用(smc) ,通知bl1將CPU的控制權(quán)限轉(zhuǎn)交給bl31,然后執(zhí)行bl31。

該函數(shù)會執(zhí)行

  • ? 平臺相關(guān)的初始化、
  • ? 獲取存放bl3x鏡像文件的結(jié)構(gòu)體變量、
  • ? 解析出bl31的入口地址等。

該函數(shù)的主要內(nèi)容和注釋如下:

func bl2_entrypoint

            mov x20, x1                      //獲取可用安全內(nèi)存的起始地址

            adr x0, early_exceptions       //設(shè)定異常向量

            msr vbar_el1, x0                //將異常向量表地址寫入到VBAR寄存器
            isb

            msr daifclr, #DAIF_ABT_BIT    //使能SErrot中斷

            /* 使能指令cache、棧頂?shù)刂芬约皵?shù)據(jù)訪問權(quán)限對齊檢查 */

            mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)

            mrs x0, sctlr_el1

            orr x0, x0, x1

            msr sctlr_el1, x0

            isb

            /* 獲取有效的RW內(nèi)存以備bl2使用 */

              adr x0, __RW_START__                   //獲取RW內(nèi)存的起始地址

              adr x1, __RW_END__                     //獲取RW內(nèi)存的末端地址

              sub x1, x1, x0                          //計算出RW內(nèi)存的大小

              bl  inv_dcache_range                   //禁止數(shù)據(jù)cache

              ldr x0, =__BSS_START__                 //獲取bl2中BSS段的起始地址

              ldr x1, =__BSS_SIZE__                  //獲取bl2中BSS段的大小

              bl  zeromem                              //清空BSS段中的內(nèi)容

          #if USE_COHERENT_MEM

              ldr x0, =__COHERENT_RAM_START__

              ldr x1, =__COHERENT_RAM_UNALIGNED_SIZE__

              bl  zeromem

          #endif

              bl  plat_set_my_stack                  //初始化bl2運行的棧

          #if STACK_PROTECTOR_ENABLED

              bl  update_stack_protector_canary    //更新棧保護區(qū)域數(shù)據(jù)

          #endif

              mov x0, x20

              bl  bl2_early_platform_setup          //設(shè)置平臺相關(guān)

              bl  bl2_plat_arch_setup                //設(shè)置架構(gòu)相關(guān)

              bl  bl2_main      //跳轉(zhuǎn)到BL2的主要函數(shù)執(zhí)行,從該函數(shù)中跳轉(zhuǎn)到bl31以及bl32或者bl33

              no_ret plat_panic_handler

          endfunc bl2_entrypoint

在bl2_entrypoint函數(shù)中, 完成bl2運行棧的初始化,配置完運行環(huán)境后 ,會調(diào)用 bl2_main函數(shù)來完成bl2對bl3x鏡像的加載 ,而CPU控制權(quán)限的轉(zhuǎn)移則是通過觸發(fā)安全監(jiān)控模式調(diào)用(smc)來實現(xiàn)。

聲明:本文內(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

    文章

    9097

    瀏覽量

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

    關(guān)注

    8

    文章

    3025

    瀏覽量

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

    關(guān)注

    0

    文章

    164

    瀏覽量

    10729
收藏 人收藏

    評論

    相關(guān)推薦

    【NanoPi M2試用體驗】+SD卡啟動BL1拷貝BL2到DDR2運行

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

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

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

    如何在BL2配置DDR init?

    :2022 年 10 月 25 日 18:55:21錯誤:BL2:加載圖像失?。?2)身份驗證失敗我認(rèn)為我們必須更改 atf\plat\nxp\soc-ls1046\ls1046ardb\ddr_init.c
    發(fā)表于 03-24 08:50

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

    /cortexa53-wrs-linux/atf-s32g/2.5-r0/build/batman/release /bl2/bl2_main.o:在函數(shù)“bl2_main”
    發(fā)表于 04-03 07:12

    Yocto LS1028定制板用BL2,為了使DDR工作是否需要編輯ddr_init.c的任何其他函數(shù)/值或ATF的任何其他文件??

    的下一步是創(chuàng)建一個自定義 BL2,用于啟動基于 kirkstone 版本的 yocto 編譯。 為此,我修補了 atf repo 的 ddr_init.c 文件,這個“ddr_cfg_regs”結(jié)構(gòu)
    發(fā)表于 06-01 09:03

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

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

    ATF啟動流程介紹

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

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

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

    ATF啟動過程介紹

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

    code層面 ATFbl1的啟動

    系統(tǒng)上電之后首先會運行ChipRom,之后會跳轉(zhuǎn)到ATFbl1繼續(xù)執(zhí)行。bl1主要初始化CPU、設(shè)定異常向量、將bl2的鏡像加載到安全R
    的頭像 發(fā)表于 11-07 15:53 ?1081次閱讀
    code層面 <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>1的<b class='flag-5'>啟動</b>

    ATF如何用函數(shù)完成bl2啟動

    bl2_main函數(shù) bl2_main函數(shù)完成了bl2階段的主要操作,包括 ? 對下一個階段鏡像文件的解析、 ? 獲取入口地址和鏡像文件大小等信息, ? 然后對鏡像文件進(jìn)行驗簽和加載操作。 ? 將
    的頭像 發(fā)表于 11-07 16:04 ?705次閱讀

    ATFbl2bl31的跳轉(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 ?962次閱讀

    ATFbl31的啟動

    bl2觸發(fā)安全監(jiān)控模式調(diào)用后會跳轉(zhuǎn)到bl31執(zhí)行,bl31最主要的作用是 建立EL3運行態(tài)的軟件配置 , 在該階段會完成各種類型的安全
    的頭像 發(fā)表于 11-07 16:13 ?1183次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>31的<b class='flag-5'>啟動</b>

    ATFbl32的啟動方法

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

    uboot的啟動BL1和BL2兩個階段介紹

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