当前位置:   article > 正文

[ATF] ARM Trusted firmware 构建选项_trusted os extra1

trusted os extra1

TF-A 构建系统支持以下构建选项。除非另有说明,这些选项应在构建命令行中指定,并且不会在任何组件生成文件中修改。请注意,构建系统不会跟踪构建选项的依赖性。因此,如果任何构建选项从先前的构建中发生更改,则必须执行干净的构建。

5.1. 常见的构建选项

  • AARCH32_INSTRUCTION_SET: 选择编译器应该使用的 AArch32 指令集。有效值为 T32 和 A32。由于代码具有较小的结果大小,因此默认为 T32。

  • AARCH32_SP: 选择 AArch32 Secure Payload 组件作为 BL32 镜像构建ARCH=aarch32。该值应该是包含 SP 源的目录的路径,相对于bl32/; 该目录应该包含一个名为<aarch32_sp-value>.mk.

  • ARCH:选择 TF-A 的目标构建架构。它可以采用 aarch64aarch32作为值。默认情况下,它被定义为 aarch64.

  • ARM_ARCH_MAJOR:编译 TF-A 时要针对的 Arm 架构的主要版本。它的值必须是数字,默认为 8 。又见, Armv8架构扩展ARMv7架构扩展的 固件设计

  • ARM_ARCH_MINOR:编译 TF-A 时要针对的 Arm 架构的次要版本。它的值必须是数字,默认为0也见 Armv8架构扩展固件设计

  • BL2:这是一个可选的构建选项,它指定fip目标的BL2 图像的路径。在这种情况下,将不会构建TF-A中的BL2。

  • BL2U:这是一个可选的构建选项,用于指定BL2U映像的路径 。在这种情况下,将不会构建 TF-A 中的 BL2U。

  • BL2_AT_EL3:这是一个可选的构建选项,可以在 EL3 执行级别使用 BL2。

  • BL2_IN_XIP_MEM:在某些用例中,BL2 将存储在原地执行 (XIP) 内存中,如 BL1。在这些用例中,有必要初始化 RAM 中的 RW 部分,同时保留 RO 部分。此选项启用此用例。目前,仅当 BL2_AT_EL3 设置为“1”时才支持此选项。

  • BL31:这是一个可选的构建选项,它指定fip目标的BL31 图像的路径。在这种情况下,将不会构建 TF-A 中的 BL31。

  • BL31_KEY: 此选项用于GENERATE_COT=1. 它指定包含 PEM 格式的 BL31 私钥的文件。如果SAVE_KEYS=1,此文件名将用于保存密钥。

  • BL32:这是一个可选的构建选项,它指定fip目标的BL32 图像的路径。在这种情况下,将不会构建 TF-A 中的 BL32。

  • BL32_EXTRA1:这是一个可选的构建选项,它指定fip目标的Trusted OS Extra1 映像的路径 。

  • BL32_EXTRA2:这是一个可选的构建选项,它指定fip目标的Trusted OS Extra2 映像的路径。

  • BL32_KEY: 此选项用于GENERATE_COT=1. 它指定包含 PEM 格式的 BL32 私钥的文件。如果SAVE_KEYS=1,此文件名将用于保存密钥。

  • BL33: 主机文件系统中 BL33 图像的路径。fip如果使用 TF-A BL2,这对于目标来说是强制性的 。

  • BL33_KEY: 此选项用于GENERATE_COT=1. 它指定包含 PEM 格式的 BL33 私钥的文件。如果SAVE_KEYS=1,此文件名将用于保存密钥。

  • BRANCH_PROTECTION:启用 ARMv8.3 指针身份验证和 ARMv8.5 分支目标识别支持 ​​TF-A BL 图像本身的数值。如果启用,则需要使用支持选项的编译器 -mbranch-protection。选择要使用的分支保护功能:

  • 0:默认值关闭所有类型的分支保护

  • 1:启用所有类型的分支保护功能

  • 2:返回地址签名到其标准级别

  • 3:扩展签名以包含叶函数

    下表总结了BRANCH_PROTECTION值、GCC 编译选项和生成的 PAuth/BTI 功能。

    价值

    海湾合作委员会选项

    身份验证

    BTI

    0

    没有任何

    N

    N

    1

    标准

    2

    N

    3

    pac-ret+叶子

    N

    此选项默认为 0,这是一项实验性功能。请注意,如果 CPU 支持,则无论此选项的值如何,都会为非安全世界启用指针身份验证。

  • BUILD_MESSAGE_TIMESTAMP: 用于标识每次构建编译的时间和日期的字符串。它必须设置为 C 字符串(包括适用的引号)。默认为包含编译时间和日期的字符串。

  • BUILD_STRING:VERSION_STRING 的输入字符串,它允许唯一标识 TF-A 版本。默认为当前的 git commit id。

  • CFLAGS: 除了构建系统设置的选项之外,在编译器的命令行上附加的额外用户选项。

  • COLD_BOOT_SINGLE_CPU:该选项表示平台是否可以在复位后释放多个CPU。它可以是 0(可能会启动多个 CPU)或 1(在冷复位期间只会启动一个 CPU)。默认为0。如果平台总是带单CPU,则无需区分主副CPU,可以优化引导路径。在plat_is_my_cpu_primary()和 plat_secondary_cold_boot_setup()不需要平台移植接口,在这种情况下实施。

  • COT:启用 Trusted Boot 时,选择所需的信任链。默认为tbbr.

  • CRASH_REPORTING:当执行 BL31 期间发生意外异常时,非零值启用处理器寄存器状态的控制台转储。此选项的默认值为DEBUG- 即默认情况下,这仅对固件的调试版本启用。

  • CREATE_KEYS: 此选项用于GENERATE_COT=1. 它告诉证书生成工具在不存在或未指定有效密钥的情况下创建新密钥。允许的选项是“0”或“1”。默认值为“1”。

  • CTX_INCLUDE_AARCH32_REGS: 布尔选项,当设置为 1 时,将导致在保存和恢复 CPU 上下文时包含 AArch32 系统寄存器。对于仅限 AArch64 的平台(即在未实现 AArch32 的硬件上,或至少不在 EL1 和更高的 EL 上),该选项必须设置为 0。默认值为 1。

  • CTX_INCLUDE_EL2_REGS:此布尔选项在进入/退出 EL2 执行上下文时提供上下文保存/恢复操作。当实现 Armv8.4-SecEL2 扩展时,这是最重要的。默认值为 0(禁用)。设置SPD=spmd和时, 此选项必须等于 1(启用)SPMD_SPM_AT_SEL2

  • CTX_INCLUDE_FPREGS: 布尔选项,当设置为 1 时,将导致在保存和恢复 CPU 上下文时包含 FP 寄存器。默认值为 0。

  • CTX_INCLUDE_PAUTH_REGS:布尔选项,当设置为 1 时,为安全世界启用指针身份验证。这将导致在保存和恢复 CPU 上下文作为世界切换的一部分时包含 ARMv8.3-PAuth 寄存器。默认值为 0,这是一个实验性功能。请注意,如果 CPU 支持,则无论此标志的值如何,都会为非安全世界启用指针身份验证。

  • DEBUG:在调试和发布版本之间进行选择。它可以采用 0(发布)或 1(调试)作为值。0 是默认值。

  • DECRYPTION_SUPPORT:此构建标志使用户可以选择用于在启动期间解密固件的经过身份验证的解密算法。它接受 2 个值:aes_gcmnone。此标志的默认值是none禁用固件解密,这是 TBBR 的可选功能。此外,它是一个实验性功能。

  • DISABLE_BIN_GENERATION:禁用二进制图像生成的布尔选项。如果设置为 1,则仅构建 ELF 映像。0 是默认值。

  • DYN_DISABLE_AUTH:提供在运行时动态禁用 Trusted Board Boot 身份验证的功能。此选项仅适用于开发平台。TRUSTED_BOARD_BOOT如果必须启用此标志,则必须设置标志。0 是默认值。

  • E: 将警告转化为错误的布尔选项。默认值为 1。

  • EL3_PAYLOAD_BASE:此选项启用引导 EL3 负载,而不是正常的引导流程。它必须指定 EL3 负载的入口点地址。有关更多详细信息,请参阅“启动 EL3 负载”部分。

  • ENABLE_AMU:启用活动监视器单元扩展的布尔选项。这是 v8.4 及更高版本提供的可选架构特性。某些 v8.2 实现还实现了 AMU,并且此选项也可用于在这些系统上启用此功能。默认值为 0。

  • ENABLE_ASSERTIONS: 此选项控制是否assert() 编译出调用。对于调试版本,此选项默认为 1,并assert()保留对 的调用 。对于发布版本,此选项默认为 0 并assert()编译出对函数的调用。此选项可以独立于 进行设置DEBUG。它还可以用于隐藏任何仅在断言中需要且不适合断言本身的辅助代码。

  • ENABLE_BACKTRACE:此选项控制是否启用回溯转储。AArch64 和 AArch32 都支持它。然而,在 AArch32 中,帧记录的格式在 AAPCS 中没有定义,它们是由实现定义的。这种回溯实现仅支持禁用 T32 互通时 GCC 使用的格式。因此,在 AArch32 中启用此选项将强制编译器仅生成 A32 代码。默认情况下,此选项仅在 AArch64 调试版本中启用,但可以在每个平台的 Makefile 或构建命令行中覆盖此行为。

  • ENABLE_LTO:在 GCC 中为 TF-A 启用链接时间优化 (LTO) 支持的布尔选项。目前仅 AArch64 支持此选项。默认值为 0。

  • ENABLE_MPAM_FOR_LOWER_ELS:启用较低 EL 以使用 MPAM 功能的布尔选项。MPAM 是一个可选的 Armv8.4 扩展,它使各种内存系统组件和资源能够定义分区;在各种 EL 上运行的软件可以将自己分配到所需的分区以控制其性能方面。

    当此选项设置为 时1,EL3 允许较低的 EL 访问它们自己的 MPAM 寄存器,而不会陷入 EL3。但是,此选项不使用 EL3 中的分区。平台初始化代码应根据需要在 EL3 中配置和使用分区。此选项默认为0

  • ENABLE_PIE:用于在 TF-A 中的通用代码中启用位置独立可执行文件 (PIE) 支持的布尔选项。此选项目前仅在 BL2_AT_EL3、BL31 和 BL32 (TSP) 中受支持。默认值为 0。

  • ENABLE_PMF:启用对可选性能测量框架 (PMF) 的支持的布尔选项。默认值为 0。

  • ENABLE_PSCI_STAT:启用对可选 PSCI 功能PSCI_STAT_RESIDENCYPSCI_STAT_COUNT. 默认为 0。在没有备用统计收集后端的情况下,ENABLE_PMF必须启用。如果ENABLE_PMF设置,则在软件中跟踪驻留统计。

  • ENABLE_RUNTIME_INSTRUMENTATION:启用运行时检测的布尔选项,该检测将时间戳收集点注入 TF-A 以允许测量运行时性能。目前,仅检测 PSCI。启用此选项ENABLE_PMF也会启用构建选项。默认值为 0。

  • ENABLE_SPE_FOR_LOWER_ELS:启用统计分析扩展的布尔选项。这是 AArch64 的可选架构特性。默认值为 1,但在目标架构为 AArch32 时自动禁用。

  • ENABLE_SVE_FOR_NS: 布尔选项,只为非安全世界启用可伸缩矢量扩展 (SVE)。SVE 是 AArch64 的可选架构特性。请注意,当为非安全世界启用 SVE 时,将禁用从安全世界访问 SIMD 和浮点功能。这是为了避免损坏由 SIMD 和 FP 寄存器别名的 Z 寄存器中的非安全世界数据。build 选项与 build 选项不兼容CTX_INCLUDE_FPREGS,并且会在实现 SVE 并ENABLE_SVE_FOR_NS设置为 1 的平台上引发断言。默认值为 1,但当目标架构为 AArch32 时会自动禁用。

  • ENABLE_STACK_PROTECTOR: 在 GCC 中启用堆栈保护检查的字符串选项。允许的值为“all”、“strong”、“default”和“none”。默认值设置为“无”。如果需要此功能,“strong”是推荐的堆栈保护级别。“none”禁用堆栈保护。对于除“none”以外的所有值,都plat_get_stack_protector_canary() 需要实现平台钩子。该值作为选项的最后一个组件传递-fstack-protector-$ENABLE_STACK_PROTECTOR

  • ENCRYPT_BL31: 启用 BL31 固件加密的二进制标志。此标志取决于DECRYPTION_SUPPORT标记为实验性的构建标志。

  • ENCRYPT_BL32:启用安全 BL32 有效负载加密的二进制标志。此标志取决于DECRYPTION_SUPPORT标记为实验性的构建标志。

  • ENC_KEY:十六进制字符串格式的 32 字节(256 位)对称密钥。根据FW_ENC_STATUS标志,它可以是 SSK 或 BSSK 。此值取决于DECRYPTION_SUPPORT标记为实验性的构建标志。

  • ENC_NONCE:十六进制字符串格式的 12 字节(96 位)加密随机数或初始化向量 (IV)。此值取决于DECRYPTION_SUPPORT 标记为实验性的构建标志。

  • ERROR_DEPRECATED:此选项决定是否将可信固件中已弃用的平台 API、辅助函数或驱动程序的使用视为错误。它可以取值 1(将不推荐使用的 API 的使用标记为错误)或 0。默认值为 0。

  • EL3_EXCEPTION_HANDLING: 设置为 时1,启用针对 EL3 的异常处理。当设置0(默认)时,EL3 不会预期或处理异常,并且会导致恐慌。这仅支持 AArch64 构建。

  • FAULT_INJECTION_SUPPORT:ARMv8.4 扩展引入了对来自较低 EL 的故障注入的支持,并且此构建选项使较低 EL 能够使用通过系统寄存器访问的错误记录来注入故障。这仅适用于 AArch64 构建。

    此功能仅用于测试目的,建议对生产图像保持禁用状态。

  • FIP_NAME:这是一个可选的构建选项,用于指定fip目标的 FIP 文件名。默认为fip.bin

  • FWU_FIP_NAME:这是一个可选的构建选项,用于指定fwu_fip目标的 FWU FIP 文件名。默认为fwu_fip.bin

  • FW_ENC_STATUS:顶级固件的加密数字标志,值:

    0: Encryption is done with Secret Symmetric Key (SSK) which is common
       for a class of devices.
    1: Encryption is done with Binding Secret Symmetric Key (BSSK) which is
       unique per device.
    

    此标志取决于DECRYPTION_SUPPORT标记为实验性的构建标志。

  • GENERATE_COT: 布尔标志,用于构建和执行cert_create 工具以根据Trusted Board Boot 中描述的信任链创建证书 。然后构建系统调用fiptool将证书包含在 FIP 和 FWU_FIP 中。默认值为“0”。

    指定TRUSTED_BOARD_BOOT=1GENERATE_COT=1以在 BL1 和 BL2 映像中包含对 Trusted Board Boot 功能的支持,以生成相应的证书,并将这些证书包含在 FIP 和 FWU_FIP 中。

    请注意,如果TRUSTED_BOARD_BOOT=0GENERATE_COT=1,BL1 和 BL2 映像将不包括对 Trusted Board Boot 的支持。FIP 仍将包含相应的证书。该 FIP 可用于通过其他机制验证主机上的信任链。

    请注意,如果TRUSTED_BOARD_BOOT=1GENERATE_COT=0,BL1 和 BL2 映像将包含对 Trusted Board Boot 的支持,但 FIP 和 FWU_FIP 将不包含相应的证书,从而导致引导失败。

  • GICV2_G0_FOR_EL3:与 GICv3 不同,GICv2 架构不具备对特定 EL3 类型中断的固有支持。将此构建选项设置为1假设 GICv2组 0中断预计以 EL3 为目标,通过平台抽象层中断管理框架。这允许 GICv2 平台启用需要 EL3 中断类型的功能。这也意味着所有的 GICv2 Group 0 中断都交给 EL3,而 Secure Payload 中断需要同步交给 Secure EL1 处理。此选项的默认值为0,这意味着假设 Group 0 中断由 Secure EL1 处理。

  • HANDLE_EA_EL3_FIRST:当设置为 时1,外部中止和 SError 中断将在运行时始终被困在 EL3 中,即在 BL31 中。当设置为 0(默认)时,这些异常将被困在当前异常级别(如果当前异常级别是 EL0,则在 EL1 中)。

  • HW_ASSISTED_COHERENCY:在迄今为止的大多数 Arm 系统上,CPU 进入和退出一致性需要特定于平台的软件操作。然而,存在较新的系统,其中 CPU 进入和退出一致性是在硬件中管理的。此类系统只需要软件来启动这些操作,其余部分由硬件管理,最大限度地减少主动软件管理。在此类系统中,此布尔选项使 TF-A 能够在启动和电源管理操作期间执行构建和运行时优化。此选项默认为 0,如果启用,则意味着 WARMBOOT_ENABLE_DCACHE_EARLY也启用。

    如果在编译 TF-A 的平台包括管理硬件一致性的内核时禁用此标志,则会生成编译错误。这是基于这样一个事实,即系统不能同时拥有管理硬件一致性的内核和不管理一致性的内核。换句话说,一个平台不能同时拥有需要的 HW_ASSISTED_COHERENCY=1内核和需要 HW_ASSISTED_COHERENCY=0.

    请注意,HW_ASSISTED_COHERENCY启用时,必须使用翻译库版本 2(xlat tables v2);不支持翻译库的版本 1。

  • INVERTED_MEMMAP: memmap 工具默认在底部打印较低的地址,在顶部打印较高的地址。可以将此构建标志设置为“1”以反转此行为。较低的地址将打印在顶部,较高的地址将打印在底部。

  • JUNO_AARCH32_EL3_RUNTIME:此构建标志使您能够在 AArch32 模式下执行 EL3 运行时软件,这是在 Juno 上运行 AArch32 所必需的。默认情况下,此标志设置为“0”。启用此标志会在 AArch64 中构建 BL1 和 BL2,并有助于将SP_MINBL33加载为 AArch32 可执行映像。

  • KEY_ALG:此构建标志使用户能够选择用于生成 PKCS 密钥和随后的证书签名的算法。它接受 3 个值:rsa,rsa_1_5ecdsa。该选项 rsa_1_5是传统的 PKCS#1 RSA 1.5 算法,该算法不符合 TBBR 标准,保留仅用于兼容性。此标志的默认值rsa是符合 TBBR 的 PKCS#1 RSA 2.1 方案。

  • KEY_SIZE:此构建标志使用户能够为由 指定的算法选择密钥大小KEY_ALG。的有效值KEY_SIZE 取决于所选算法和加密模块。

    KEY_ALG

    可能的密钥大小

    rsa

    1024、2048(默认)、3072、4096*

    电子数据表

    不可用

    • CryptoCell 712 SBROM 第 1 版仅提供 2048 位大小。CryptoCell 712 SBROM 第 2 版仅提供 3072 位大小。

  • HASH_ALG:此构建标志使用户能够选择安全散列算法。它接受 3 个值:sha256,sha384sha512。此标志的默认值为sha256

  • LDFLAGS: 除了构建系统设置的选项外,附加到链接器命令行的额外用户选项。

  • LOG_LEVEL:选择日志级别,它控制编译到构建中的控制台日志输出量。这应该是以下之一:

    0  (LOG_LEVEL_NONE)
    10 (LOG_LEVEL_ERROR)
    20 (LOG_LEVEL_NOTICE)
    30 (LOG_LEVEL_WARNING)
    40 (LOG_LEVEL_INFO)
    50 (LOG_LEVEL_VERBOSE)
    

    直到并包括所选日志级别的所有日志输出都被编译到构建中。默认值在调试版本中为 40,在发布版本中为 20。

  • MEASURED_BOOT: 布尔标志,包括对 Measured Boot 功能的支持。如果启用此标志,则TRUSTED_BOARD_BOOT必须设置。该选项默认为0,是开发阶段的实验性功能。

  • NON_TRUSTED_WORLD_KEY: 此选项用于GENERATE_COT=1. 它指定包含 PEM 格式的 Non-Trusted World 私钥的文件。如果SAVE_KEYS=1,此文件名将用于保存密钥。

  • NS_BL2U:主机文件系统中NS_BL2U映像的路径。此图像是可选的。仅当平台 makefile 指定它是构建fwu_fip目标所必需的时才需要它。

  • NS_TIMER_SWITCH:在世界切换时启用非安全定时器寄存器内容的保存和恢复。它可以是 0(不保存和恢复)或 1(保存和恢复)。0 是默认值。如果 SPD 想要保存和恢复定时器寄存器,则可以将此设置为 1。

  • OVERRIDE_LIBC:此选项允许平台覆盖 BL 映像的默认 libc。它可以是 0(包括)或 1(删除)。默认值为 0。

  • PL011_GENERIC_UART:布尔选项,用于指示 PL011 驱动程序底层硬件不是完整的 PL011 UART,而是最低限度兼容的通用 UART,它是 PL011 的子集。驱动程序不会访问任何不属于 SBSA 通用 UART 规范的寄存器。默认值为 0(存在完整的 PL011 兼容 UART)。

  • PLAT:选择一个平台来构建 TF-A。所选平台名称必须是 下任何深度的子目录plat/,并且必须包含名为platform.mk. 例如,要为 Arm Juno 板构建 TF-A,请选择 PLAT=juno。

  • PRELOADED_BL33_BASE:此选项启用引导预加载的 BL33 映像,而不是正常引导流程。定义时,它必须为预加载的 BL33 映像指定入口点地址。此选项与 EL3_PAYLOAD_BASE. 如果两者都定义,EL3_PAYLOAD_BASE则优先于PRELOADED_BL33_BASE

  • PROGRAMMABLE_RESET_ADDRESS:该选项指示复位向量地址是否可以编程或固定在平台上。它可以是 0(固定)或 1(可编程)。默认值为 0。如果平台具有可编程复位地址,则 CPU 将在冷复位和热复位时直接在正确的地址处开始执行代码。在这种情况下,无需在启动时识别入口点,并且可以优化启动路径。该plat_get_my_entrypoint()平台的移植接口不需要在这种情况下实施。

  • PSCI_EXTENDED_STATE_ID:根据 PSCI1.0 规范,PSCI 电源状态参数有两种可能的格式:原始和扩展状态 ID 格式。如果此标志设置为 1,则将通用 PSCI 层配置为使用扩展格式。此标志的默认值为 0,这意味着 PSCI 实现默认使用原始电源状态格式。此标志应由平台 makefile 指定,它控制 CPU_SUSPEND smc 函数 ID 的 PSCI_FEATURES API 的返回值。在 Arm 平台上启用此选项时,该选项也ARM_RECOM_STATE_ID_ENC需要设置为 1。

  • RAS_EXTENSION:设置为 时1,启用 Armv8.2 RAS 功能。RAS 功能是 Armv8.2 之前的 CPU 的可选扩展,但对于 Armv8.2 或更高版本的 CPU 是必需的。

    RAS_EXTENSION设置为1HANDLE_EA_EL3_FIRST还必须设置为1

    默认情况下禁用此选项。

  • RESET_TO_BL31: 启用 BL31 入口点作为 CPU 复位向量而不是 BL1 入口点。它可以取值 0(CPU 复位到 BL1 入口点)或 1(CPU 复位到 BL31 入口点)。默认值为 0。

  • RESET_TO_SP_MIN:SP_MIN 是 TF-A 中提供的最小 AArch32 安全有效负载。该标志将 SP_MIN 入口点配置为 CPU 复位向量,而不是 BL1 入口点。它可以取值 0(CPU 复位到 BL1 入口点)或 1(CPU 复位到 SP_MIN 入口点)。默认值为 0。

  • ROT_KEY: 此选项用于GENERATE_COT=1. 它指定包含 PEM 格式的 ROT 私钥的文件并强制生成公钥哈希。如果SAVE_KEYS=1,此文件名将用于保存密钥。

  • SAVE_KEYS: 此选项用于GENERATE_COT=1. 它告诉证书生成工具保存用于建立信任链的密钥。允许的选项是“0”或“1”。默认值为“0”(不保存)。

  • SCP_BL2: 主机文件系统中 SCP_BL2 映像的路径。此图像是可选的。如果存在 SCP_BL2 图像,则必须为fip 目标传递此选项。

  • SCP_BL2_KEY: 此选项用于GENERATE_COT=1. 它指定包含 PEM 格式的 SCP_BL2 私钥的文件。如果SAVE_KEYS=1,此文件名将用于保存密钥。

  • SCP_BL2U:主机文件系统中SCP_BL2U映像的路径。此图像是可选的。仅当平台 makefile 指定它是构建fwu_fip目标所必需的时才需要它。

  • SDEI_SUPPORT:设置此项以1启用对 BL31 图像的软件委托异常接口的支持。这默认为0.

    设置为 时1,构建选项EL3_EXCEPTION_HANDLING也必须设置为1

  • SEPARATE_CODE_AND_RODATA: 代码和只读数据是否应该在单独的内存页面上隔离。这是安全性和内存使用之间的权衡。请参阅固件设计中的“在单独的存储器页面上隔离代码和只读数据”部分。默认情况下禁用此标志并影响所有 BL 图像。

  • SEPARATE_NOBITS_REGION:设置此选项以1允许将 BL31 的 NOBITS 部分(.bss、堆栈、页表和相关内存)分配到 RAM 中,与加载的固件映像不连续。设置后,平台应提供BL31_NOBITS_BASE和 的定义 BL31_NOBITS_LIMIT。当该选项为0(默认)时,NOBITS 部分将紧跟在加载的固件映像之后放置在 RAM 中。

  • SPD:选择要内置到 TF-A 中的 Secure Payload Dispatcher 组件。此构建选项仅在ARCH=aarch64. 该值应该是包含 SPD 源的目录的路径,相对于 services/spd/; 该目录应该包含一个名为 <spd-value>.mk. SPM Dispatcher 标准服务位于 services/std_svc/spmd 并由SPD=spmd. 启用该SPM_MM选项后,无法启用 SPM 调度程序。

  • SPIN_ON_BL1_EXIT:此选项在 BL1 中引入了无限循环。它可以是 0(无循环)或 1(添加循环)。0 是默认值。在移交给 BL31 之前,此循环在 BL1 中停止执行。此时,所有固件镜像都已加载到内存中,MMU 和缓存已关闭。有关更多详细信息,请参阅“调试选项”部分。

  • SPMD_SPM_AT_SEL2:此布尔选项与 SPM 调度程序选项 ( SPD=spmd) 一起使用。启用时 (1) 表示 SPMC 组件在 Armv8.4-SecEL2 扩展提供的 S-EL2 执行状态下运行。这是启用 SPM 调度程序时的默认设置。禁用 (0) 时表示 SPMC 组件在 S-EL1 执行状态下运行。后一种配置支持 Armv8.4 之前的平台(也就是不实现 Armv8.4-SecEL2 扩展)。

  • SPM_MM:启用基于管理模式 (MM) 的安全分区管理器 (SPM) 实施的布尔选项。默认值为0 (禁用)。启用1SPM Dispatcher ( ) 时无法启用此选项( SPD=spmd)。

  • SP_LAYOUT_FILE:平台提供的包含安全分区描述的 JSON 文件路径。构建系统将解析此文件并将所有安全分区 blob 打包到 FIP 中。该文件不一定是 TF-A 树的一部分。仅当 时可用SPD=spmd

  • SP_MIN_WITH_SECURE_FIQ: 布尔标志,指示 SP_MIN 处理安全中断(通过 FIQ 线捕获)。如果平台需要处理此类中断,则可以启用此指令。启用后,FIQ 在监控模式下处理,并且不允许非安全世界屏蔽这些事件。在 SP_MIN 中启用 FIQ 处理的平台应实现 api sp_min_plat_fiq_handler()。默认值为 0。

  • TRUSTED_BOARD_BOOT: 布尔标志,包括对受信任板引导功能的支持。当设置为“1”时,BL1 和 BL2 映像支持加载和验证 FIP 中的证书和映像,BL1 支持固件更新。默认值为“0”。FIP 和 FWU_FIP 中证书的生成和包含取决于GENERATE_COT选项的值 。

    警告

    此选项取决于CREATE_KEYS是否启用。如果密钥已经存在于磁盘中,它们将被覆盖,恕不另行通知。

  • TRUSTED_WORLD_KEY: 此选项用于GENERATE_COT=1. 它指定包含 PEM 格式的 Trusted World 私钥的文件。如果SAVE_KEYS=1,此文件名将用于保存密钥。

  • TSP_INIT_ASYNC:选择 BL32 初始化方法为异步或同步,(请参阅固件设计中的“初始化 BL32 映像”部分 )。它可以取值 0(BL32 使用同步方法初始化)或 1(BL32 使用异步方法初始化)。默认值为 0。

  • TSP_NS_INTR_ASYNC_PREEMPT:非零值启用中断路由模型,该模型将非安全中断从 TSP 异步路由到 EL3,从而导致立即抢占 TSP。EL3 负责保存和恢复此路由模型中的 TSP 上下文。默认路由模型(当值为 0 时)是将非安全中断路由到 TSP,允许它保存其上下文并通过 SMC 同步移交给 EL3。

    笔记

    EL3_EXCEPTION_HANDLING是 时1TSP_NS_INTR_ASYNC_PREEMPT 也必须设置为1

  • USE_ARM_LINK: 该标志决定是否启用对 ARM 链接器的支持。当LINKER构建变量指向 armlink 链接器时,会自动启用此标志。要启用对 armlink 的支持,平台必须为 BL 映像提供分散文件。目前,Tegra 平台使用 armlink 支持来编译 BL3-1 映像。

  • USE_COHERENT_MEM:该标志决定是否在 BL 内存映射中包含相干内存区域(请参阅固件设计中的“在 TF-A 中使用相干内存”部分)。它可以取值 1(包括 Coherent 内存区域)或 0(不包括 Coherent 内存区域)。默认值为 1。

  • USE_DEBUGFS:当设置为 1 时,此选项激活实验功能,通过 BL31 作为 SiP SMC 功能公开虚拟文件系统接口。默认值为 0。

  • ARM_IO_IN_DTB:这个标志根据固件配置框架决定是否使用IO。这会将 io_policies 移动到配置设备树中,而不是代码库中的静态结构。这是目前的一个实验性功能。

  • USE_ROMLIB: 此标志决定是否使用 ROM 中的库。此功能创建了一个要放置在 ROM 中的函数库,从而减少了 SRAM 的使用。有关详细信息,请参阅ROM 中的库。默认值为 0。

  • V: 详细的构建。如果分配了 0 以外的任何值,则打印构建命令。默认值为 0。

  • VERSION_STRING:用于每个 TF-A 图像的日志输出的字符串。默认为通过连接版本号、构建类型和构建字符串形成的字符串。

  • W: 警告级别。一些感兴趣的编译器警告选项已重新组合并放在根 Makefile 中。该标志可以取 0 到 3 的值,每个级别启用更多警告选项。默认值为 0。

  • WARMBOOT_ENABLE_DCACHE_EARLY: 热启动后在 CPU 早期启用 D-cache 的布尔选项。这适用于不需要互连编程来启用缓存一致性的平台(例如:单集群平台)。如果启用此选项,则热启动路径会在启用 MMU 后立即启用 D-cache。此选项默认为 0。

  • SUPPORT_STACK_MEMTAG:这个标志决定是否为堆栈启用内存标记。它接受 2 个值:yesno。此标志的默认值为no。请注意,此选项必须仅对高于 Armv8.5-A 的 ARM 架构启用。

