精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

OP-TEE的內核初始化函數調用

麥辣雞腿堡 ? 來源:TrustZone ? 作者:TrustZone ? 2023-11-02 18:18 ? 次閱讀

generic_boot_init_primary函數內容

generic_boot_init_primary函數是OP-TEE建立系統運行環境的入口函數,該函數會進行建立線程運行空間、初始化OP-TEE內核組件等操作。該函數的執行流程如圖所示。

圖片
generic_boot_init_primary函數執行流程

generic_boot_init_primary函數會調用init_primary_helper函數來完成系統運行環境的建立 ,如果系統支持ATF,則該函數會返回OP-TEE的處理句柄,該處理句柄主要包含

  • ? 各種安全監控模式調用的處理函數、
  • ? 安全世界狀態(SWS)的中斷
  • ? 以及其他事件的處理函數,

ATF中的bl31解析完安全監控模式調用或中斷請求后會在安全世界狀態調用該處理句柄來處理對應的事件。

init_primary_helper函數的主要內容如下:

static void init_primary_helper(unsigned long pageable_part,
                        unsigned long nsec_entry, unsigned long fdt)
        {
            thread_set_exceptions(THREAD_EXCP_ALL); //設置支持哪些異常處理
            init_vfp_sec();                             //初始化浮點運算(根據實際需要考慮是否開啟)
            //初始化各種memory,清空BSS段,分配TA運行時的memory
            init_runtime(pageable_part);
            /* 初始化TEE中支持的線程棧、異常處理、pagetable */
            thread_init_primary(generic_boot_get_handlers());
            //初始化每個CPU的monitor態的處理方式,如果支持ATF,則無需該操作
            thread_init_per_cpu();
            /* 如果系統不支持ATF,則需要配置在Linux內核中monitor的處理方式 */
            init_sec_mon(nsec_entry);
            /* 初始化device tree */
            init_fdt(fdt);
            /* 初始化中斷控制器 */
            main_init_gic();
            /* 初始化非安全側的浮點運算 */
            init_vfp_nsec();
            /* 初始化共享內存并執行存放在__initcall_start段的其他初始化函數 */
            if (init_teecore() ! = TEE_SUCCESS)
                panic();
            DMSG("Primary CPU switching to normal world bootn");
        }

init_primary_helper函數最后會調用init_teecore來完成OP-TEE內核的初始化 ,在init_teecore函數中會設定共享內存、系統時間,然后再返回去執行OP-TEE鏡像文件中的_initcall段中的內容來啟動系統的服務以及安全驅動的掛載。

call_initcalls函數

init_teecore函數通過調用call_initcalls來 啟動系統的服務以及安全驅動的掛載 ,該函數的內容如下:

static void call_initcalls(void)
        {
            initcall_t *call;
            /* 遍歷并執行_initcallx段中所有函數 */
            for (call = &__initcall_start; call < &__initcall_end; call++) {
                TEE_Result ret;
                  ret = (*call)();
                  if (ret ! = TEE_SUCCESS) {
                      EMSG("Initial call 0x%08" PRIxVA " failed",
                          (vaddr_t)call);
                  }
              }
          }

在執行call_initcalls函數之前,系統已完成了 memory、CPU相關設置、中斷控制器、共享內存、線程堆棧設置、TA運行內存的分配等操作

call_initcalls是通過遍歷OP-TEE鏡像文件的_initcall段中從_initcall_start到_initcall_end之間的所有函數來完成啟動服務和驅動的掛載操作。

OP-TEE鏡像文件中** _initcalls段的內容是通過使用__define_initcall宏來告知編譯器的**,在編譯時會將使用該宏定義的函數保存到OP-TEE鏡像文件的_initcall段中。該宏定義如下:

