1. 程式人生 > >C01.TF-A(Arm Trusted Firmware, ATF ) 介紹

C01.TF-A(Arm Trusted Firmware, ATF ) 介紹

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程式碼結構

類別:

  1. plat。 架構特定程式碼。
  2. Common。 平臺和架構無關的程式碼。
  3. library。PSCI實現和其他EL3執行時framework。
  4. blx。 特定於引導階段的程式碼。TF-A程式碼跟據BL階段劃分:
C01.2-1
  1. Driver。
  2. service。 EL3執行時服務(例如:SPD)。 特定的SPD服務在services / spd目錄中(例如services / spd / tspd)。\

各個階段的使用的程式碼如下所示:

C01.1-1-02

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個階段:

  1. Boot Loader stage 1 (BL1) AP Trusted ROM
  2. Boot Loader stage 2 (BL2) Trusted Boot Firmware
  3. Boot Loader stage 3-1 (BL31) EL3 Runtime Software
  4. Boot Loader stage 3-2 (BL32) Secure-EL1 Payload (optional)
  5. 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。其他平臺的差異比較會具體說明