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

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

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

TF-A啟動流程詳解

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

bl 1

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

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

bl 2

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

bl 31

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

bl 32

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

圖片

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

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。

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

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

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

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

bl2:第 2 個階段,可信啟動固件

bl32:EL3 運行時(Runtime)軟件

bl33:非安全固件,比如 uboot

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

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

    關(guān)注

    452

    文章

    49938

    瀏覽量

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

    關(guān)注

    5052

    文章

    18909

    瀏覽量

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

    關(guān)注

    4

    文章

    549

    瀏覽量

    85563
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

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

    關(guān)注

    30

    文章

    4694

    瀏覽量

    68078
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    請問如何使用TF-A中的I2C1來控制STPMIC1?

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

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

    好,并以 100% 完成,但稍等片刻,我就遇到了錯誤。似乎 TF-A 在加載后崩潰或無法啟動。我正在尋找原因以及如何解決。附件是我在編程器中使用的 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加載/啟動Cortex-M4?

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

    SOC的多核啟動流程和概念詳解

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

    TF-A主要保護的是什么

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

    TF-A的不同啟動階段有哪些

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

    TF-A移植是什么意思

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