C01.TF-A(Arm Trusted Firmware, ATF ) 介紹
阿新 • • 發佈:2018-12-17
1.TF-A 介紹
TF-A是一套通用的軟體架構+特定於平臺的實現程式碼。
TF-A滿足大多數SoC廠商的CPU設計:單核啟動,多核啟動,自定義reset vector,可裁剪的啟動階段,bootrom多平臺支援,SCP-AP通訊,COT,FW update, all in one package,factory test等等。
SoC廠商需要理解ARM的firmware design,並根據ARM提供的porting guide,同時熟悉ARM的PSCI,TBBR等規範,即可實現完整的TF-A
1.1程式碼結構
類別:
- plat。 架構特定程式碼。
- Common。 平臺和架構無關的程式碼。
- library。PSCI實現和其他EL3執行時framework。
- blx。 特定於引導階段的程式碼。TF-A程式碼跟據BL階段劃分:
- Driver。
- service。 EL3執行時服務(例如:SPD)。 特定的SPD服務在services / spd目錄中(例如services / spd / tspd)。\
各個階段的使用的程式碼如下所示:
build 系統在build blx時,會定義巨集IMAGE_BLx(其中x = BL階段),使用者不用參與build 定義,這使TF-A能夠僅為特定的boot階段編譯一些程式碼
所有彙編程式檔案都都為.S副檔名。 每個BL的連結器原始檔都為.ld.S的副檔名。GCC會處理並建立.ld的連結描述檔案。
FDT提供硬體平臺的描述,並在啟動時由Linux核心使用。在fdts目錄中。
1.2 BL執行順序
對於AARCH64,分為5個階段:
- Boot Loader stage 1 (BL1) AP Trusted ROM
- Boot Loader stage 2 (BL2) Trusted Boot Firmware
- Boot Loader stage 3-1 (BL31) EL3 Runtime Software
- Boot Loader stage 3-2 (BL32) Secure-EL1 Payload (optional)
- Boot Loader stage 3-3 (BL33) Non-trusted Firmware (u-boot)
TF-A提供另外一種啟動程式碼流程:使用BL3作為reset entrypoint,即復位後執行bl3_entrypoint的程式碼,在bl3章節說明
其他平臺如I.mx,在./docs/plat/imx.rst中描述的:
Boot Sequence
=============
Bootrom --> BL31 --> BL33(u-boot) --> Linux kernel
1.3 TF-A software architectural diagrams
TBD
1.4 參考平臺
平臺:預設FVP。其他平臺的差異比較會具體說明