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

欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

ATF中bl31函數(shù)介紹與使用

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

runtime_svc_init函數(shù)

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

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

void runtime_svc_init(void)

        {

            int rc = 0, index, start_idx, end_idx;

            /*判定rt_svc_descs段中service條數(shù)的是否超出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數(shù)組中的數(shù)據(jù)成-1,表示當(dāng)前所有的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建立對應(yīng)

            關(guān)系 */

            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();

                }

                /* 執(zhí)行當(dāng)前service的init的操作 */

                if (service- >init) {

                    rc = service- >init();

                    if (rc) {

                    ERROR("Error initializing runtime service %sn",

                                  service- >name);

                        continue;

                    }

                }

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

                中支持的所有call type生成唯一的標(biāo)識映射到同一個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 }

該宏中的各種參數(shù)說明如下:

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

    關(guān)注

    6

    文章

    2240

    瀏覽量

    55390
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4346

    瀏覽量

    63024
  • 宏定義
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    9059
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    如何讓BL31的調(diào)試信息輸出到S32R45的uart?

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

    BL31未在Kirkstone上加載的原因?

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

    ATF啟動流程介紹

    Boot Firmware,一般為Trusted Bootloader。 ? BL31 - EL3 Runtime Firmware,一般為SML,管理SMC執(zhí)行處理和中斷,運行在secure
    的頭像 發(fā)表于 11-02 17:51 ?1345次閱讀
    <b class='flag-5'>ATF</b>啟動流程<b class='flag-5'>介紹</b>

    ATF的啟動過程介紹

    ATF的啟動過程根據(jù)ARMv8的運行模式(AArch32/AArch64)會有所不同,但基本一致。 在AArch32是不會去加載bl31而是將EL3或者Monitor模式的運行代碼保存在bl
    的頭像 發(fā)表于 11-07 15:48 ?1385次閱讀
    <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 ?1215次閱讀
    code層面 <b class='flag-5'>ATF</b><b class='flag-5'>中</b><b class='flag-5'>bl</b>1的啟動

    ATFbl2的啟動

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

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

    bl31加載到內(nèi)存后會觸發(fā)安全監(jiān)控模式調(diào)用(smc)將CPU權(quán)限轉(zhuǎn)交給bl31。 該函數(shù)的主要內(nèi)容和相關(guān)注釋如下: ** void bl2
    的頭像 發(fā)表于 11-07 16:04 ?775次閱讀

    ATFbl2到bl31的跳轉(zhuǎn)介紹

    bl2到bl31的跳轉(zhuǎn) 在bl2_main函數(shù)中最終會調(diào)用smc(BL1_SMC_RUN_IMAGE,(unsigned long)next
    的頭像 發(fā)表于 11-07 16:09 ?1062次閱讀

    ATFbl31的啟動

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

    ATFbl32的啟動方法

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

    Bl31斷處理流程概述

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

    psci接口規(guī)范介紹

    由于psci是由linux內(nèi)核調(diào)用bl31的安全服務(wù),實現(xiàn)cpu電源管理功能的。因此其軟件架構(gòu)包含三個部分: (1)內(nèi)核與bl31之間的調(diào)用接口規(guī)范 (2)內(nèi)核的架構(gòu) (3)
    的頭像 發(fā)表于 12-05 16:53 ?1037次閱讀

    bl31的psci架構(gòu)介紹

    bl31的psci架構(gòu) bl31為內(nèi)核提供了一系列運行時服務(wù),psci作為其標(biāo)準(zhǔn)運行時服務(wù)的一部分,通過宏DECLARE_RT_SVC注冊到系統(tǒng)。其相應(yīng)的定義如下: DECLARE
    的頭像 發(fā)表于 12-05 17:33 ?1162次閱讀
    <b class='flag-5'>bl31</b><b class='flag-5'>中</b>的psci架構(gòu)<b class='flag-5'>介紹</b>