RT-Thread Kconfig结构

本文主要记录下RT-Thread的Kconfig文件依赖关系,就像分析makefile一样。下文以正点原子潘多拉STM32L475开发板举例,该开发板自带RTT官方的例程,便于分析,目录如下图所示。由于使用ENV不能有中文路径,所以下面的文件夹是从开发板资料中单独复制出来的。

图1  潘多拉开发板RTT例程文件结构

“顶层Kconfig”文件位于example文件夹下的具体例程下,姑且这么叫吧,因为这个Kconfig引用了其他所有的Kconfig。

图2  潘多拉开发板RTT Demo

随意打开一个例程,例如05_basic_ir,如图3所示,可以看到一个Kconfig文件。 

图3  05_basic_ir文件目录

在该目录下使用ENV工具输入menuconfig将进入一个图形配置界面,如图4所示。在这个界面下分别可以配置RT-Thread内核、组件、在线软件包、硬件驱动、额外的库。

图4  menuconfig图形配置界面

暂不深究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的引用。

图5  RT-Thread内核目录

打开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文件也是一样的套路,下面就不再一一分析了。

图6  Kconfig和对应的menuconfig配置界面

注: 有Kconfig的目录都可以使用ENV来配置,但不推荐,建议在顶层Kconfig目录下使用ENV来配置RT-Thread。

猜你喜欢

转载自blog.csdn.net/qq_27575841/article/details/106007573