= RT_SVC_DESCS_START) (RT_SVC_DECS_NUM < MAX_RT_SVCS)); if (RT_SVC_DECS_NUM == 0) retur" />

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

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

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

3天內不再提示

ATF中bl31函數介紹與使用

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

runtime_svc_init函數

該函數主要用來建立安全監控模式調用處理函數的索引表,并執行EL3中提供的服務項的初始化操作,獲取TEE OS的入口地址并賦值給bl32_init變量,以備啟動TEE OS。

而這些處理函數是通過DECLARE_RT_SVC宏定義被編譯到鏡像文件的rt_svc_descs段中的。

void runtime_svc_init(void)

        {

            int rc = 0, index, start_idx, end_idx;

            /*判定rt_svc_descs段中service條數的是否超出MAX_RT_SVCS條*/

            assert((RT_SVC_DESCS_END >= RT_SVC_DESCS_START) &&

                    (RT_SVC_DECS_NUM < MAX_RT_SVCS));

            if (RT_SVC_DECS_NUM == 0)

                return;

            /* 初始化t_svc_descs_indices數組中的數據成-1,表示當前所有的service無效*/

            memset(rt_svc_descs_indices, -1, sizeof(rt_svc_descs_indices));

            /*  獲取第一條EL3  service在RAM中的起始地址,通過獲取RT_SVC_DESCS_START的值來確定,

            該值在鏈接文件中有定義 */

            rt_svc_descs = (rt_svc_desc_t *) RT_SVC_DESCS_START;

            /*  遍歷整個rt_svc_des段,將其call  type與rt_svc_descs_indices中的index建立對應

            關系 */

            for (index = 0; index < RT_SVC_DECS_NUM; index++) {

            rt_svc_desc_t *service = &rt_svc_descs[index];

                /* 判定在編譯時注冊的service是否有效 */

                rc = validate_rt_svc_desc(service);

                if (rc) {

                    ERROR("Invalid runtime service descriptor %pn",

                        (void *) service);

                    panic();

                }

                /* 執行當前service的init的操作 */

                if (service- >init) {

                    rc = service- >init();

                    if (rc) {

                    ERROR("Error initializing runtime service %sn",

                                  service- >name);

                        continue;

                    }

                }

                /*  根據該service的call  type以及start  oen來確定唯一的index,并且將該service

                中支持的所有call type生成唯一的標識映射到同一個index中 */

                start_idx = get_unique_oen(rt_svc_descs[index].start_oen,

                        service- >call_type);

                assert(start_idx < MAX_RT_SVCS);

                  end_idx = get_unique_oen(rt_svc_descs[index].end_oen,

                          service- >call_type);

                  assert(end_idx < MAX_RT_SVCS);

                  for (; start_idx <= end_idx; start_idx++)

                      rt_svc_descs_indices[start_idx] = index;

              }

          }

DECLARE_RT_SVC

該宏用來在編譯時將EL3中的service編譯進rt_svc_descs段中。該宏定義如下:

#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) 

            static const rt_svc_desc_t __svc_desc_ ## _name 

                __section("rt_svc_descs") __used = { 

                    .start_oen = _start, 

                    .end_oen = _end, 

                    .call_type = _type, 

                    .name = #_name, 

                    .init = _setup, 

                    .handle = _smch }

該宏中的各種參數說明如下:

  • ? □ start_oen:該service的起始內部編號;
  • ? □ end.oen:該service的末尾編號;
  • ? □ call_type:調用的smc的類型;
  • ? □ name:該service的名字;
  • ? □ init:該service在執行之前需要被執行的初始化操作;
  • ? □ handle:當觸發了call type的調用時調用的處理該請求的函數。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 監控
    +關注

    關注

    6

    文章

    2175

    瀏覽量

    55096
  • 函數
    +關注

    關注

    3

    文章

    4307

    瀏覽量

    62433
  • 宏定義
    +關注

    關注

    0

    文章

    50

    瀏覽量

    9001
收藏 人收藏

    評論

    相關推薦

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

    ATF定義的啟動模型ATF將鏡像進行了劃分,BL1 BL2屬于啟動引導鏡像,BL3屬于runtime鏡像。
    發表于 06-15 16:57

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

    /cortexa53-wrs-linux/atf-s32g/2.5-r0/build/batman/release /bl2/bl2_main.o:在函數
    發表于 04-03 07:12

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

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

    BL31未在Kirkstone上加載的原因?

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

    ATF啟動流程介紹

    Boot Firmware,一般為Trusted Bootloader。 ? BL31 - EL3 Runtime Firmware,一般為SML,管理SMC執行處理和中斷,運行在secure
    的頭像 發表于 11-02 17:51 ?1197次閱讀
    <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 ?1214次閱讀
    <b class='flag-5'>ATF</b>的啟動過程<b class='flag-5'>介紹</b>

    code層面 ATFbl1的啟動

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

    ATFbl2的啟動

    bl2_entrypoint函數最終會觸發安全監控模式調用(smc) ,通知bl1將CPU的控制權限轉交給bl31,然后執行bl31。 該
    的頭像 發表于 11-07 15:59 ?758次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>2的啟動

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

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

    ATFbl2到bl31的跳轉介紹

    bl2到bl31的跳轉 在bl2_main函數中最終會調用smc(BL1_SMC_RUN_IMAGE,(unsigned long)next
    的頭像 發表于 11-07 16:09 ?881次閱讀

    ATFbl31的啟動

    如下: func bl31 _entrypoint /* el3初始化操作,該el3_ entrypoint _common函數在上面已經介紹過,其中runtime_ exceptions為 el3 runtime softwa
    的頭像 發表于 11-07 16:13 ?1099次閱讀
    <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl31</b>的啟動

    ATFbl32的啟動方法

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

    Bl31斷處理流程概述

    aarch64架構,在每個異常等級下都包含了四張異常等級表。 bl31的異常向量表定義在runtime_exceptions.S,其與下圖的定義一致
    的頭像 發表于 11-07 17:43 ?595次閱讀
    <b class='flag-5'>Bl31</b><b class='flag-5'>中</b>斷處理流程概述

    psci接口規范介紹

    由于psci是由linux內核調用bl31的安全服務,實現cpu電源管理功能的。因此其軟件架構包含三個部分: (1)內核與bl31之間的調用接口規范 (2)內核的架構 (3)
    的頭像 發表于 12-05 16:53 ?862次閱讀

    bl31的psci架構介紹

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