#define __define_initcall(level, fn) 
            static initcall_t __initcall_##fn __attribute__((used)) 
            __attribute__((__section__(".initcall" level))) = fn
  • ? initcall_t:是一個函數指針類型(typedef int(*initcall_t)(void))。
  • ? attribute (( section ()):將fn對象放在一個由括號中的名稱指定的section中。
  • ? ##:連接作用。

例如,如果使用該宏如下:

__define_initcall("1", init_operation)

則該宏的作用是聲明一個名稱為__initcall_init_operation的函數指針,將該函數指針初始化為init_operation,并在編譯時將該函數的內容存放在名稱為“.initcall1”的段中。

core/arch/arm/kernel/kern.ld.S文件中存在如下內容:

__initcall_start = .;
        KEEP(*(.initcall1))
        KEEP(*(.initcall2))
        KEEP(*(.initcall3))
        KEEP(*(.initcall4))
        __initcall_end = .;

即在__initcall_start到__initcall_end之間保存的是initcall1到initcall4之間的內容,而在整個OP-TEE源代碼的core/include/initcall.h文件中,__define_initcall宏被使用的情況如下:

#define __define_initcall(level, fn) 
        #define service_init(fn)            __define_initcall("1", fn)
        #define service_init_late(fn)      __define_initcall("2", fn)
        #define driver_init(fn)             __define_initcall("3", fn)
        #define driver_init_late(fn)       __define_initcall("4", fn)

所以遍歷執行從__initcall_start到__initcall_end之間的內容就是啟動OP-TEE的服務以及完成安全驅動的掛載。

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

    關注

    3

    文章

    1363

    瀏覽量

    40228
  • TEE
    TEE
    +關注

    關注

    0

    文章

    29

    瀏覽量

    10243
  • 函數調用
    +關注

    關注

    0

    文章

    19

    瀏覽量

    2584
收藏 人收藏

    評論

    相關推薦

    如何初始化函數? 如何從代碼配置器調用函數

    我有一個關于如何從代碼配置器初始化函數的問題,我如何從代碼配置器調用函數?我相信我有正確的代碼配置選項。只需要幫助初始化
    發表于 10-15 09:38

    請問Beal環境下編譯OP-TEE后生成FIP需要哪些文件?

    stm32mp157d-***-bl32.dtb fip.bin但是當我使用 OP-TEE 時,我使用以下命令:fiptool 創建 --tos-fw tee
    發表于 12-05 07:06

    請問HSE op-tee是什么關系?

    我有個問題。S32G同時支持HSE和op-tee。S32G的安全加解密和證書管理是通過HSE完成的嗎?op-tee 和 HSE 只是其中之一嗎?有沒有相關的設計文檔?謝謝
    發表于 04-06 06:26

    OP-TEE無法在鎖定的i.MX6UL上初始化JR怎么解決?

    imx 存儲庫,而 U-boot 來自主線存儲庫 (2023.1)在我們鎖定設備之前,這似乎工作正常。鎖定設備后,我們在 OP-TEE 初始化時得到以下輸出(啟用了一些額外的跟蹤消息):E/TC:0 0
    發表于 04-17 07:31

    uboot和內核里phy的初始化_內核里的雙網絡配置及phy的初始化

    uboot 和內核里 phy 的初始化,以及內核里的雙網絡配置及 phy 的初始化。 本文以盈鵬飛嵌入式的CoM-335x(基于AM335x)核心板及網絡芯片LAN8720 為例,說明
    的頭像 發表于 05-17 08:19 ?1.2w次閱讀

    Linux內核初始化過程中的調用順序

    所有的__init函數在區段.initcall.init中還保存了一份函數指針,在初始化內核會通過這些函數指針
    發表于 05-12 08:40 ?1605次閱讀

    UCOS2系統內核講述(二)_ 初始化調用函數

    UCOS2系統內核講述(二)_初始化調用函數
    的頭像 發表于 03-25 09:57 ?1742次閱讀
    UCOS2系統<b class='flag-5'>內核</b>講述(二)_ <b class='flag-5'>初始化</b><b class='flag-5'>調用</b><b class='flag-5'>函數</b>

    OP-TEE中安全驅動的框架

    OP-TEE中的安全驅動是OP-TEE操作安全設備的載體。 TA通過調用某個安全驅動的接口就可實現對特定安全設備的操作。安全驅動在OP-TEE中的軟件框架如圖22-2所示。 (其實這里
    的頭像 發表于 10-30 16:04 ?794次閱讀
    <b class='flag-5'>OP-TEE</b>中安全驅動的框架

    OP-TEE內核初始化過程

    /arch/arm generic_entry_a64.S文件中。 2 OP-TEE內核初始化過程 ** _star
    的頭像 發表于 11-02 17:57 ?1341次閱讀
    <b class='flag-5'>OP-TEE</b>的<b class='flag-5'>內核</b><b class='flag-5'>初始化</b>過程

    reset_primary函數的執行流程

    reset_primary函數OP-TEE對CPU主核進行初始化操作的函數,該函數初始化
    的頭像 發表于 11-02 18:06 ?521次閱讀
    reset_primary<b class='flag-5'>函數</b>的執行流程

    OP-TEE服務項的啟動

    OP-TEE服務項的啟動分為: service_init以及service_init_late ,需要被啟動的服務項通過使用這兩個宏,在編譯時,相關服務的內容將會被保存到initcall1
    的頭像 發表于 11-07 15:04 ?688次閱讀

    ARM64位與ARM32位OP-TEE啟動過程的差異

    進入reset中去執行OP-TEE啟動,而是直接在_start函數中就完成整個啟動過程, 在進行初始化操作之前會注冊一個異常向量表,該異常向量表會在喚醒從核階段被使用,當主核通知喚醒從核時,從核會查找
    的頭像 發表于 11-07 15:12 ?728次閱讀

    ATF中bl32的啟動方法

    ATF中bl32的啟動 bl31中的runtime_svc_init函數初始化OP-TEE對應的服務,通過調用該服務項的初始化
    的頭像 發表于 11-07 16:32 ?599次閱讀
    ATF中bl32的啟動方法

    OP-TEE的安全存儲的簡介

    時,OP-TEE會對需要被保存的數據進行加密,且每次更新安全文件時所用的加密密鑰都會使用隨機數重新生成,用戶只要調用GP標準中定義的安全存儲相關接口就能使用OP-TEE的安全存儲功能對私有數據進行保護。 需要被保護的數據被
    的頭像 發表于 11-21 11:33 ?990次閱讀
    <b class='flag-5'>OP-TEE</b>的安全存儲的簡介

    OP-TEE安全存儲安全文件的格式

    安全文件、dirf.db文件的數據格式和操作過程 OP-TEE的安全存儲功能可滿足用戶保存敏感數據的需求,需要被保存的數據會被加 密保存到文件系統或RPMB分區中 。 當選擇將數據保存到文件系統中
    的頭像 發表于 11-21 11:49 ?745次閱讀
    <b class='flag-5'>OP-TEE</b>安全存儲安全文件的格式