大量的嵌入式設(shè)備使用 ARM 為核心的芯片,為了保證安全 ARM 推出了 Arm Trusted Firmware 的可信固件,簡(jiǎn)稱 TF-A。它是一個(gè)開(kāi)源的軟件,最早是用在 Armv8-A。它的作用是隔離硬件,為硬件提供一個(gè)安全環(huán)境并且提供安全服務(wù)。
智能手機(jī)里面保存了我們的指紋、Face ID(3D 人臉信息)、虹膜、銀行卡密碼等重要信息。因此智能設(shè)備的安全問(wèn)題就成了半導(dǎo)體行業(yè)的重要問(wèn)題,ARM 為此提供了 TrustZone 解決方案,TrustZone 將 CPU 的工作狀態(tài)分為了 Secure World 和 Normal World,涉及到安全相關(guān)的內(nèi)容運(yùn)行在安全世界,比如指紋、密碼等,其他的操作都在非安全世界運(yùn)行,比如應(yīng)用程序。TrustZone 是一種硬件解決方案。
我們并不會(huì)直接去官方網(wǎng)站下載 TF-A 的源碼,這樣的開(kāi)發(fā)難度太大,半導(dǎo)體廠商都會(huì)從 TF-A 官網(wǎng)下載源碼,然后修改適配自己的芯片,把自家的芯片加進(jìn)去。我們?cè)趯?shí)際項(xiàng)目開(kāi)發(fā)中直接使用半導(dǎo)體原廠給提供的 TF-A 即可。
TF-A 是有自己的 Makefile 文件的,而且真正編譯的時(shí)候也是要用 TF-A 自己的 Makefile。
TF-A 主要保護(hù)的就是設(shè)備啟動(dòng)過(guò)程,通過(guò)各種鑒權(quán),保證設(shè)備啟動(dòng)的過(guò)程中每個(gè)階段的固件都是安全的,防止被不法分子替換某些啟動(dòng)固件導(dǎo)致安全信息泄露。
對(duì)于傳統(tǒng)的 ARM 處理器而言 , Linux 系統(tǒng)的啟動(dòng)流程是:內(nèi)部 BootROM -》 Uboot -》 kernel -》 rootfs,整個(gè)啟動(dòng)過(guò)程是一個(gè)鏈?zhǔn)浇Y(jié)構(gòu),啟動(dòng)過(guò)程其實(shí)是沒(méi)有安全校驗(yàn)的。加入 TF-A 固件以后,TF-A 就可以對(duì) uboot、kernel 進(jìn)行校驗(yàn),如果還要使用 TEE OS(Trusted Execution Environment,TEE),那么 TF-A 還要完成對(duì) TEE OS 的校驗(yàn)。
Linux 啟動(dòng)是一個(gè)鏈?zhǔn)浇Y(jié)構(gòu),因此安全啟動(dòng)的鑒權(quán)(校驗(yàn))過(guò)程也是鏈?zhǔn)浇Y(jié)構(gòu)的。在系統(tǒng)啟動(dòng)的過(guò)程中,會(huì)先對(duì)下一個(gè)要加載運(yùn)行的鏡像進(jìn)行鑒權(quán),只有鑒權(quán)成功此鏡像才能運(yùn)行,并進(jìn)入到下一階段,只要其中有一環(huán)鑒權(quán)失敗,那么整個(gè)系統(tǒng)就會(huì)啟動(dòng)失敗。
bl1、bl2 和 bl31 都屬于 TF-A 固件,而 bl32 和 bl33 是 TF-A 要啟動(dòng)的其他第三方固件,比如 TEE OS 和 uboot。
bl1、bl2、bl31、bl32 和 bl33 是 TF-A 的不同啟動(dòng)階段,TF-A 的啟動(dòng)過(guò)程是鏈?zhǔn)降?,不同的階段完整的功能不同, bl1、bl2、bl31、bl32 和 bl33 全名如下:
bl1:Boot loader stage 1(BL1)
bl2:Boot loader stage 2(BL2)
bl31:Boot loader stage 3-1(BL31)
bl32:Boot loader stage 3-2(BL32)
bl33:Boot loader stage 3-3(BL33)
-
芯片
+關(guān)注
關(guān)注
459文章
52494瀏覽量
440681 -
ARM
+關(guān)注
關(guān)注
134文章
9351瀏覽量
377435 -
嵌入式
+關(guān)注
關(guān)注
5150文章
19665瀏覽量
317454 -
Linux
+關(guān)注
關(guān)注
87文章
11509瀏覽量
213748
發(fā)布評(píng)論請(qǐng)先 登錄
如何使用Yocto更新已更改的TF-A設(shè)備樹(shù)來(lái)產(chǎn)生新的鏡像文件?
關(guān)于TF-A(ATF)固件的基本知識(shí)詳解
TF-A與U-boot的打印輸出顯示了不同的信息是為什么呢
為157F-DK2設(shè)置TF-A sp_min總是報(bào)錯(cuò)的原因?
怎樣去更改默認(rèn)的tf-a和u-boot串口linux控制臺(tái)呢
如何去調(diào)試U-Boot和TF-A中的USB以及OTG控制器呢
怎樣配置TF-A模塊來(lái)管理時(shí)間戳篡改呢
請(qǐng)問(wèn)如何使用TF-A中的I2C1來(lái)控制STPMIC1?
構(gòu)建內(nèi)核/u-boot/tf-a時(shí)忽略自定義CubeMX DTS文件的路徑如何解決?
什么會(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?
TF-A的不同啟動(dòng)階段有哪些

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

TF-A移植是什么意思

評(píng)論