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

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

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

TF-A啟動(dòng)流程詳解

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-09-11 16:59 ? 次閱讀

bl 1

bl 1 是 TF-A 的第一個(gè)啟動(dòng)階段,芯片復(fù)位以后就會(huì)運(yùn)行 bl1 鏡像,TF-A 提供了 bl1 源碼。但是,實(shí)際上 bl1一般是半導(dǎo)體廠商自己編寫的內(nèi)部 Boot ROM 代碼,并沒有使用 TF-A 提供的 bl1 鏡像。因此 bl1部分的實(shí)現(xiàn)就千差萬別,不同的半導(dǎo)體廠商有不同的實(shí)現(xiàn)方法。

一般 bl1 要做的就是初始化 CPU,如果芯片支持不同的啟動(dòng)設(shè)備,那么還需要初始化不同的啟動(dòng)設(shè)置,比如 NAND、EMMC、SDUSB或串口等。然后根據(jù) BOOT 引腳的高低電平來 判斷當(dāng)前所選擇的啟動(dòng)設(shè)備,從對(duì)應(yīng)的啟動(dòng)設(shè)備中加載 bl2 鏡像,并放到對(duì)應(yīng)的內(nèi)存中,最后跳轉(zhuǎn)到 bl2鏡像并運(yùn)行。

bl 2

bl 2 會(huì)進(jìn)一步的初始化芯片,比如初始化 DDR、MMU、串口等。bl2 會(huì)將剩下三個(gè)階段 (bl31、bl32 和bl33)對(duì)應(yīng)的鏡像加載到指定的內(nèi)存中,最后根據(jù)實(shí)際情況來啟動(dòng)剩下三個(gè)階段的鏡像。

bl 31

在 AArch64 中,bl31 主要是 EL3 的 Runtime 固件。

bl 32

bl32 一般為安全系統(tǒng)(TEE OS)固件,比如 OP-TEE。TF-A 為 AArch32 提供了 EL3 的 Runtime 軟件,這個(gè)Runtime 軟件就是 bl32 固件,sp_min 就是這個(gè) Runtime 軟件。大家可以打開 TF-A 的 bl32
源碼文件夾,其下就有一個(gè)名為“sp_min”的子文件夾,這個(gè)就是 bl32 的 sp_min 源碼,如圖所示:

圖片

bl32 提供運(yùn)行時(shí)安全服務(wù),在 TF-A 中默認(rèn)使用 sp_min。sp_min 是一個(gè)最小的 AArch32 安全負(fù)載(Secure Payload),整合了 PSCI 庫以及 AArch32 的 EL3 運(yùn)行時(shí)軟件。sp_min 可以替代可信系統(tǒng)(TEE OS)或者可信執(zhí)行環(huán)境(TEE),比如 OP-TEE。用戶可以自行選擇 bl32 使用哪個(gè)軟件包。

bl32 充當(dāng)安全監(jiān)控(secure monitor),因此它向非安全系統(tǒng)(non-secure os,比如 linux)提供了一些安全服務(wù)。非安全的應(yīng)用軟件可以通過安全監(jiān)控調(diào)用(secure monitor calls)來使用這些安全服務(wù),這些代碼支持標(biāo)準(zhǔn)的服務(wù)調(diào)用,比如 PSCI。

bl 33

bl33 就是 Normal World 下的鏡像文件,比如 uboot。

至此,我們對(duì) TF-A 的基本啟動(dòng)流程有了一個(gè)大概的了解,我們知道了 TF-A 分為多個(gè)階段,不同的階段其工作內(nèi)容不同。但是,在實(shí)際的開發(fā)中并不一定會(huì)用到 TF-A 中所有啟動(dòng)階段。

TF-A 是用于完成安全啟動(dòng)的,OP-TEE 是 TEE OS,如果使用 OP-TEE 的話它會(huì)和 linux 內(nèi)核同時(shí)運(yùn)行,OP-TEE負(fù)責(zé)可信應(yīng)用,linux 就是普通的應(yīng)用程序。

TF-A 分為了不同階段:bl1、bl2、bl31、bl32 和 bl33,這個(gè)主要是面向 AArch64 的,對(duì)于 AArch32 而言只有 4個(gè)階段:

bl1:第 1 個(gè)階段,一般為芯片內(nèi)部 ROM 代碼

bl2:第 2 個(gè)階段,可信啟動(dòng)固件

bl32:EL3 運(yùn)行時(shí)(Runtime)軟件

bl33:非安全固件,比如 uboot

