一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

OP-TEE的內(nèi)核初始化過(guò)程

麥辣雞腿堡 ? 來(lái)源:TrustZone ? 作者:TrustZone ? 2023-11-02 17:57 ? 次閱讀

1 OP-TEE OS的入口函數(shù)

  • ? OP-TEE鏡像的入口函數(shù)是在編譯OP-TEE OS時(shí)通過(guò)鏈接文件來(lái)確定的,
  • ? OP-TEE在編譯時(shí)是按照optee_os/core/arch/arm/kernel/kern.ld.S文件鏈接生成OP-TEE OS的鏡像文件,
  • ? 在kern.ld.S文件中通過(guò)ENTRY宏來(lái)指定OP-TEE OS的入口函數(shù),在OP-TEE中指定的入口函數(shù)是_start,
    • ? 對(duì)于ARM32位系統(tǒng),該函數(shù)定義在optee_os/core/arch/arm/generic_entry_a32.S文件中,
    • ? 對(duì)于ARM64位系統(tǒng)而言,該函數(shù)定義在optee_os/core/arch/arm generic_entry_a64.S文件中。

2 OP-TEE的內(nèi)核初始化過(guò)程

** _start會(huì)調(diào)用reset函數(shù)進(jìn)入OP-TEE OS的啟動(dòng)過(guò)程**。

由于對(duì)稱多處理(Symmetr ical Multi-Processing, SMP)架構(gòu)的原因,在reset函數(shù)中會(huì)對(duì)主核和從核進(jìn)行不同的啟動(dòng)操作,分別調(diào)用reset_primary函數(shù)和reset_secondary函數(shù)來(lái)完成。

1. reset入口函數(shù)執(zhí)行內(nèi)容

reset函數(shù)是主核和從核啟動(dòng)的第一個(gè)函數(shù),該函數(shù)的執(zhí)行流程如圖所示。

圖片
reset函數(shù)執(zhí)行流程

進(jìn)入到reset函數(shù)后, 系統(tǒng)會(huì)將_start的地址寫入VBAR寄存器作為中斷向量表的起始地址使用 ,

在啟動(dòng)從核時(shí), 從核知道會(huì)到該地址去獲取應(yīng)該執(zhí)行代碼來(lái)完成從核的啟動(dòng) 。整個(gè)reset函數(shù)的內(nèi)容和注釋如下:

LOCAL_FUNC reset , :
        UNWIND( .fnstart)
        UNWIND( .cantunwind)
            bootargs_entry              //獲取啟動(dòng)帶入的參數(shù),主要是啟動(dòng)地址、device tree地址等
            /* 使能對(duì)齊檢查并禁用數(shù)據(jù)和指令緩存 */
            read_sctlr r0                //讀取sctlr中的數(shù)據(jù),獲取當(dāng)前CPU控制寄存器中的值
        #if defined(CFG_SCTLR_ALIGNMENT_CHECK)
            orr r0, r0, #SCTLR_A       //設(shè)定對(duì)齊校驗(yàn)
        #else
            bic r0, r0, #SCTLR_A
        #endif
            bic r0, r0, #SCTLR_C       //關(guān)閉數(shù)據(jù)cache
            bic r0, r0, #SCTLR_I       //關(guān)閉指令cache
        #if defined(CFG_HWSUPP_MEM_PERM_WXN) && defined(CFG_CORE_RWDATA_NOEXEC)
            orr r0, r0, #(SCTLR_WXN | SCTLR_UWXN)
        #endif
            write_sctlr r0              //將r0寫入到sctlr中,用于關(guān)閉cache
            isb
            /* 早期ARM核安全監(jiān)控模式態(tài)的特殊配置 */
            bl  plat_cpu_reset_early   //執(zhí)行CPU早期初始化
            ldr r0, =_start             //設(shè)定r0寄存器的值為_start函數(shù)的地址
            write_vbar r0                //將_start函數(shù)的地址寫入VBAR寄存器中,用于啟動(dòng)時(shí)使用
        #if defined(CFG_WITH_ARM_TRUSTED_FW)
            b   reset_primary           //支持ATF時(shí)跳轉(zhuǎn)到reset_primary中執(zhí)行
        #else
              bl  get_core_pos            //判定當(dāng)前CPU CORE的編號(hào)
              cmp r0, #0                   //將獲得的CPU編號(hào)與0對(duì)比
              beq reset_primary           //如果當(dāng)前core是主核,則使用reset_primary進(jìn)行初始化
              b   reset_secondary         //如果當(dāng)前core是從核,則使用reset_secondary進(jìn)行初始化
          #endif
          UNWIND( .fnend)
          END_FUNC reset

