本文主要记录下RT-Thread的Kconfig文件依赖关系,就像分析makefile一样。下文以正点原子潘多拉STM32L475开发板举例,该开发板自带RTT官方的例程,便于分析,目录如下图所示。由于使用ENV不能有中文路径,所以下面的文件夹是从开发板资料中单独复制出来的。
“顶层Kconfig”文件位于example文件夹下的具体例程下,姑且这么叫吧,因为这个Kconfig引用了其他所有的Kconfig。
随意打开一个例程,例如05_basic_ir,如图3所示,可以看到一个Kconfig文件。
在该目录下使用ENV工具输入menuconfig将进入一个图形配置界面,如图4所示。在这个界面下分别可以配置RT-Thread内核、组件、在线软件包、硬件驱动、额外的库。
暂不深究menuconfig具体能配置什么,先来看下“05_basic_ir”目录下的Kconfig的文件做了什么。
mainmenu "RT-Thread Configuration"
config $BSP_DIR
string
option env="BSP_ROOT"
default "."
config $RTT_DIR
string
option env="RTT_ROOT"
default "../../rt-thread"
# you can change the RTT_ROOT default "../.." to your rtthread_root,
# example : default "F:/git_repositories/rt-thread"
config $PKGS_DIR
string
option env="PKGS_ROOT"
default "packages"
config $ENV_DIR
string
option env="ENV_ROOT"
default "/"
source "$RTT_DIR/Kconfig"
source "$PKGS_DIR/Kconfig"
source "$BSP_DIR/../../drivers/Kconfig"
source "$BSP_DIR/../../libraries/Kconfig"
上面的Kconfig代码涉及一些语法,具体可以参考官方的文档:
https://www.rt-thread.org/document/site/programming-manual/kconfig/kconfig/#kconfig_2
mainmenu "RT-Thread Configuration" 是指定了menuconfig图形界面的标题,对应图4正中间的蓝色标题。然后Kconfig分别指定了BSP、RTT内核等相对路径。最重要的是最后四行,source表示引用,类似于C语言的#include,分别引用了RTT内核、软件包、BSP驱动、BSP软件库目下的Kconfig文件。
以下以分析 source "$RTT_DIR/Kconfig" 为例,继续追踪Kconfig的引用。
打开RT-Thread内核目录,如图5所示,该目录下的Kconfig内容如下 。
source "$RTT_DIR/src/Kconfig"
source "$RTT_DIR/libcpu/Kconfig"
source "$RTT_DIR/components/Kconfig"
好吧,继续追踪下去。再打开该目录下的src目下的Kconfig文件,内容如下。由于太长,以下仅列出了一小部分。
menu "RT-Thread Kernel"
config RT_NAME_MAX
int "The maximal size of kernel object name"
range 2 32
default 8
help
Each kernel object, such as thread, timer, semaphore etc, has a name,
the RT_NAME_MAX is the maximal size of this object name.
config RT_USING_SMP
bool "Enable SMP(Symmetric multiprocessing)"
default n
help
This option should be selected by machines which have an SMP-
capable CPU.
The only effect of this option is to make the SMP-related
options available to the user for configuration.
# 太长了,省略。。。
endmenu
这时,我们再回到图4的menuconfig图形配置界面,进入第一项“RT-Thread Kernel --->”,进入后再和对应的Kconfig文件比较下,如下图6所示,左边的代码就和右边的menuconfig配置界面对应上了。其他的Kconfig文件也是一样的套路,下面就不再一一分析了。
注: 有Kconfig的目录都可以使用ENV来配置,但不推荐,建议在顶层Kconfig目录下使用ENV来配置RT-Thread。