【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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章