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 代碼,并沒(méi)有使用 TF-A 提供的 bl1 鏡像。因此 bl1部分的實(shí)現(xiàn)就千差萬(wàn)別,不同的半導(dǎo)體廠商有不同的實(shí)現(xiàn)方法。
一般 bl1 要做的就是初始化 CPU,如果芯片支持不同的啟動(dòng)設(shè)備,那么還需要初始化不同的啟動(dòng)設(shè)置,比如 NAND、EMMC、SD、USB或串口等。然后根據(jù) BOOT 引腳的高低電平來(lái) 判斷當(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í)際情況來(lái)啟動(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 軟件。大家可以打開(kāi) 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 庫(kù)以及 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)用軟件可以通過(guò)安全監(jiān)控調(diào)用(secure monitor calls)來(lái)使用這些安全服務(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í)際的開(kāi)發(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 的話)。
-
芯片
+關(guān)注
關(guān)注
460文章
52529瀏覽量
441363 -
嵌入式
+關(guān)注
關(guān)注
5152文章
19678瀏覽量
317796 -
ROM
+關(guān)注
關(guān)注
4文章
578瀏覽量
87391 -
Linux
+關(guān)注
關(guān)注
87文章
11512瀏覽量
213914 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70801
發(fā)布評(píng)論請(qǐng)先 登錄
如何使用Yocto更新已更改的TF-A設(shè)備樹(shù)來(lái)產(chǎn)生新的鏡像文件?
關(guān)于TF-A(ATF)固件的基本知識(shí)詳解
TF-A與U-boot的打印輸出顯示了不同的信息是為什么呢
stm32mp157f啟動(dòng)時(shí)出現(xiàn)TF-A異常是為什么?如何解決?
為157F-DK2設(shè)置TF-A sp_min總是報(bào)錯(cuò)的原因?
如何去調(diào)試U-Boot和TF-A中的USB以及OTG控制器呢
怎樣配置TF-A模塊來(lái)管理時(shí)間戳篡改呢
請(qǐng)問(wèn)如何使用TF-A中的I2C1來(lái)控制STPMIC1?
什么會(huì)導(dǎo)致fsbl tf-a引導(dǎo)加載程序在閃爍后崩潰?
如何使用STM32CubeProgrammer在沒(méi)有USB的情況下將TF-A、u-boot、根文件系統(tǒng)刷入SD卡?
如何從TF-A或uboot加載/啟動(dòng)Cortex-M4?
SOC的多核啟動(dòng)流程和概念詳解

TF-A主要保護(hù)的是什么
TF-A的不同啟動(dòng)階段有哪些

TF-A移植是什么意思

評(píng)論