工程配置及创建
概述
本章介绍 SDK 配置的相关内容。
第一小节,将介绍如何 配置一个 SoC 工程。包括配置步骤、初始配置以及配置指令。
第二小节,将介绍 配置系统的组成。包括 Kconfig 以及 conf 文件。
第三小节,将介绍如何创建 外部工程, 用户可以通过此方式在 Realtek SDK 之外的目录中进行独立开发。
配置系统
Kconfig 介绍
本节将介绍 Kconfig 的组织结构,以及一个配置项在 Kconfig 中是如何定义的。
组织结构
本项目的配置系统采用 Kconfig 组织,通过 Kconfig 的层级引用,将各个组件的配置结构化到
amebaxxx_gcc_project/Kconfig中。关于 Kconfig 更详细的信息可参见: https://docs.kernel.org/kbuild/kconfig-language.html![]()
用户执行
menuconfig.py选中需要的配置项后,会保存为.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}/amebaxxx_gcc_project目录下,提供了一个名为default.conf的配置集合文件,定义了编译本 SoC 项目的 初始配置 。特殊地,
menuconfig.py -f隐含了menuconfig.py -f default.conf的规则,这样其它 conf 文件中只需编写default.conf的增量配置即可。若存在相同配置项,其它 conf 文件中的值将覆盖default.conf中的值。Kconfig 中的 default 值只有在未设定某个配置项时才会生效, 而
default.conf文件相当于一系列默认的输入项,因此default.conf的优先级要高于 Kconfig 中的 default 值。
prj.conf
user.conf
用户自定义的 conf 文件。
生成:用户可以手动编写
.conf文件;也可以先运行menuconfig.py利用可视化界面进行手动配置,退出后通过menuconfig.py -s命令将本次配置结果保存为<name>.conf文件。menuconfig.py -s <name>.conf应用:通过
menuconfig.py -f命令,指定一个或多个.conf文件。如果多个.conf文件中存在相同配置项,<name2>.conf的优先级将高于<name1>.conf。例如,如果<name1>.conf中定义了CONFIG_BT_MENU=y,<name2>.conf中定义了CONFIG_BT_MENU=n,那么最终CONFIG_BT_MENU=n将会生效。menuconfig.py -f <name1>.conf <name2>.conf ...
备注
用户可通过 menuconfig.py -s 将当前配置保存为 conf 文件,之后利用 menuconfig.py -f 对保存的 .conf 文件进行加载。
创建外部工程
用户可以选择在 Realtek 提供的默认工程目录中进行开发和配置;也可以选择基于某个 example 单独创建外部工程,然后在该工程目录中进行开发和配置。
前文介绍了如何在 amebaxxx_gcc_project 目录下进行配置与编译,这种模式下用户将在 Realtek 提供的 SDK 中开发自己的项目。但在一些场景下,用户希望创建独立于 Realtek SDK 的工程目录,方便独立维护或更新,或方便多团队开发。下文介绍基于外部工程的开发模式。
1. 创建命令
进入到 SoC 对应的 GCC project 路径下,运行:
cd {SDK}/amebaxxx_gcc_project build.py --new <project_dir> [-a <APP_NAME>]将以 example 中的
APP_NAME为模板,在project_dir路径下建立新的工程。例如:build.py --new ~/my_project -a http_client工程路径下包含:
ameba.batameba.sh:用户可以通过这些脚本设置环境变量。
menuconfig.pybuild.py:用于配置及编译工程
CMakeLists.txt:编译此新建工程的入口文件
Kconfig:在此可添加用户自己的配置项
<APP_NAME>文件夹:指定模板的文件将被拷贝至相应文件夹
prj.conf:用于记录该工程的默认配置
manifest.json5:用于配置固件的安全特性
2. 在创建的工程目录下设置环境
工程目录下的
ameba.bat和ameba.sh建立了对 Realtek SDK 根目录下同名脚本的引用,用户可通过任意位置的脚本设置环境。
3. 在创建的工程目录下配置
使用方法同 配置工程 中的命令。配置生成的
menuconfig文件夹将会生成在此工程目录下。
4. 在创建的工程目录下编译
使用方法同 编译指令 中的命令。编译生成的
build文件夹将会生成在此工程目录下。