news 2026/4/18 7:04:25

4.kconfig语法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
4.kconfig语法

Kconfig本质是内核配置菜单的 “描述语言”,语法简洁但有明确的规则。

一、Kconfig 核心语法规则(基础必懂)

1. 注释
  • 单行注释:用#开头(和 Shell/Makefile 一致);
  • 无多行注释,多行需每行加#

config

# 这是注释:定义字符设备驱动配置项 config HELLO_DRV tristate "Hello World Driver"
2. 大小写敏感
  • 配置项名称(如CONFIG_HELLO_DRV严格区分大小写,建议全大写 + 下划线(行业惯例);
  • 关键字(如configtristatemenu小写,是固定语法。
3. 缩进规则
  • 子项(如tristatehelpdepends on)需缩进(通常 4 个空格,不要用 Tab);
  • 同一层级的选项缩进一致,保证可读性。

二、Kconfig 核心关键字(按使用频率排序)

1.config- 定义单个配置项(最核心)
  • 作用:声明一个配置项(对应.config中的CONFIG_XXX),是所有驱动 / 功能配置的基础;

  • 格式:config 配置项名称+ 缩进的属性(类型、描述、依赖等);

  • 类型(必选):

    类型含义对应.config 值适用场景
    tristate三态(内置 / 模块 / 不编译)y/m/n驱动(支持编译为模块)
    bool布尔(启用 / 禁用)y/n内核功能(不支持模块)
    string字符串值自定义字符串如设备树路径、版本号
    int整数值数字如缓冲区大小、超时时间
    hex十六进制值十六进制数如寄存器地址、掩码
  • 示例(三态驱动配置项):

config

config HELLO_DRV tristate "Hello World Character Driver" # 界面显示的名称 help # 帮助说明(可选但推荐) This is a simple char driver for RK356X platform. Say Y/M to compile it into kernel/module, N to disable.
2.menu/endmenu- 定义菜单分组
  • 作用:将相关配置项归类到一个可视化菜单中(menuconfig界面中可展开 / 折叠);
  • 格式:menu "菜单名称"+ 缩进的配置项 +endmenu
  • 示例(字符设备菜单):

config

menu "Character devices" # menuconfig中显示的菜单名 config HELLO_DRV tristate "Hello World Driver" help Simple char driver test. config TTY bool "Enable TTY support" default y endmenu # 结束菜单分组
3.depends on- 配置项依赖(条件限制)
  • 作用:限制配置项的显示 / 可选性,只有依赖条件满足时,该配置项才会出现在menuconfig中;
  • 格式:depends on 条件(条件可多个,用&&/||连接);
  • 示例(仅 ARM64 架构可见):

config

config HELLO_DRV tristate "Hello World Driver" depends on ARCH_ROCKCHIP && ARM64 # 仅RK356X(ROCKCHIP)+ ARM64架构可见 help Driver for RK356X ARM64 platform.
4.default- 设置默认值
  • 作用:指定配置项的默认值(无需手动选择时的默认状态);
  • 格式:default 值 [if 条件](条件可选);
  • 示例:

config

config HELLO_DRV tristate "Hello World Driver" depends on ARM64 default m if ARCH_ROCKCHIP # RK架构默认编译为模块 default n # 其他架构默认不编译
5.select- 强制选中依赖项
  • 作用:当当前配置项被选中(y/m)时,强制将另一个配置项设为y(单向依赖);
  • 格式:select 被依赖的配置项
  • 示例(选驱动时强制启用字符设备核心):

config

config HELLO_DRV tristate "Hello World Driver" depends on ARM64 select CHR_DEV # 选中HELLO_DRV时,CHR_DEV自动设为y
6.prompt- 自定义界面显示名称
  • 作用:替代tristate/bool后的字符串,单独定义菜单中显示的名称(等价写法,可选);
  • 示例:

config

config HELLO_DRV tristate prompt "Hello World Driver" # 和直接写tristate "xxx"效果一致 default m
7.source- 引入其他 Kconfig 文件
  • 作用:在当前 Kconfig 中引入子目录的 Kconfig,实现配置项的分层管理(内核核心机制);
  • 格式:source "路径/文件名"
  • 示例(内核根目录 Kconfig 引入字符设备配置):

config

# 内核根目录 Kconfig source "drivers/char/Kconfig" # 加载字符设备目录的Kconfig source "drivers/spi/Kconfig" # 加载SPI驱动目录的Kconfig
8.choice/endchoice- 单选菜单
  • 作用:创建互斥的单选选项(只能选其中一个);
  • 格式:choice+ 缩进的config(仅bool/tristate) +endchoice
  • 示例(驱动模式选择):

config

choice prompt "Hello Driver Mode" default HELLO_DRV_NORMAL config HELLO_DRV_NORMAL bool "Normal Mode" config HELLO_DRV_DEBUG bool "Debug Mode" endchoice

三、实战示例(RK356X 驱动的 Kconfig 完整写法)

以下是适配你场景的完整Kconfig片段(放在drivers/char/Kconfig中):

config

# 字符设备菜单下添加自定义驱动 menu "Character devices" # 自定义驱动配置项 config HELLO_DRV tristate "Hello World Driver for RK356X" depends on ARCH_ROCKCHIP && ARM64 # 仅RK356X ARM64可见 default m # 默认编译为模块 select CHR_DEV # 依赖字符设备核心 help This is a simple character driver for Rockchip RK356X platform. If you want to compile it as a module, choose M (recommended), compile into kernel choose Y, or N to disable. endmenu

四、语法校验与常见坑

  1. 校验方法:修改 Kconfig 后执行make menuconfig,若界面能正常打开且配置项显示,说明语法无错;若报错syntax error,检查缩进 / 关键字拼写。
  2. 常见错误
    • 缩进用 Tab 而非空格(内核要求空格);
    • depends on后条件写错(如ARCH_RK356X写成RK356X);
    • 三态配置项用bool类型(导致无法编译为模块)。

总结

  1. Kconfig核心是通过config定义配置项,用menu分组,depends on做条件限制,default设默认值;
  2. 驱动开发中最常用的是tristate类型(支持模块编译)+depends on(匹配开发板架构);
  3. 关键语法:配置项名称大写、子项缩进 4 空格、依赖条件匹配开发板(如ARCH_ROCKCHIP)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:36:10

一文读懂AI Agent:不是只会聊天,而是能帮你搞定事儿的智能助手

一文读懂AI Agent:不是只会聊天,而是能帮你搞定事儿的智能助手 最近“Agent”这个词可能大家也有刷到过,不少大厂也专门推出了快速搭建Agent的智能平台。可能不少人听着觉得高深莫测,其实它早已悄悄融入我们的生活。今天就简单拆解…

作者头像 李华
网站建设 2026/4/18 1:34:03

transformer模型详解之掩码机制实现细节

Transformer 模型中的掩码机制:从原理到 TensorFlow 实战 在现代自然语言处理系统中,Transformer 已经成为事实上的标准架构。它不再依赖 RNN 的时序递归,而是通过自注意力机制实现全局上下文建模——这种设计带来了极强的并行能力与长距离依…

作者头像 李华
网站建设 2026/4/17 22:25:48

transformer模型详解输入嵌入层的设计原理

Transformer模型输入嵌入层设计原理深度解析 在自然语言处理迈向大规模预训练时代的过程中,Transformer 架构无疑扮演了核心角色。从 BERT 到 GPT 系列,再到如今的大模型浪潮,其底层结构始终围绕着“如何有效表示文本”这一基本问题展开。而整…

作者头像 李华
网站建设 2026/4/18 1:38:37

为什么顶级团队都在用cxx-qt?深度剖析C++与Rust互操作的未来趋势

第一章:为什么顶级团队都在用cxx-qt?在现代高性能桌面应用开发中,越来越多的顶级技术团队选择 cxx-qt 作为其核心框架。它不仅融合了 C 的高效性与 Qt 的跨平台能力,还通过 Rust 的内存安全机制显著提升了开发可靠性。无缝集成 C …

作者头像 李华
网站建设 2026/4/18 1:34:34

PyTorch安装教程GPU与CUDA版本对应关系

PyTorch安装与GPU加速:深入理解CUDA版本兼容性 在现代深度学习开发中,一个看似简单却常令人抓狂的问题是——为什么 torch.cuda.is_available() 返回了 False?明明装了NVIDIA显卡、也更新了驱动,可PyTorch就是无法调用GPU。这种“…

作者头像 李华
网站建设 2026/4/17 22:04:19

【C++异步网络架构设计】:手把手教你重构千万级连接系统

第一章:C异步网络架构重构概述在现代高性能服务器开发中,C异步网络架构的重构已成为提升系统吞吐量与响应速度的关键手段。传统的同步阻塞I/O模型难以应对高并发场景,而基于事件驱动的异步架构通过非阻塞I/O和回调机制,显著降低了…

作者头像 李华