TF-A在适用的情况下使用Armv8-A架构扩展。本节列出了体系结构扩展的用法,以及控制它们的构建标志。
通常,除非单独提及,否则构建选项ARM_ARCH_MAJOR和ARM_ARCH_MINOR将在构建TF-A时选择要作为目标的体系结构扩展。后续的Arm架构扩展与以前的版本向后兼容。
生成系统只要求ARM_ARCH_MAJOR和ARM_ARCH_MINOR具有有效的数值。这些构建选项仅控制构建中是否包含特定于体系结构扩展的代码。否则,TF-A的目标是基础Armv8.0-A架构;
i、 e.假设ARM_ARCH_MAJOR8和ARM_ARCH_MINOR0,它们也是它们各自的默认值。
参见:
构建选项
有关体系结构扩展和可用功能的详细信息,请参阅相应的体系结构扩展补充。
当ARM_ARCH_MAJOR>=8时,或当ARM_AARCH_MAJOR==8且ARM_ARCH_MINOR>=1时,此体系结构扩展将成为目标。
•Armv8.3-A的指针身份验证功能在非安全世界中无条件启用,因此允许较低的EL使用它们,而不会对EL3造成陷阱。
为了使安全世界能够使用它,CTX_INCLUDE_PAUTH_REGS必须设置为1。这将把所有指针认证系统寄存器添加到执行世界切换时保存的上下文中。
TF-A本身支持运行时的指针身份验证,可以通过将BRANCH_PROTECTION选项设置为非零,将CTX_INCLUDE_PAUTH_REGS设置为1来启用。这将启用BL1、BL2、BL31和TSP(如果使用)中的指针身份验证。
请注意,如果CPU支持指针身份验证,则无论这些构建标志的值如何,都会为非安全世界启用指针身份验证。
如果ARM_ARCH_MAJOR===8且ARM_ARCH_MINOR>=3,则启用PAuth的代码占用空间较低,因为编译器将使用优化的PAuth指令,而不是向后兼容的指令。
•分支目标识别功能由设置为1的Branch_PROTECTION选项选择。此选项默认为0。
•如果仅在EL0处支持,则两个世界(在EL0和S-EL0处)均无条件启用内存标记扩展功能。如果相反,它在所有EL上实现,则仅在正常世界中无条件启用。
为了在安全世界中启用它,需要构建选项CTX_INCLUDE_MTE_REGS。如果硬件根本没有实现MTE支持,则无论使用什么构建选项,它都会被禁用。
当ARM_ARCH_MAJOR==7时,此体系结构扩展成为目标。
有几个Armv7-A扩展可用。显然,TrustZone扩展是支持TF-A引导加载程序和运行时服务所必需的。
实现Armv7-A系统的平台可以在其Platform.mk脚本中通过ARM_Cortex_A=yes从其目标Cortex-A体系结构进行定义。例如,对于CORTEX-A15目标,ARM_CORTEX_A55=yes。
平台还可以设置ARM_WITH_NEON=yes以启用霓虹灯支持。注意,在运行时使用霓虹灯对非安全的世界上下文有限制。TF-A尚未提供VFP上下文管理。
指令ARM_CORTEX_A和ARM_WITH_NEON用于设置工具链目标体系结构指令。
平台可以通过定义MARCH32DIRECTIVE来选择不直接定义工具链目标体系结构指令。
即:
TF-A代码在逻辑上分为前面章节中提到的三个引导加载程序阶段。代码为也分为以下类别(在源代码中以目录形式显示):
•平台特定。体系结构特定代码的选择取决于平台。
•通用代码。这是平台和架构无关的代码。
•库代码。此代码包含所有其他代码通常使用的功能。PSCI实现和其他EL3运行时框架作为库组件驻留。
•特定阶段。特定于引导阶段的代码。
•驱动程序。
•服务。EL3运行时服务(例如:SPD)。特定的SPD服务位于services/SPD目录中(例如services/SPD/tspd)。
每个引导加载程序阶段使用来自一个或多个上述类别的代码。基于以上内容,代码布局如下所示:
构建系统为每个引导加载程序阶段(其中x=BL阶段)提供了一个不可配置的构建选项IMAGE_BLx。
e. g.对于BL1,IMAGE_BL1将由构建系统定义。这使TF-A能够编译某些代码(自己选择)
仅适用于特定的引导加载程序阶段所有汇编程序文件都具有.S扩展名。每个引导阶段的链接器源文件的扩展名为.ld.S。
GCC处理这些文件以创建扩展名为.ld的链接器脚本。
FDT提供了硬件平台的描述,并由Linux内核在引导时使用。这些可以在fdts目录中找到。
(源码、.s、.dts)编译构建时无非就是这三类文件。
到这里终于就完成整个固件设计的翻译,这个其中有些部分的翻译还是不够准确,后面会持续更写迭代的,果然原生的手册真的有很多值得学习的。
(我的资源里已经上传,设置的0积分即可下载。)
• Trusted Board Boot Requirements CLIENT (TBBR-CLIENT) Armv8-A (ARM DEN0006D)
https://developer.arm.com/documentation/den0006/d/
• Power State Coordination Interface PDD
https://developer.arm.com/documentation/den0022/d/
• SMC Calling Convention
https://developer.arm.com/documentation/den0028/latest
• Interrupt Management Framework
下一次就来看看ATF的中断的管理框架、以及怎么移植ATF,学习怎么从0构建一个ATF环境。