news 2026/6/15 15:00:47

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/6/15 14:08:12

SSH KeepAlive保持TensorFlow长连接稳定

SSH KeepAlive 与 TensorFlow-v2.9 镜像:构建稳定远程深度学习开发环境 在现代 AI 开发中,越来越多的研究者和工程师依赖远程 GPU 服务器进行模型训练。一个常见的场景是:你启动了一个长达数小时的 TensorFlow 模型训练任务,通过 …

作者头像 李华
网站建设 2026/6/15 11:48:10

Transformer模型详解与TensorFlow 2.9环境搭建结合实践

Transformer模型详解与TensorFlow 2.9环境搭建结合实践 在当今AI研发的快节奏环境中,一个常见的痛点是:算法团队已经设计好了一个基于Transformer的文本生成模型,但当代码移交到部署团队时,却因为CUDA版本不兼容、TensorFlow依赖冲…

作者头像 李华
网站建设 2026/6/15 11:44:16

为什么你的C++服务扛不住高并发?异步网络重构的3个致命盲点

第一章:为什么你的C服务扛不住高并发?在构建高性能后端服务时,C常被视为首选语言,因其接近硬件的控制能力和高效的执行速度。然而,在真实生产环境中,许多C服务在面对高并发请求时仍表现出响应延迟、连接超时…

作者头像 李华
网站建设 2026/6/14 13:44:17

学长亲荐8个AI论文软件,研究生搞定毕业论文!

学长亲荐8个AI论文软件,研究生搞定毕业论文! AI 工具如何让论文写作更高效 对于研究生而言,撰写毕业论文是一项既繁琐又重要的任务。而随着 AI 技术的不断发展,越来越多的工具开始被应用于学术写作中,帮助学生提高效率…

作者头像 李华
网站建设 2026/6/15 11:50:18

Rust如何安全暴露API给C++?(基于cxx-qt的最佳实践全披露)

第一章:Rust如何安全暴露API给C?——基于cxx-qt的全景解析在跨语言开发中,Rust与C的互操作性始终是高性能桌面应用的关键挑战。cxx-qt框架通过结合Rust的安全性与Qt的GUI能力,提供了一种类型安全、内存安全的机制,用于…

作者头像 李华