代码结构
TF-A 代码在逻辑上分为前几节提到的三个引导加载程序阶段。代码也分为以下几类(在源代码中显示为目录):
-
平台特定。架构特定代码的选择取决于平台。
-
通用代码。这是平台和架构不可知的代码。
-
图书馆代码。此代码包含所有其他代码常用的功能。PSCI 实现和其他 EL3 运行时框架作为库组件驻留。
-
阶段特定。特定于引导阶段的代码。
-
驱动程序。
-
服务。EL3 运行时服务(例如:SPD)。特定的 SPD 服务驻留在
services/spd
目录中(例如services/spd/tspd
)。
每个引导加载程序阶段都使用来自上述一个或多个类别的代码。基于上述,代码布局如下所示:
Directory Used by BL1? Used by BL2? Used by BL31?
bl1 Yes No No
bl2 No Yes No
bl31 No No Yes
plat Yes Yes Yes
drivers Yes No Yes
common Yes Yes Yes
lib Yes Yes Yes
services No No Yes
构建系统为每个引导加载程序阶段(其中 x = BL 阶段)提供了一个不可配置的构建选项 IMAGE_BLx。例如对于 BL1 , IMAGE_BL1 将由构建系统定义。这使 TF-A 能够仅为特定的引导加载程序阶段编译某些代码
所有汇编程序文件都有.S
扩展名。每个引导阶段的链接器源文件的扩展名为.ld.S
. 这些由 GCC 处理以创建扩展名为.ld
.
FDT 提供硬件平台的描述,并在引导时由 Linux 内核使用。这些可以在fdts
目录中找到。
参考
版权所有 (c) 2013-2020,Arm Limited 和贡献者。版权所有。