news 2026/5/30 16:40:15

3.与menuconfig有关的文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3.与menuconfig有关的文件

make menuconfig相关的文件,这些文件是内核配置的基础,决定了 menuconfig 界面能看到哪些选项、选项对应什么逻辑,以及配置最终如何生效。

一、menuconfig 核心关联文件(按优先级 / 重要性排序)

1..config- 内核配置的 “最终产物”(最核心)
  • 作用make menuconfig配置完成后,所有选中的选项(y/m/n)都会保存到内核源码根目录的.config文件中,内核编译时直接读取这个文件判断要编译哪些功能 / 驱动。
  • 特点
    • 文本文件,每行格式为CONFIG_XXX=y/m/ny= 内置,m= 模块,n= 不编译);
    • 驱动开发中,你可以直接修改.config替代menuconfig(比如手动加CONFIG_HELLO_DRV=y),但推荐用menuconfig避免语法错误;
    • 示例(你的 hello_drv 驱动):

      bash

      运行

      # 打开.config,添加或修改 CONFIG_HELLO_DRV=m # 编译为模块 # 或 CONFIG_HELLO_DRV=y # 编译到内核
2.Kconfig- menuconfig 界面的 “定义文件”(界面渲染核心)
  • 作用:内核源码中每个目录下的Kconfig定义了该目录下功能 / 驱动的配置选项(名称、说明、依赖关系、默认值等),menuconfig的可视化界面完全由所有Kconfig拼接而成。
  • 核心语法

    config

    # 示例:在drivers/char/Kconfig中添加你的驱动选项 menu "Character devices" # 菜单分组(对应menuconfig里的“字符设备”菜单) config HELLO_DRV # 配置项名称(对应.config里的CONFIG_HELLO_DRV) tristate "Hello World Driver" # tristate=支持y/m/n,bool=仅y/n help # 帮助说明(menuconfig中按?可查看) A simple char driver for test. endmenu
  • 路径规律:内核源码树中每个子目录(如drivers/char/drivers/spi/arch/arm64/)都有自己的Kconfig,顶级Kconfig(内核根目录)会通过source "drivers/char/Kconfig"引入子目录的配置。
3.Makefile- 配置项与源码的 “关联文件”(编译逻辑核心)
  • 作用:每个目录下的Makefile定义了 “配置项(CONFIG_XXX)” 和 “源码文件” 的对应关系,menuconfig选好配置后,内核编译时通过Makefile决定要编译哪些.c文件。
  • 核心语法(示例)

    makefile

    # 在drivers/char/Makefile中添加 obj-$(CONFIG_HELLO_DRV) += hello_drv.o # 关键! # 逻辑: # CONFIG_HELLO_DRV=y → obj-y += hello_drv.o(编译到内核) # CONFIG_HELLO_DRV=m → obj-m += hello_drv.o(编译为模块) # CONFIG_HELLO_DRV=n → 不编译
4.defconfig- 默认配置文件(快速初始化.config)
  • 作用:内核为不同架构 / 开发板提供的默认配置模板,存放在arch/$(ARCH)/configs/目录下(如 ARM64 对应arch/arm64/configs/),执行make xxx_defconfig会基于该文件生成.config
  • 实操(RK356X 场景)

    bash

    运行

    # 基于RK356X的默认配置生成.config make rk356x_defconfig # 再执行menuconfig微调 make menuconfig
5.scripts/kconfig/- menuconfig 的 “工具源码”
  • 作用:存放menuconfig工具本身的源码(如mconf.c),编译内核时会先构建这个工具,才能运行make menuconfig
  • 依赖:运行make menuconfig需先安装 ncurses 库(否则报错):

    bash

    运行

    sudo apt install libncurses5-dev libncursesw5-dev

二、menuconfig 操作与文件的关联流程

  1. 修改目录下的Kconfig
  2. 添加驱动配置项
  3. 执行make menuconfig
  4. 在界面中选择y/m/n
  5. 保存生成.config
  6. 目录Makefile关联CONFIG_XXX和源码
  7. 内核编译时读取.config和Makefile
  8. 编译出对应内核/模块

三、实操(嵌入式驱动开发)

  1. 添加自定义驱动到 menuconfig

    • 步骤 1:将驱动源码放到drivers/char/hello_drv.c
    • 步骤 2:修改drivers/char/Kconfig添加配置项;
    • 步骤 3:修改drivers/char/Makefile关联配置项和源码;
    • 步骤 4:make menuconfig→ 字符设备菜单中找到并选择驱动;
    • 步骤 5:保存.config后编译内核 / 模块。
  2. 恢复默认配置

    bash

    运行

    make distclean # 清空.config、编译产物等(谨慎用) make xxx_defconfig # 重新生成默认.config
  3. .config 与开发板匹配:嵌入式开发中(如 RK356X),必须先执行make rk356x_defconfig生成对应开发板的.config,再用menuconfig微调,否则配置会不兼容。

总结

  1. Kconfig定义 menuconfig 界面的选项和菜单结构Makefile关联选项与源码编译逻辑.config是最终的配置结果
  2. defconfig是开发板的默认配置模板,用于快速初始化.config
  3. 新增驱动到 menuconfig 的核心是:改Kconfig加选项 + 改Makefile关联源码,再通过menuconfig选择并保存到.config
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 10:44:26

Conda+TensorFlow-v2.9:科学计算环境的最佳搭配

Conda TensorFlow-v2.9:构建高效、稳定的科学计算环境 在人工智能项目日益复杂的今天,一个常见但令人头疼的问题是:“为什么这段代码在我本地能跑,在服务器上却报错?”更典型的情况是,团队成员因为 NumPy …

作者头像 李华
网站建设 2026/5/29 1:40:01

HTML5 Audio API结合TensorFlow语音识别应用

HTML5 Audio API结合TensorFlow语音识别应用 在智能交互日益普及的今天,用户对“动口不动手”的操作体验提出了更高要求。从语音助手到在线教育中的口语测评,语音识别技术正快速渗透进各类Web应用场景。然而,传统方案往往依赖客户端插件或原生…

作者头像 李华
网站建设 2026/5/25 20:10:25

【Rust + Qt开发新范式】:掌握cxx-qt实现双向绑定的7个核心步骤

第一章:Rust Qt融合开发的新范式在现代桌面应用开发中,性能与安全成为关键诉求。Rust 以其内存安全和零成本抽象的特性,逐渐被引入传统 GUI 框架生态。结合 Qt 强大的跨平台 UI 能力,Rust Qt 的融合为高性能桌面应用开辟了新路径…

作者头像 李华
网站建设 2026/5/29 18:48:20

从回调地狱到优雅链式调用:C++26 std::future的进化之路

第一章:从回调地狱到优雅链式调用:C26 std::future的进化之路在异步编程的发展历程中,C 的 std::future 一直扮演着关键角色。早期版本虽支持基本的异步获取,但面对复杂依赖链时,开发者不得不嵌套多层回调,…

作者头像 李华
网站建设 2026/5/24 0:46:20

DiskInfo下载官网不可用时的五大替代方案(适用于GPU服务器)

DiskInfo下载官网不可用时的五大替代方案(适用于GPU服务器) 在AI研发一线摸爬滚打过的工程师都清楚,一个稳定的深度学习环境有多重要。想象一下:你刚申请到一台新的GPU服务器,满心期待地准备跑模型,结果发现…

作者头像 李华