plat_cpu_reset_early函數(shù)將會(huì)設(shè)定SCR寄存器中的安全標(biāo)志位 ,用于標(biāo)記當(dāng)前CPU是處于安全世界狀態(tài)中,并且將_start地址寫入VBAR寄存器,用于在需要啟動(dòng)從核時(shí)系統(tǒng)能找到啟動(dòng)代碼的入口地址,

reset_primary函數(shù)是主核啟動(dòng)代碼的入口函數(shù),該函數(shù)將會(huì)啟動(dòng)主核的基本初始化、配置運(yùn)行環(huán)境,然后再開始執(zhí)行喚醒從核的操作。

  • ? 對(duì)于從核的喚醒操作,如果系統(tǒng)支持PSCI,從核的喚醒是在REE OS啟動(dòng)時(shí) ,發(fā)送PSCI給EL3或Monitor模式的代碼來(lái)啟動(dòng)從核;
  • ? 如果不使用PSCI,而是選擇在OP-TEE中使能CFG_SYNC_BOOT_CPU,則OP-TEE會(huì)在主核啟動(dòng)結(jié)束后喚醒從核。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5402

    瀏覽量

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

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63908
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    525

    瀏覽量

    25815
  • TEE
    TEE
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    10414
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請(qǐng)問(wèn)Beal環(huán)境下編譯OP-TEE后生成FIP需要哪些文件?

    stm32mp157d-***-bl32.dtb fip.bin但是當(dāng)我使用 OP-TEE 時(shí),我使用以下命令:fiptool 創(chuàng)建 --tos-fw tee
    發(fā)表于 12-05 07:06

    請(qǐng)問(wèn)HSE op-tee是什么關(guān)系?

    我有個(gè)問(wèn)題。S32G同時(shí)支持HSE和op-tee。S32G的安全加解密和證書管理是通過(guò)HSE完成的嗎?op-tee 和 HSE 只是其中之一嗎?有沒有相關(guān)的設(shè)計(jì)文檔?謝謝
    發(fā)表于 04-06 06:26

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

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

    LINUX系統(tǒng)引導(dǎo)和初始化-LINUX內(nèi)核解讀

    Linux 的系統(tǒng)引導(dǎo)和初始化 ----------Linux2.4.22內(nèi)核解讀之一 一、 系統(tǒng)引導(dǎo)和初始化概述 相關(guān)代碼(引導(dǎo)扇區(qū)的程序及其輔助程序,以 x86體系為例): \linux-2.4.22\arch\i386\b
    發(fā)表于 11-03 22:31 ?53次下載

    解析內(nèi)核初始化時(shí)根內(nèi)存盤的加載過(guò)程

    到內(nèi)存盤中作為根盤。 當(dāng)同時(shí)配置了初始化內(nèi)存盤(Initail RAM Disk)時(shí), 內(nèi)核初始化時(shí)可以在安裝主盤之前, 通過(guò)引導(dǎo)程序所加載的initrd文件建立一個(gè)內(nèi)存初始化盤,
    發(fā)表于 11-08 10:40 ?0次下載

    uboot和內(nèi)核里phy的初始化_內(nèi)核里的雙網(wǎng)絡(luò)配置及phy的初始化

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

    Linux內(nèi)核初始化過(guò)程中的調(diào)用順序

    所有的__init函數(shù)在區(qū)段.initcall.init中還保存了一份函數(shù)指針,在初始化時(shí)內(nèi)核會(huì)通過(guò)這些函數(shù)指針調(diào)用這些__init函數(shù)指針,并在整個(gè)初始化完成后,釋放整個(gè)init區(qū)段(包括.init.text,.initcal
    發(fā)表于 05-12 08:40 ?1724次閱讀

    Armlinux內(nèi)核移植及系統(tǒng)初始化過(guò)程分析

    Armlinux內(nèi)核移植及系統(tǒng)初始化過(guò)程分析說(shuō)明。
    發(fā)表于 04-06 15:53 ?11次下載

    OP-TEE中安全驅(qū)動(dòng)的框架

    OP-TEE中的安全驅(qū)動(dòng)是OP-TEE操作安全設(shè)備的載體。 TA通過(guò)調(diào)用某個(gè)安全驅(qū)動(dòng)的接口就可實(shí)現(xiàn)對(duì)特定安全設(shè)備的操作。安全驅(qū)動(dòng)在OP-TEE中的軟件框架如圖22-2所示。 (其實(shí)這里,你要搞清楚
    的頭像 發(fā)表于 10-30 16:04 ?1061次閱讀
    <b class='flag-5'>OP-TEE</b>中安全驅(qū)動(dòng)的框架

    OP-TEE內(nèi)核初始化函數(shù)調(diào)用

    generic_boot_init_primary函數(shù)內(nèi)容 generic_boot_init_primary函數(shù)是OP-TEE建立系統(tǒng)運(yùn)行環(huán)境的入口函數(shù),該函數(shù)會(huì)進(jìn)行建立線程運(yùn)行空間、初始化
    的頭像 發(fā)表于 11-02 18:18 ?996次閱讀
    <b class='flag-5'>OP-TEE</b>的<b class='flag-5'>內(nèi)核</b><b class='flag-5'>初始化</b>函數(shù)調(diào)用

    OP-TEE服務(wù)項(xiàng)的啟動(dòng)

    OP-TEE服務(wù)項(xiàng)的啟動(dòng)分為: service_init以及service_init_late ,需要被啟動(dòng)的服務(wù)項(xiàng)通過(guò)使用這兩個(gè)宏,在編譯時(shí),相關(guān)服務(wù)的內(nèi)容將會(huì)被保存到initcall1
    的頭像 發(fā)表于 11-07 15:04 ?983次閱讀

    ARM64位與ARM32位OP-TEE啟動(dòng)過(guò)程的差異

    進(jìn)入reset中去執(zhí)行OP-TEE啟動(dòng),而是直接在_start函數(shù)中就完成整個(gè)啟動(dòng)過(guò)程, 在進(jìn)行初始化操作之前會(huì)注冊(cè)一個(gè)異常向量表,該異常向量表會(huì)在喚醒從核階段被使用,當(dāng)主核通知喚醒從核時(shí),從核會(huì)查找
    的頭像 發(fā)表于 11-07 15:12 ?1012次閱讀

    ATF中bl32的啟動(dòng)方法

    ATF中bl32的啟動(dòng) bl31中的runtime_svc_init函數(shù)會(huì)初始化OP-TEE對(duì)應(yīng)的服務(wù),通過(guò)調(diào)用該服務(wù)項(xiàng)的初始化函數(shù)來(lái)完成OP-TEE的啟動(dòng)。對(duì)于
    的頭像 發(fā)表于 11-07 16:32 ?890次閱讀
    ATF中bl32的啟動(dòng)方法

    OP-TEE的安全存儲(chǔ)的簡(jiǎn)介

    OP-TEE的安全存儲(chǔ)的簡(jiǎn)介 OP-TEE的安全存儲(chǔ)功能是OP-TEE為用戶提供的安全存儲(chǔ)機(jī)制。用戶可使用安全存儲(chǔ)功能來(lái)保存敏感數(shù)據(jù)、密鑰等信息。 使用OP-TEE安全存儲(chǔ)功能保存數(shù)據(jù)
    的頭像 發(fā)表于 11-21 11:33 ?1392次閱讀
    <b class='flag-5'>OP-TEE</b>的安全存儲(chǔ)的簡(jiǎn)介

    OP-TEE安全存儲(chǔ)安全文件的格式

    安全文件、dirf.db文件的數(shù)據(jù)格式和操作過(guò)程 OP-TEE的安全存儲(chǔ)功能可滿足用戶保存敏感數(shù)據(jù)的需求,需要被保存的數(shù)據(jù)會(huì)被加 密保存到文件系統(tǒng)或RPMB分區(qū)中 。 當(dāng)選擇將數(shù)據(jù)保存到文件系統(tǒng)中
    的頭像 發(fā)表于 11-21 11:49 ?1144次閱讀
    <b class='flag-5'>OP-TEE</b>安全存儲(chǔ)安全文件的格式