5.2. GICv3 驱动程序选项

使用指令包含 GICv3 驱动程序文件:

include drivers/arm/gic/v3/gicv3.mk

可以使用平台 makefile 中设置的以下选项配置驱动程序:

  • GICV3_IMPL:在 GICv3 的 GIC-500 和 GIC-600 变体之间进行选择。此选项可以采用默认设置为 GIC500 的值 GIC500 和 GIC600。

  • GICV3_IMPL_GIC600_MULTICHIP:选择具有多芯片功能的 GIC-600 变体。此选项默认为 0

  • GICV3_OVERRIDE_DISTIF_PWR_OPS:允许覆盖arm_gicv3_distif_pre_savearm_gicv3_distif_post_restore 函数的默认实现。这对于需要在 SYSTEM_SUSPEND 期间模拟 GIC 保存和恢复而不关闭 GIC 的 FVP 平台是必需的。默认值为 0。

  • GIC_ENABLE_V4_EXTN:在 GICv3 驱动程序中启用与 GICv4 相关的更改。此选项默认为 0。

  • GIC_EXT_INTID:设置为 时1,GICv3 驱动程序将支持扩展的 PPI (1056-1119) 和 SPI (4096-5119) 范围。此选项默认为 0。

5.3. 调试选项

编译调试版本并使构建更加详细使用