其中 bl1、bl2 和 bl32 都屬于 TF-A 的一部分(如果你使用 TF-A 提供的 bl1 的話)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    456

    文章

    51037

    瀏覽量

    425495
  • 嵌入式
    +關(guān)注

    關(guān)注

    5088

    文章

    19158

    瀏覽量

    306484
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    575

    瀏覽量

    85868
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11329

    瀏覽量

    209970
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4809

    瀏覽量

    68825
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Yocto更新已更改的TF-A設(shè)備樹來產(chǎn)生新的鏡像文件?

    求助大佬, 我用Yocto構(gòu)建了STM32MP157的鏡像文件,但我需要更改和移植TF-A和U-BOOT來適配我的板子, 我按照它正點(diǎn)原子教程里更改了.bl2和創(chuàng)建了新的.dtsi設(shè)備樹文件,但
    發(fā)表于 03-29 08:01

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

    1、什么是ATF首先什么是TF-A(ATF)?ATF就是一個(gè)固件, 一段代碼,一個(gè)為armv7-A/armv8-A/armv9-A提供的參考實(shí)現(xiàn)代碼。(注意,這只是參考實(shí)現(xiàn),你也可以不
    發(fā)表于 06-15 16:57

    TF-A與U-boot的打印輸出顯示了不同的信息是為什么呢

    我已將 TF-A 放入詳細(xì)打印中,導(dǎo)致打印出有關(guān) BSEC 訪問的信息。但是 TF-A 與 U-boot 的打印輸出顯示了不同的信息,或者至少是令人困惑的信息。是什么賦予了?(TF-A 2.6-r1
    發(fā)表于 12-01 07:30

    stm32mp157f啟動(dòng)時(shí)出現(xiàn)TF-A異常是為什么?如何解決?

    我有一個(gè)基于 stm32mp157f 的定制板。(因此,有自定義設(shè)備樹。)我目前在 TF-A 中看到一個(gè)我無法解釋的異常。INFO: Reset reason (0x14):INFO:Pad
    發(fā)表于 12-07 06:34

    為157F-DK2設(shè)置TF-A sp_min總是報(bào)錯(cuò)的原因?

    您好,我正在嘗試為 157F-DK2 設(shè)置 TF-A sp_min。這是我的信息。搭建環(huán)境Ubuntu 22.04用于 OpenSSL 3.0 支持需要,因?yàn)?trusted-firmware-a
    發(fā)表于 12-08 07:40

    如何去調(diào)試U-Boot和TF-A中的USB以及OTG控制器呢

    能夠通過 USB-OTG 加載 TF-A 圖像并運(yùn)行它,但之后 USB-OTG 連接停止工作。來自 TF-A 的最后一條消息是:“信息:DFU USB 啟動(dòng)……”在 U-Boot 中手動(dòng)運(yùn)行
    發(fā)表于 12-20 07:00

    怎樣配置TF-A模塊來管理時(shí)間戳篡改呢

    我正在開發(fā)一個(gè)基于 STM32mp153 MPU 和 Linux 操作系統(tǒng)的項(xiàng)目。我已經(jīng)配置了 TF-A 模塊來管理時(shí)間戳篡改。當(dāng)篡改事件發(fā)生時(shí),它會(huì)在標(biāo)準(zhǔn)輸出中報(bào)告。我想將 TF-A 檢測(cè)
    發(fā)表于 12-23 08:56

    請(qǐng)問如何使用TF-A中的I2C1來控制STPMIC1?

    在我們的定制板中,我們使用 I2C1 來控制和配置 STPMIC1。我想在 TF-A 中使用 I2C1,這樣 PMIC 就可以配置為在引導(dǎo)期間為 DDR 供電。TF-A 默認(rèn)不支持 I2C1,但
    發(fā)表于 01-16 08:19

    什么會(huì)導(dǎo)致fsbl tf-a引導(dǎo)加載程序在閃爍后崩潰?

    好,并以 100% 完成,但稍等片刻,我就遇到了錯(cuò)誤。似乎 TF-A 在加載后崩潰或無法啟動(dòng)。我正在尋找原因以及如何解決。附件是我在編程器中使用的 TSV 文件。我正在使用 EcoSystem 4.1.0。
    發(fā)表于 02-01 07:31

    如何使用STM32CubeProgrammer在沒有USB的情況下將TF-A、u-boot、根文件系統(tǒng)刷入SD卡?

    以下 Wiki 頁面顯示了如何使用 STM32CubeProgrammer 將 TF-A、u-boot、根文件系統(tǒng)刷入 SD 卡。在上面的 wiki 頁面中,我可以使用 USB將 TF-A
    發(fā)表于 02-03 10:40

    如何從TF-A或uboot加載/啟動(dòng)Cortex-M4?

    是否可以從 TF-A 或 uboot 加載/啟動(dòng) Cortex-M4?對(duì)于我們的用例,我們希望 Cortex-M4 中的 RTOS 盡快運(yùn)行。在 linux 完成啟動(dòng)之前。
    發(fā)表于 02-07 06:51

    SOC的多核啟動(dòng)流程和概念詳解

    本文以為armv8-aarch64、armv9為例、TF-A代碼為例,不討論其它硬件架構(gòu)和固件軟件中的設(shè)計(jì)。
    發(fā)表于 06-08 09:32 ?2317次閱讀
    SOC的多核<b class='flag-5'>啟動(dòng)</b><b class='flag-5'>流程</b>和概念<b class='flag-5'>詳解</b>

    TF-A主要保護(hù)的是什么

    大量的嵌入式設(shè)備使用 ARM 為核心的芯片,為了保證安全 ARM 推出了 Arm Trusted Firmware 的可信固件,簡(jiǎn)稱 TF-A。它是一個(gè)開源的軟件,最早是用在 Armv8-A。它
    的頭像 發(fā)表于 09-11 16:25 ?755次閱讀

    TF-A的不同啟動(dòng)階段有哪些

    TF-A 不同啟動(dòng)階段 FSBL:First stage boot loader,第一階段啟動(dòng)文件 SSBL:Second stage boot loader,第二階段啟動(dòng)文件
    的頭像 發(fā)表于 09-11 16:54 ?962次閱讀
    <b class='flag-5'>TF-A</b>的不同<b class='flag-5'>啟動(dòng)</b>階段有哪些

    TF-A移植是什么意思

    TF-A 移植 當(dāng)我們實(shí)際做產(chǎn)品的時(shí)候我們的硬件平臺(tái)肯定會(huì)和芯片原廠的有區(qū)別,比如 DDR 容量會(huì)改變,自己的硬件沒有使用到官方開發(fā)板所使用的 PMIC芯片等等。因此這里就涉及到將半導(dǎo)體原廠提供
    的頭像 發(fā)表于 09-11 17:04 ?801次閱讀
    <b class='flag-5'>TF-A</b>移植是什么意思