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

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

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

ATF中bl2的啟動(dòng)

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

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

通過(guò)查看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ù)最終會(huì)觸發(fā)安全監(jiān)控模式調(diào)用(smc) ,通知bl1將CPU的控制權(quán)限轉(zhuǎn)交給bl31,然后執(zhí)行bl31。

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

  • ? 平臺(tái)相關(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                //將異常向量表地址寫(xiě)入到VBAR寄存器
            isb

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

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

            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                          //計(jì)算出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運(yùn)行的棧

          #if STACK_PROTECTOR_ENABLED

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

          #endif

              mov x0, x20

              bl  bl2_early_platform_setup          //設(shè)置平臺(tái)相關(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運(yùn)行棧的初始化,配置完運(yùn)行環(huán)境后 ,會(huì)調(diào)用 bl2_main函數(shù)來(lái)完成bl2對(duì)bl3x鏡像的加載 ,而CPU控制權(quán)限的轉(zhuǎn)移則是通過(guò)觸發(fā)安全監(jiān)控模式調(diào)用(smc)來(lái)實(shí)現(xiàn)。

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

    關(guān)注

    134

    文章

    8967

    瀏覽量

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

    關(guān)注

    8

    文章

    2903

    瀏覽量

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

    關(guān)注

    0

    文章

    158

    瀏覽量

    10651
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    如何在BL2配置DDR init?

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

    S32g如何在ATF啟用安全啟動(dòng)

    /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)建一個(gè)自定義 BL2,用于啟動(dòng)基于 kirkstone 版本的 yocto 編譯。 為此,我修補(bǔ)了 atf repo 的 ddr_init.c 文件,這個(gè)“ddr_cfg_regs”結(jié)構(gòu)
    發(fā)表于 06-01 09:03

    TF-A的不同啟動(dòng)階段有哪些

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

    ATF啟動(dòng)流程介紹

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

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

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

    ATF啟動(dòng)過(guò)程介紹

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

    code層面 ATFbl1的啟動(dòng)

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

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

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

    ATFbl2bl31的跳轉(zhuǎn)介紹

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

    ATFbl31的啟動(dòng)

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

    ATFbl32的啟動(dòng)方法

    ATFbl32的啟動(dòng) bl31的runtime_svc_init函數(shù)會(huì)初始化OP-TEE對(duì)應(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'>啟動(dòng)</b>方法

    uboot的啟動(dòng)BL1和BL2兩個(gè)階段介紹

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