国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

ATF中bl2到bl31的跳轉介紹

麥辣雞腿堡 ? 來源:TrustZone ? 作者:TrustZone ? 2023-11-07 16:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

bl2到bl31的跳轉

在bl2_main函數中最終會調用smc(BL1_SMC_RUN_IMAGE,(unsigned long)next_bl_ep_info,0,0,0,0,0,0)來觸發一個類型為BL1_SMC_RUN_IMAGE的安全監控模式調用。

安全監控模式調用的處理接口在bl1階段時被指定,調用該函數時傳入的command ID是BL1_SMC_RUN_IMAGE,故執行該函數之后,系統將跳轉到中斷處理函數(smc_handler64)繼續執行。該函數定義在bl1/aarch64/bl1_exception.S文件中。

該函數最終通過判定安全監控模式調用的類型(在bl2中將會發送類型為BL1_SMC_RUN_IMAGE的smc)查看當前的安全監控模式調用是否是用于跳轉,其內容如下:

func smc_handler64

            /* 判定觸發smc操作時帶入的參數是否為跳轉執行image的操作 */

            mov x30, #BL1_SMC_RUN_IMAGE   //將BL1_SMC_RUN_IMAGE的值保存到x30

            cmp x30, x0                      //比較x30與x0的值

            //如果x30與x0不同,則認為是普通類型的異常,進入smc_handler進行處理

            b.ne     smc_handler

            mrs x30, scr_el3                //獲取scr寄存器的值

            tst x30, #SCR_NS_BIT           //比較scr寄存器中的NS bit與SCR_NS_BIT是否相等

            //如果當前NS bit為非安全位,則證明不合法,產生異常

            b.ne     unexpected_sync_exception

            //獲取offset和sp的值

            ldr x30, [sp, #CTX_EL3STATE_OFFSET + CTX_RUNTIME_SP]

            msr spsel, #0                     //清空spsel中的值

            mov sp, x30                      //保存x30的值到sp寄存器,用于返回

            mov x20, x1                      //將x1中的數據保存到x20中

            mov x0, x20                      //將x20的數據保存到x0中

            bl  bl1_print_next_bl_ep_info //打印出bl3x鏡像文件信息

            //傳入參數和bl3x入口函數的PC指針

            ldp x0, x1, [x20, #ENTRY_POINT_INFO_PC_OFFSET]

            msr elr_el3, x0

            msr spsr_el3, x1

            ubfx     x0, x1, #MODE_EL_SHIFT, #2  //設定ARM核模式

            cmp x0, #MODE_EL3                      //比較x0寄存器中的值是否為MODE_EL3

            b.ne     unexpected_sync_exception   //如果x0中不是MODE_EL3,則產生異常

            bl  disable_mmu_icache_el3           //禁止MMU的指令cache

            tlbi     alle3

        #if SPIN_ON_BL1_EXIT

            bl  print_debug_loop_message

        debug_loop:

            b    debug_loop

        #endif

            mov x0, x20

            bl  bl1_plat_prepare_exit/

            /* 設定返回參數 */

            ldp x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x30)]

            ldp x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x20)]

            ldp x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x10)]

            ldp x0, x1, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x0)]

            eret                              //跳轉到bl3x執行

        endfunc smc_handler64

在此安全監控模式調用處理過程中會將ARM核的狀態切到EL3運行,即bl31是運行在EL3中的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    135

    文章

    9552

    瀏覽量

    391841
  • 監控
    +關注

    關注

    6

    文章

    2380

    瀏覽量

    59419
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67499
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    BL2跳轉BL31 之前掛起 — 訓練后出現 DDR PHY (0x01400000) 訪問問題,求解

    SDK (LSDK 25.06)使用以下調試選項: 調試=1 ddr_debug=是 ddr_phy_debug=是 我目前面臨一個問題,即BL2 在跳到 BL31 之前停止. 為了調查這一點,我將
    發表于 03-03 06:34

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

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

    如何在BL2配置DDR init?

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

    如何讓BL31的調試信息輸出到S32R45的uart?

    我用“DEBUG=1”構建 ATF 映像,uart 可以顯示 BL2 的調試信息,但沒有顯示 BL31 的調試信息。 為什么?BL2
    發表于 04-11 08:20

    BL31未在Kirkstone上加載的原因?

    imx8mm_evk.h 和 imx8mm_evk.c 的設置時,SPL 打印 do uart3,但它應該顯示:注意:BL31:v2.6(發布
    發表于 04-19 11:00

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

    了 BUILD_STRING = \"custom\" 選項來檢查我正在運行的 BL2 是否是我的。 為了使 DDR 工作,我是否需要編輯 ddr_init.c 的任何其他函數/值或ATF
    發表于 06-01 09:03

    ATF啟動流程介紹

    一、BL32(TEE OS)的準備 ATF啟動流程 ATF流程 ATF冷啟動實現分為5個步驟: ? BL1 - AP Trusted ROM
    的頭像 發表于 11-02 17:51 ?2534次閱讀
    <b class='flag-5'>ATF</b>啟動流程<b class='flag-5'>介紹</b>

    ATF的啟動過程介紹

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

    code層面 ATFbl1的啟動

    系統上電之后首先會運行ChipRom,之后會跳轉ATFbl1繼續執行。bl1主要初始化CPU、設定異常向量、將
    的頭像 發表于 11-07 15:53 ?2256次閱讀
    code層面 <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>1的啟動

    ATFbl2的啟動

    bl2鏡像將為后續鏡像的加載執行相關的初始化操作,主要是內存、MMU、串口以及EL3軟件運行環境的設置,并且加載bl3x的鏡像內存。 通過查看b
    的頭像 發表于 11-07 15:59 ?1934次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl2</b>的啟動

    ATF如何用函數完成bl2的啟動

    bl31加載到內存后會觸發安全監控模式調用(smc)將CPU權限轉交給bl31。 該函數的主要內容和相關注釋如下: ** void bl2_main ( void
    的頭像 發表于 11-07 16:04 ?1537次閱讀

    ATFbl31的啟動

    bl2觸發安全監控模式調用后會跳轉bl31執行,bl31最主要的作用是 建立EL3運行態
    的頭像 發表于 11-07 16:13 ?2620次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl31</b>的啟動

    ATFbl31函數介紹與使用

    runtime_svc_init函數 該函數主要用來建立安全監控模式調用處理函數的索引表,并執行EL3提供的服務項的初始化操作,獲取TEE OS的入口地址并賦值給bl32_init變量,以備啟動
    的頭像 發表于 11-07 16:23 ?1479次閱讀

    ATFbl32的啟動方法

    ATFbl32的啟動 bl31的runtime_svc_init函數會初始化OP-TEE對應的服務,通過調用該服務項的初始化函數來完成O
    的頭像 發表于 11-07 16:32 ?1769次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>32的啟動方法

    bl31的psci架構介紹

    bl31的psci架構 bl31為內核提供了一系列運行時服務,psci作為其標準運行時服務的一部分,通過宏DECLARE_RT_SVC注冊系統
    的頭像 發表于 12-05 17:33 ?2251次閱讀
    <b class='flag-5'>bl31</b><b class='flag-5'>中</b>的psci架構<b class='flag-5'>介紹</b>