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。其他平台的差异比较会具体说明