Kconfig 配置

[English]

系统配置

[English]

Armino 系统配置主要指 Kconfig 配置,分区配置,安全配置等,处理过程如下图所示:

8

图中标号所对应的处理为:

    1. 代码生成,编译前构建系统先扫描配置文件,生成编译所需的头文件或者配置文件。

    1. 生成 BIN - 编译,链接并生成原始二进制文件。

    1. 再次扫描配置文件,依据配置项打包,包括加 CRC,加密,加签等,最终生成 all-app.bin,all-app-no-bl.bin, ota.bin。

    1. 将生成的 OTP/EFUSE 配置文件部署到板子上。

配置文件

Armino 支持下述几种配置文件:

  • Kconfig - 组件配置,生成 sdkconfig.h。详情请参考 Kconfig 配置。

  • csv - CSV 格式配置文件,包括:

    • partitions.csv - 分区配置表,用于生成 partitions_gen.h。详情请参考 分区配置。

    • mpc.csv - 安全块外设配置表,用于生成 security.h。详情请参考 安全配置。

    • ppc.csv - 安全外设配置表,用于生成 security.h。详情请参考 安全配置。

    • gpio.csv - 外设与 GPIO 映射表,结合 ppc.csv 一起生成 GPIO 安全属性。详情请参考 安全配置。

    • security.csv - 安全配置,用于生成 security.h 与 otp_efuse_otp.json,也用于打包处理。详情请参考 安全配置。

    • ota.csv - 安全 OTA 配置,用于配置 OTA 策略,版本安全计数器等。详情请参考 安全配置。

  • key - 配置安全相关的 KEY,如 FLASH AES KEY,安全启动公钥对等。详情请参考 安全配置。

文件部署

配置文件在 Armino 中部署如下图所示:

- armino/
    - components/
        - c1/
            - Kconfig
    - middleware/
        - boards/
            - bk7239/
                - csv
                    - mpc.csv
                    - ppc.csv
                    - ota.csv
                    - partitions.csv
                    - security.csv
                - key
                    - root_ec256_pubkey.pem
                    - root_ec256_privkey.pem
        - soc/
            - bk7239/
                - bk7239.defconfig
    - projects/
        - my_project/
            - config/
                - common
                    - config
                - bk7239
                    - config
                    - mpc.csv
                    - ppc.csv
                    - ota.csv
                    - partitions.csv
                    - security.csv
                    - root_ec256_pubkey.pem
                    - root_ec256_privkey.pem
                - bk7258
                    - config
                    - partitions.csv
            - Kconfig.projbuild
            - main/
                - Kconfig
            - components/
                - c1/
                    - Kconfig

可以将这些文件归为两类:

  • 配置定义文件:

    • Kconfig - 通常定义在组件中。

    • Kconfig.projbuild - 定义在组件或者工程目录下。

  • 配置修改文件:

    • middleware/soc/bk7239.defconfig - Armino 提供的 BK7239 默认配置。

    • my_projects/config/common/config - 工程中不同 BK72xx 共享的配置。

    • my_projects/config/bk7239/config - 工程中 BK7239 专有配置。

对于同名配置文件或者配置项,优先级规则为:

  • 工程配置 > Middleware 配置 > 组件配置。

  • 对于同目录下配置文件:特定芯片配置项 > 通用配置项。

备注

Kconfig 是使用高优先级文件中配置项取代低优先级配置文件中配置项; 其他配置文件是使用优先级高的配置文件取代优先级低的文件。

重要

配置项只有在 Kconfig 或 Kconfig.projbuild 中定义之后,才能通过配置修改文件去修改该配置, 如果偿试修改一个未定义的配置,则不会在 sdkconfig.h 中生成任何定义。

备注

Kconfig.projbuild 是针对 menuconfig 来设计的,当向 Kconfig.projbuild 中增加一项时, 会在 menuconfig 顶层菜单中显示该配置项。BK7239 不支持 menuconfig,因此 Kconfig.projbuild 与 Kconfig 作用相同。

备注

在Kconfig文件中定义的配置项名称,在config、defconfig和C代码中使用需要加上 CONFIG_ 前缀。

在 Armino 工程中,Kconfig 配置优先级为:

my_projects/config/bk7239/config > my_projects/config/common/config > bk7239.defconfig > 配置定义文件

配置依赖

相互依赖的配置项自动更改成正确的值,仅发生在使用 menuconfig 配置时, Armino 不支持 menuconfig 配置,因此,当通过配置修改文件更改某项配置时, 与该项配置相互依赖的配置不会自动更改。

重要

在 Armino 中所有配置项均需显式指定,或者使用默认值。

CMakeLists.txt 中使用 Kconfig

在 CMakeLists.txt 中可直接使用 Kconfig 中定义的配置项,唯一要注意的问题不要将 armino_component_register() 放在任何配置条件中,可参考 通过 Kconfig 禁用组件。