make PLAT=<platform> DEBUG=1 V=1 all

AArch64 GCC 默认使用 DWARF 版本 4 调试符号。某些工具(例如 DS-5)可能不支持这一点,并且可能需要 GCC 发出旧版本的 DWARF 符号。这可以通过使用-gdwarf-<version>标志来实现 ,版本设置为 2 或 3。对于 5.16 之前的 DS-5 版本,建议将版本设置为 2。

在调试逻辑问题时,使用-O0.

警告

使用-O0可能会导致输出图像更大,并且可能需要重新计算基地址(请参阅固件设计中Arm 开发平台上内存布局部分)。

可以通过设置CFLAGS或 将额外的调试选项传递给构建系统LDFLAGS

CFLAGS='-O0 -gdwarf-2'                                     \
make PLAT=<platform> DEBUG=1 V=1 all

请注意,-Wl,CFLAGS直接调用链接器时,将忽略使用样式编译驱动程序选项。

也可以引入一个无限循环来帮助调试 TF-A 的后 BL2 阶段。这可以通过使用SPIN_ON_BL1_EXIT=1构建标志重建 BL1 来完成 。请参阅通用构建选项 部分。在这种情况下,开发人员可以在控制台输出指示时使用调试器控制目标。使用 DS-5 时,可以使用以下命令:

# Stop target execution
interrupt

#
# Prepare your debugging environment, e.g. set breakpoints
#

# Jump over the debug loop
set var $AARCH64::$Core::$PC = $AARCH64::$Core::$PC + 4

# Resume execution
continue

版权所有 (c) 2019-2020,Arm Limited。版权所有。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/610103
推荐阅读
相关标签
  

闽ICP备14008679号