Kconfig 语法
Kconfig 简介
RT-Thread 借助 Kconfig 文件生成的配置文件 rtconfig.h 来配置系统,Kconfig 文件是各种配置界面的源文件。当在 bsp 目录下使用 env 工具执行 menuconfig 命令时会出现 RT-Thread 系统的配置界面,所有配置工具都是通过读取当前 bsp 目录下的 Kconfig 文件来生成配置界面的,这个文件就是所有配置的总入口,它会包含其他目录的 Kconfig 文件。配置工具读取各个 Kconfig 文件,生成配置界面供开发人员配置系统,最终生成 RT-Thread 系统的配置文件 rtconfig.h。
Kconfig 基本语法
config 语句
config 定义了一组新的配置选项
以下为 RT-Thread 系统中 config 语句的示例
1 2 3 4 5 6 | config BSP_USING_GPIO bool "Enable GPIO" select RT_USING_PIN default y help config gpio |
以上代码对应的配置界面如下所示
对应的帮助信息界面如下所示
语句分析: - config 表示一个配置选项的开始,紧跟着的 BSP_USING_GPIO 是配置选项的名称,config 下面几行定义了该配置选项的属性。属性可以是该配置选项的 - 类型 - 输入提示 - 依赖关系 - 默认值 - 帮助信息
- bool 表示配置选项的类型,每个 config 菜单项都要有类型定义,变量有5种类型
- bool 布尔类型
- tristate 三态类型
- string 字符串
- hex 十六进制
- int 整型
- select 是反向依赖关系的意思,即当前配置选项被选中,则 RT_USING_PIN 就会被选中。
- default 表示配置选项的默认值,bool 类型的默认值可以是 y/n。
- help 帮助信息。
通过 env 选中以上配置界面的选项后,最终可在 rtconfig.h 文件中生成如下两个宏
1 2 | #define RT_USING_PIN #define BSP_USING_GPIO |
变量类型
bool 类型
布尔类型变量的取值范围是 y/n ,其使用示例如下
1 2 3 4 | config BSP_USING_WDT bool "Enable Watchdog Timer" select RT_USING_WDT default n |
上述语句对应的配置界面如下所示
以上配置项在 rtconfig.h 文件中生成的宏如下所示
1 2 | #define BSP_USING_WDT #define RT_USING_WDT |
string 类型
字符串变量的默认值是一个字符串,其使用示例如下
1 2 3 | config RT_CONSOLE_DEVICE_NAME string "the device name for console" default "uart1" |
上述语句对应的配置界面如下所示
以上配置项在 rtconfig.h 文件中生成的宏如下所示
1 | #define RT_CONSOLE_DEVICE_NAME "uart1" |
int 类型
整型变量的取值范围是一个整型的数,其使用示例如下
1 2 3 4 | config BSP_I2C1_SCL_PIN int "I2C1 scl pin number" range 1 176 default 116 |
上述语句对应的配置界面如下所示
以上配置项在 rtconfig.h 文件中生成的宏如下所示
1 | #define BSP_I2C1_SCL_PIN 116 |
hex 类型
十六进制类型变量的取值范围是一个十六进制的数,其使用方法和整型变量用法一致,整型变量生成的是十进制的数,而十六进制生成的是十六进制的数。
tristate 类型
三态类型变量的取值范围是 y、n 和 m。tristate 代表在内核中有三种状态,一种是不选中,一种是选中直接编译进内核,还有一种是 m 手动添加驱动,而布尔类型变量只有两种状态,即选中和不选中。其使用方法和布尔类型变量类似。
menu/endmenu 语句
menu 语句用于生成菜单。
以下为 RT-Thread 系统中 menu/endmenu 语句的示例
1 2 3 4 5 6 7 8 9 10 11 | menu "Hardware Drivers Config" config BSP_USING_COM2 bool "Enable COM2 (uart2 pin conflict with Ethernet and PWM)" select BSP_USING_UART select BSP_USING_UART2 default n config BSP_USING_COM3 bool "Enable COM3 (uart3 pin conflict with Ethernet)" select BSP_USING_UART3 default n endmenu |
menu 之后的字符串是菜单名。menu 和 endmenu 间有很多 config 语句,以上代码对应的配置界面如下所示
其中 Hardware Drivers Config 就是菜单名,然后进入这个菜单有 Enable COM2、Enable COM3 等选项,如下图所示
通过 env 选中以上配置界面的所有选项后,最终可在 rtconfig.h 文件中生成如下五个宏
1 2 3 4 5 | #define BSP_USING_UART #define BSP_USING_UART2 #define BSP_USING_UART3 #define BSP_USING_COM2 #define BSP_USING_COM3 |
if/endif 语句
if/endif 语句是一个条件判断,定义了一个 if 结构,示例代码如下
1 2 3 4 5 6 7 8 9 10 11 | menu "Hardware Drivers Config" menuconfig BSP_USING_CAN bool "Enable CAN" default n select RT_USING_CAN if BSP_USING_CAN config BSP_USING_CAN1 bool "Enable CAN1" default n endif endmenu |
当没有选中 "Enable CAN" 选项时,下面通过 if 判断的 Enable CAN1 选项并不会显示出来,如下图所示
当上一级菜单选中 "Enable CAN" 时
menuconfig 语句
menuconfig 语句表示带菜单的配置项
以下为 RT-Thread 系统 menuconfig 语句的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | menu "Hardware Drivers Config" menuconfig BSP_USING_UART bool "Enable UART" default y select RT_USING_SERIAL if BSP_USING_UART config BSP_USING_UART1 bool "Enable UART1" default y config BSP_UART1_RX_USING_DMA bool "Enable UART1 RX DMA" depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA default n endif endmenu |
当没有打开串口 DMA 配置时,以上代码对应的界面为
当打开串口 DMA 配置时,以上代码对应的界面为
语句分析: - menuconfig 这个语句和 config 语句很相似,但它在 config 的基础上要求所有的子选项作为独立的行显示。 - depends on 表示依赖某个配置选项,
通过 env 选中以上配置界面的所有选项后,最终可在 rtconfig.h 文件中生成如下五个宏
1 2 3 4 5 | #define RT_USING_SERIAL #define BSP_USING_UART #define BSP_USING_UART1 #define RT_SERIAL_USING_DMA #define BSP_UART1_RX_USING_DMA |
choice/endchoice 语句
choice 语句将多个类似的配置选项组合在一起,供用户选择一组配置项
RT-Thread Kconfig 文件中 choice 代码示例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | menu "Hardware Drivers Config" menuconfig BSP_USING_ONCHIP_RTC bool "Enable RTC" select RT_USING_RTC select RT_USING_LIBC default n if BSP_USING_ONCHIP_RTC choice prompt "Select clock source" default BSP_RTC_USING_LSE config BSP_RTC_USING_LSE bool "RTC USING LSE" config BSP_RTC_USING_LSI bool "RTC USING LSI" endchoice endif endmenu |
以上代码对应的配置界面为
语句解析: - prompt 给出提示信息,光标选中后回车进入就可以看到多个 config 条目定义的配置选项; - choice/endchoice 给出选择项,中间可以定义多个配置项供选择,但是在配置界面只能选择一个配置项。
comment 语句
comment 语句出现在界面的第一行,用于定义一些提示信息。
comment 代码示例如下
1 2 3 4 5 6 7 8 | menu "Hardware Drivers Config" comment "uart2 pin conflict with Ethernet and PWM" config BSP_USING_COM2 bool "Enable COM2" select BSP_USING_UART select BSP_USING_UART2 default n endmenu |
以上代码对应的配置界面为
source 语句
source 语句用于读取另一个文件中的 Kconfig 文件,如:
1 | source "../libraries/HAL_Drivers/Kconfig" |
上述语句用于读取当前 Kconfig 文件所在路径的上一级文件夹 libraries/HAL_Drivers 下的 Kconfig 文件。