当前位置: 首页 > news >正文

Linux内核配置Kconfig

Kconfig作用

Kconfig文件用来控制内核的编译动作。简单理解,就是Kconfig配置了哪些文件需要参与编译,哪些文件不用编译。

rtconfig.h 完整说明
核心作用
它是 RT-Thread 操作系统的「编译开关总头文件」,本质是把 menuconfig 图形化配置结果即 .config ,转换成 C 语言可识别的宏定义(#define xxx_xxx),给源码做条件编译裁剪。

Kconfig配置方法

第一步:配置Kconfig

# driver目录下创建空目录mkdirdriver/test# 在test目录下创建Kconfig空文件viKconfig

Kconfig中添加内容如下:

config TEST bool"Test driver"help this isfortest

这里定义了一个 TEST 的句柄,Kconfig可以通过这个句柄来控制在Makefile中是否编译,”Test driver”是显示在终端的名称。

第二步:配置Makefile

在上面新建的Kconfig同级目录下新建Makefiel文件

viMakefile

填写以下内容:

obj-$(CONFIG_TEST)+=test.o
obj - $(CONFIG_选项名) += xxx.o 当CONFIG_选项名=n时,表示对应目录下的xxx.c不参与编译 当CONFIG_选项名=y时,表示对应目录下的xxx.c将被编译进内核 当CONFIG_选项名=m时,表示对应目录下的xxx.c将被编译成一个.ko模块

第三步:配置上层目录的Kconfig和Makefile

上层Kconfig添加如下:

menu"Device Driver"source"driver/test/Kconfig"

表示将test目录下的Kconfig加入搜寻目录。

上层目录Makefile添加内容如下:

obj-y+=test/

表示将test目录下的Makefile加入编译队列中。

根目录执行 make menuconfig 查看结果:

Kconfig语法

config 定义了一组新的配置选项

示例属性讲解:

config ARCH_AIROHA bool"选项名"depends on ARCH_MULTI_V7 select ARM_AMBAdefaultn help SupportforAiroha EN7523 SoCs
  • config 表示一个配置选项的开始,紧跟着的 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 语句将多个类似的配置选项组合在一起,供用户选择一组配置项

menu"Hardware Drivers Config"menuconfig BSP_USING_ONCHIP_RTC bool"Enable RTC"select RT_USING_RTC select RT_USING_LIBCdefaultnifBSP_USING_ONCHIP_RTC choice prompt"Select clock source"defaultBSP_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 语句出现在界面的第一行,用于定义一些提示信息。

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_UART2defaultn endmenu

source 语句

source 语句用于读取另一个文件中的 Kconfig 文件,如:

source"../libraries/HAL_Drivers/Kconfig"

上述语句用于读取当前 Kconfig 文件所在路径的上一级文件夹 libraries/HAL_Drivers 下的 Kconfig 文件。

menu/endmenu 语句

menu 语句用于生成菜单。

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_UART2defaultn config BSP_USING_COM3 bool"Enable COM3 (uart3 pin conflict with Ethernet)"select BSP_USING_UART3defaultn endmenu

menu 之后的字符串是菜单名。menu 和 endmenu 间有很多 config 语句。

if/endif 语句

if/endif 语句是一个条件判断,定义了一个 if 结构,示例代码如下

menu"Hardware Drivers Config"menuconfig BSP_USING_CAN bool"Enable CAN"defaultn select RT_USING_CANifBSP_USING_CAN config BSP_USING_CAN1 bool"Enable CAN1"defaultn endif endmenu

当没有选中 "Enable CAN " 选项时,下面通过 if 判断的 Enable CAN1 选项并不会显示出来。

menuconfig 语句

menuconfig 语句表示带菜单的配置项

menu"Hardware Drivers Config"menuconfig BSP_USING_UART bool"Enable UART"defaulty select RT_USING_SERIALifBSP_USING_UART config BSP_USING_UART1 bool"Enable UART1"defaulty config BSP_UART1_RX_USING_DMA bool"Enable UART1 RX DMA"depends on BSP_USING_UART1&&RT_SERIAL_USING_DMAdefaultn endif endmenu

menuconfig 这个语句和 config 语句很相似,但它在 config 的基础上要求所有的子选项作为独立的行显示。

总结

参考文章
https://blog.csdn.net/Pz_z1/article/details/125811780
语法:
https://blog.csdn.net/c_hnie/article/details/109393488

http://www.jsqmd.com/news/1159112/

相关文章:

  • 突破边界,智连未来—易连EDI—EasyLink全新MFT(可管理文件传输)重磅发布
  • 超越引擎封装:深度集成PhysX SDK实现高性能物理模拟
  • Kali Linux 2026实战指南:虚拟机环境搭建与网络配置详解
  • 终极免费字幕编辑指南:Subtitle Edit 让你的字幕制作效率翻倍
  • Revit 2024模型轻量化实战:5步将BIM转换为Web端数字孪生应用
  • 为什么现有基础设施扛不住?
  • 用 Hermes Agent 搭建成熟工作流:从聊天机器人到自动化团队
  • BarTender超授权的处理方法
  • Verilog 有符号数运算避坑指南:3个混合运算场景与$signed()函数实战
  • FastAPI构建生产级AI应用网关实战指南
  • 计算机毕业设计之婚庆管理系统
  • 适配知网 / 维普查重:专科/本科/硕士/博士通用 AI 辅助写作工具实测测评
  • 射频开关与衰减器测试——插损、隔离度、切换时间如何准确测量
  • Apache Shiro 3.0.0 版本发布:带来新特性与重大变更,1.x 和 2.x 版本停用!
  • AI编程实战:用Claude Code复刻经典扫雷游戏
  • 山东大学2025-2026-2编译原理期末回忆版
  • 跨境独立站从零到上线全流程技术选型记录:域名、服务器、支付、物流模块逐一拆解
  • GPT-4o全解析:原生多模态模型原理、API接入与实战应用
  • 尚鼎防潮柜分析:三核EtherCAT实时控制MCU/DSP发展趋势
  • AI重塑IT就业:印度招聘数据揭示技术转型与技能升级路径
  • AI系统价值导向:真理、好奇与美的工程实践
  • Linux内核模块开发从零到一:编写你的第一个内核模块,超详细教程
  • 基于MVVM框架的XUUI HelloWorld 新手教程
  • 跟大模型对话,如何让提示词控制力更强?从随缘输出到精准可控完整指南
  • 无需安装WPS 和 Office!开源 OfficeCLI,Claude/Copilot 可直接调用,自动生成编辑Word/PPT/Excel
  • 74LS151 vs 74LS138 数据手册精读:5 个关键参数对比与 3 种典型应用电路
  • 高校后勤精细化革新:智能锁赋能校园安防管控与节能运维升级
  • Calibre繁简中文转换插件:让全球中文电子书无障碍阅读
  • 九号控制器二次开发全解析:从协议逆向到功能实现
  • 信创框架 IIAF-ADM 架构开发方法:3个核心步骤与2大策略实践解析