zoukankan      html  css  js  c++  java
  • ARM Trusted Firmware分析——编译选项

    参考文档:《Build Options

    1. 通用部分

    BL2/BL31/BL31:指定生成fip文件的BL2/BL31/BL32镜像路径,指定后则不需要编译BL2镜像。

    BL2_AT_EL3:使能后BL2镜像会运行在EL3异常等级。

    BL2_IN_XIP_MEM:使能后BL2会运行在XIP存储设备上。只需要在RAM上初始化读写段,RO代码段不需要拷贝。

    BL32_EXTRA1/BL32_EXTRA2:生成fip的TOS Extra1/Extra2镜像路径。

    DISABLE_BIN_GENERATION:禁止生成二进制镜像,默认为0。如果为1,则默认只输出ELF格式镜像。

    EL3_PAYLOAD_BASE:指定EL3镜像的入口地址,跳过后面镜像读取加载流程。

    ENABLE_ASSERTIONS:配置编译时是否使能assert()。1表示将assert()编译在版本内;0表示关闭assert()。

    ENABLE_BACKTRACE:配置编译版本是否支持backtrace dump功能。

    ENABLE_LTO:仅在AARch64平台可用,配置是否支持链接时优化(Link Time Optimization)功能。

    ENABLE_PIE:配置是否使能位置无关可执行代码功能,默认为0。仅支持BL2_AT_EL3、BL31、BL32。

    ENABLE_STACK_PROTECTOR:配置GCC stack protection选项,允许值为all、strong、default、none

    FIP_NAME:指定FIP文件名称,默认为fip.bin

    FWU_FIP_NAME:指定FWU FIP文件名称,默认为fwu_fip.bin。

    LDFLAGS:用户添加链接命令选项。

    PLAT:指定编译ATF的平台配置,必须要plat/下的对应目录匹配,并包含一个platform.mk文件。

    PRELOADED_BL33_BASE:从预加载的BL33镜像启动,入口地址由此配置指定。

    PROGRAMMABLE_RESET_ADDRESS:1允许复位vector address可配置,0是固定。默认为0。

    RESET_TO_BL31:使用BL31作为复位vector,而不是使用BL1入口。0使用BL1入口地址,1使用BL31入口地址。默认为0。

    SPD:指定ATF中编译的Secure Payload Dispatcher名称,跟services/spd下目录一致。目录下需要包含一个同名的<spd-value>.mk文件。

    SPIN_ON_BL1_EXIT:1表示BL1退出时进入无限循环,0表示不使用无限循环。使用1可以在镜像加载完成、MMU和Cache都关闭的时候,接入调试器进行调试。

    2. 安全相关

    ROT_KEY:指定包含ROT PEM格式私钥的文件并且强制生成公钥hash。

    SAVE_KEYS:告诉证书生成工具将秘钥保存到指定文件。

    GENERATE_COT:决定是否编译并执行TBB中对每个COT生成认证信息的工具cert_create。默认为0。

    • TRUSTED_BOARD_BOOT=1且GENERATE_COT=1:
    • TRUSTED_BOARD_BOOT=0且GENERATE_COT=1:
    • TRUSTED_BOARD_BOOT=1且GENERATE_COT=0:

    COT:如果使能Trusted Boot,选择意向Chain of Trust,默认为tbbr。

    CREATE_KEYS:在GENERATE_COT=1时,告诉证书生成工具生成新key,以免遇到未指定或无效key的情况。可选0或1,默认为1。

    DYN_DISABLE_AUTH:具备在运行时关闭TBB镜像验证功能,仅在开发阶段有意义。

    OPENSSL_DIR:提供用来做镜像签名和加密工具的openssl安装目录。

    2.1 签名

    通过KEY_ALGKEY_SIZE选择签名算法和秘钥位宽,哈希算法由HASH_ALG指定。

    KEY_ALG:允许用于选择生成PKCS秘钥以及签名所使用的算法,支持选项有rsa、rsa_1_5、ecdsa。默认为rsa,兼容TBBR的PKCS#1 RSA2.1。

    KEY_SIZE:允许用户选择KEY_ALG指定算法的秘钥大小。

    KEY_ALG

    Possible key sizes

    rsa

    1024, 2048(default), 3072, 4096

    ecdsa

    unavailable

    BL31_KEY/BL32_KEY/BL33_KEY:在GENERATE_COT=1使能后,指定BL31/BL32/BL33 PEM格式私钥文件。如果指定SAVE_KEYS=1,则用于保存key。

    NON_TRUSTED_WORLD_KEY:在GENERATE_COT=1时生效,指定Non-Trusted World PEM格式私钥文件。

    TRUSTED_WORLD_KEY:在GENERATE_COT=1时生效,指定Trusted World PEM格式私钥文件。

    2.2 加密相关

    通过DECRYPTION_SUPPORT选择加密算法,以及ENC_KEY选择秘钥,ENCRYPT_BL31/ENCRYPT_BL32选择加密镜像。

    DECRYPTION_SUPPORT:允许用户使用经过验证的解密算法来对启动过程中的镜像解密。两种选项aes_gcm或none。none表示关闭解密功能。是否支持其他aes模式扩展,取得性能和安全平衡?

    ENC_KEY:一个32字节(256位)的对称秘钥,可以是SSK或BSSK方式。

    ENC_NONCE:一个12字节(96位)的nonce或IV秘钥。nonce是一个只被使用一次的任意或非重复的随机数值。

    ENCRYPT_BL31/ENCRYPT_BL32:在DECRYPTION_SUPPORT打开后,表示是否对BL31/BL32镜像进行加密。

    FW_ENC_STATUS:指定镜像加密秘钥管理方式。0,一类设备使用相同的SSK(Secrete Symmetric Key);1,每个设备使用独有的BSSK(Binding Secret Symmetric Key)。

    2.3 哈希

    HASH_ALG:选择hash算法选项,可选sha256、sha384、sha512。默认为sha256。

    2.4 中断

    EL3_EXCEPTION_HANDLING:设置为1时,异常处理将由EL3进行处理;设置为0时,EL3将不会进行异常处理,结果是进行panic。

    SEC_INT_DESC_IN_FCONF:用于决定是否使用关键配置框架配置Group 0和Group 1位安全中断。

    GICV2_G0_FOR_EL3:不同于GICv3,GICv2没有EL3专用中断。将GICV2_G0_FOR_EL3置为1,则表示期望GICv2 Group 0中断发送到EL3。这意味着所有GICv2 Group 0中断被送到EL3,并且Secure Payload中断需要被同步送到S.EL1处理。默认值为0,表示Group 0中断默认被S.EL1处理。

    HANDLE_EA_EL3_FIRST:置为1,则外部异常和SError中断会被EL3捕获。置为0,异常则会陷入当前EL(如果当前EL是EL0,则会陷入EL1。)

    SP_MIN_WITH_SECURE_FIQ:

    TSP_NS_INTR_ASYNC_PREEMPT:

    3. 调试

    编译调试版本:

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

    DEBUG:选择编译调试版本还是发布版本,0发布版本,1调试版本。

    ARM GCC默认使用DWARF 4调试符号。某些工具可能不支持,可以通过-gdwarf-<version>来指定DWARF版本,比如为2或3。

    某些时候甚至需要关闭编译优化来定位问题,使用-O0。

    CFLAGS='-O0 -gdwarf-2'                                     
    make PLAT=<platform> DEBUG=1 V=1 all
    联系方式:arnoldlu@qq.com
  • 相关阅读:
    钢镚开发的第7天
    钢镚儿开发的第六天
    钢镚儿开发的第五天
    钢镚儿开发第三、第四天
    4.18第九周学习进度
    人与神话阅读笔记02
    钢镚儿开发第二天
    热词云
    钢镚儿开发第一天
    [Usaco2006 Mar]Mooo 奶牛的歌声
  • 原文地址:https://www.cnblogs.com/arnoldlu/p/14299631.html
Copyright © 2011-2022 走看看