本文主要記錄下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。