工程配置
概述
本章介绍 SDK 配置的相关内容。
第一小节,将介绍如何 配置一个 SoC 工程。包括配置步骤、初始配置以及配置指令。
第二小节,将介绍 配置系统的组成。包括 Kconfig 以及 conf 文件。
配置系统
Kconfig 介绍
本节将介绍 Kconfig 的组织结构,以及一个配置项在 Kconfig 中是如何定义的。
组织结构
本项目的配置系统采用 Kconfig 组织,通过 Kconfig 的层级引用,将各个组件的配置结构化到
component/soc/amebaxxx/project/Kconfig中。关于 Kconfig 更详细的信息可参见: https://docs.kernel.org/kbuild/kconfig-language.html![]()
用户执行
ameba.py menuconfig选中需要的配置项后,会保存为.config文件。经过脚本处理后,生成供 CMake 使用的.config_xxx文件,以及供 C 代码调用的头文件platform_autoconf.h。
定义 Kconfig 符号
定义一个 Kconfig 符号需要遵循下面格式:
config FOO bool "choose FOO" default n上述 Kconfig 结构定义了一个名为
FOO的bool类型符号,默认值为n。通过 menuconfig 进入可视化界面后,该符号将显示为:[ ] choose FOO
"choose FOO"为提示词,其将显示在可视化配置界面中,若删除"choose FOO",那么可视化界面中将不会显示该配置项。除bool类型外,还可以定义string,hex,int等其他类型的配置项。
default n表示 no, 代表该项默认不会被选中,default n可缺省。注意,通过default定义的默认值,只有在用户没有设置过该 config 项时才会生效。如果同一个 config 中定义了多重
default值,那么将以首次出现的有效default值为准。上述符号在
.config文件中将被解析为CONFIG_FOO。
conf 文件介绍
本节介绍 conf 文件的格式,以及涉及的几种 conf 文件。
conf 文件通过将用户需要设置的配置项写入其中,代替可视化界面的 menuconfig 方式。 和 menuconfig 交互式配置的方式类似,这种方式本质上也是选中/取消选中一些 Kconfig 文件中定义的项,只是用参数输入的方式代替了交互的的输入。
conf 文件格式
conf 文件由多行配置项组成,这些配置项遵循以下格式:
CONFIG_<name1>=<value> CONFIG_<name2>=<value> ...
=号左右不允许有空格。
default.conf
在
{SDK}/component/soc/amebaxxx/project目录下,提供了一个名为default.conf的配置集合文件,定义了编译本 SoC 项目的 初始配置 。特殊地,
ameba.py menuconfig -f隐含了ameba.py menuconfig -f default.conf的规则,这样其它 conf 文件中只需编写default.conf的增量配置即可。若存在相同配置项,其它 conf 文件中的值将覆盖default.conf中的值。Kconfig 中的 default 值只有在未设定某个配置项时才会生效, 而
default.conf文件相当于一系列默认的输入项,因此default.conf的优先级要高于 Kconfig 中的 default 值。
prj.conf
user.conf
用户自定义的 conf 文件。
生成:用户可以手动编写
.conf文件;也可以先运行ameba.py menuconfig利用可视化界面进行手动配置,退出后通过ameba.py menuconfig -s命令将本次配置结果保存为<name>.conf文件。ameba.py menuconfig -s <name>.conf应用:通过
ameba.py menuconfig -f命令,指定一个或多个.conf文件。如果多个.conf文件中存在相同配置项,<name2>.conf的优先级将高于<name1>.conf。例如,如果<name1>.conf中定义了CONFIG_BT_MENU=y,<name2>.conf中定义了CONFIG_BT_MENU=n,那么最终CONFIG_BT_MENU=n将会生效。ameba.py menuconfig -f <name1>.conf <name2>.conf ...
备注
用户可通过 ameba.py menuconfig -s 将当前配置保存为 conf 文件,之后利用 ameba.py menuconfig -f 对保存的 .conf 文件进行加载。