Kconfig作用Kconfig文件用来控制内核的编译动作。简单理解就是Kconfig配置了哪些文件需要参与编译哪些文件不用编译。rtconfig.h 完整说明核心作用它是 RT-Thread 操作系统的「编译开关总头文件」本质是把 menuconfig 图形化配置结果即 .config 转换成 C 语言可识别的宏定义#define xxx_xxx给源码做条件编译裁剪。Kconfig配置方法第一步配置Kconfig# driver目录下创建空目录mkdirdriver/test# 在test目录下创建Kconfig空文件viKconfigKconfig中添加内容如下config TEST boolTest driverhelp this isfortest这里定义了一个 TEST 的句柄Kconfig可以通过这个句柄来控制在Makefile中是否编译”Test driver”是显示在终端的名称。第二步配置Makefile在上面新建的Kconfig同级目录下新建Makefiel文件viMakefile填写以下内容obj-$(CONFIG_TEST)test.oobj - $(CONFIG_选项名) xxx.o 当CONFIG_选项名n时表示对应目录下的xxx.c不参与编译 当CONFIG_选项名y时表示对应目录下的xxx.c将被编译进内核 当CONFIG_选项名m时表示对应目录下的xxx.c将被编译成一个.ko模块第三步配置上层目录的Kconfig和Makefile上层Kconfig添加如下menuDevice Driversourcedriver/test/Kconfig表示将test目录下的Kconfig加入搜寻目录。上层目录Makefile添加内容如下obj-ytest/表示将test目录下的Makefile加入编译队列中。根目录执行 make menuconfig 查看结果Kconfig语法config 定义了一组新的配置选项示例属性讲解config ARCH_AIROHA bool选项名depends on ARCH_MULTI_V7 select ARM_AMBAdefaultn help SupportforAiroha EN7523 SoCsconfig 表示一个配置选项的开始紧跟着的 ARCH_AIROHA 是配置选项的名称config 下面几行定义了该配置选项的属性。bool 表示配置选项的类型每个 config 菜单项都要有类型定义变量有5种类型bool 布尔类型布尔类型变量的取值范围是 y/n tristate 三态类型三态类型变量的取值范围是 y、n 和 m。tristate 代表在内核中有三种状态一种是不选中一种是选中直接编译进内核还有一种是 m 手动添加驱动而布尔类型变量只有两种状态即选中和不选中。其使用方法和布尔类型变量类似。 string 字符串字符串变量的默认值是一个字符串 hex 十六进制十六进制类型变量的取值范围是一个十六进制的数其使用方法和整型变量用法一致整型变量生成的是十进制的数而十六进制生成的是十六进制的数。 int 整型整型变量的取值范围是一个整型的数select 是反向依赖关系的意思即当前配置选项被选中则 ARM_AMBA 就会被选中。default 表示配置选项的默认值bool 类型的默认值可以是 y/n。help 帮助信息上面的帮助信息内容为 Support for Airoha EN7523 SoCs 。depends on 表示依赖某个配置选项depends on BSP_USING_UART1 RT_SERIAL_USING_DMA 表示只有当 BSP_USING_UART1 和 RT_SERIAL_USING_DMA 配置选项同时被选中时当前配置选项的提示信息才会出现才能设置当前配置选项choice/endchoice 语句choice 语句将多个类似的配置选项组合在一起供用户选择一组配置项menuHardware Drivers Configmenuconfig BSP_USING_ONCHIP_RTC boolEnable RTCselect RT_USING_RTC select RT_USING_LIBCdefaultnifBSP_USING_ONCHIP_RTC choice promptSelect clock sourcedefaultBSP_RTC_USING_LSE config BSP_RTC_USING_LSE boolRTC USING LSEconfig BSP_RTC_USING_LSI boolRTC USING LSIendchoice endif endmenuprompt 给出提示信息光标选中后回车进入就可以看到多个 config 条目定义的配置选项choice/endchoice 给出选择项中间可以定义多个配置项供选择但是在配置界面只能选择一个配置项。comment 语句comment 语句出现在界面的第一行用于定义一些提示信息。menuHardware Drivers Configcommentuart2 pin conflict with Ethernet and PWMconfig BSP_USING_COM2 boolEnable COM2select BSP_USING_UART select BSP_USING_UART2defaultn endmenusource 语句source 语句用于读取另一个文件中的 Kconfig 文件如source../libraries/HAL_Drivers/Kconfig上述语句用于读取当前 Kconfig 文件所在路径的上一级文件夹 libraries/HAL_Drivers 下的 Kconfig 文件。menu/endmenu 语句menu 语句用于生成菜单。menuHardware Drivers Configconfig BSP_USING_COM2 boolEnable COM2 (uart2 pin conflict with Ethernet and PWM)select BSP_USING_UART select BSP_USING_UART2defaultn config BSP_USING_COM3 boolEnable COM3 (uart3 pin conflict with Ethernet)select BSP_USING_UART3defaultn endmenumenu 之后的字符串是菜单名。menu 和 endmenu 间有很多 config 语句。if/endif 语句if/endif 语句是一个条件判断定义了一个 if 结构示例代码如下menuHardware Drivers Configmenuconfig BSP_USING_CAN boolEnable CANdefaultn select RT_USING_CANifBSP_USING_CAN config BSP_USING_CAN1 boolEnable CAN1defaultn endif endmenu当没有选中 Enable CAN 选项时下面通过 if 判断的 Enable CAN1 选项并不会显示出来。menuconfig 语句menuconfig 语句表示带菜单的配置项menuHardware Drivers Configmenuconfig BSP_USING_UART boolEnable UARTdefaulty select RT_USING_SERIALifBSP_USING_UART config BSP_USING_UART1 boolEnable UART1defaulty config BSP_UART1_RX_USING_DMA boolEnable UART1 RX DMAdepends on BSP_USING_UART1RT_SERIAL_USING_DMAdefaultn endif endmenumenuconfig 这个语句和 config 语句很相似但它在 config 的基础上要求所有的子选项作为独立的行显示。总结参考文章https://blog.csdn.net/Pz_z1/article/details/125811780语法https://blog.csdn.net/c_hnie/article/details/109393488