news 2026/2/22 15:30:23

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/2/21 22:49:57

DiskInfo监控SSD寿命:保障GPU训练稳定性

DiskInfo监控SSD寿命:保障GPU训练稳定性 在现代深度学习系统中,一次大规模模型训练可能持续数天甚至数周。你有没有经历过这样的场景:训练到第80个epoch时,突然I/O错误频发,checkpoint保存失败,日志显示“d…

作者头像 李华
网站建设 2026/2/5 15:28:50

Conda install与pip install混合使用注意事项

Conda 与 Pip 混合使用:在深度学习环境中如何避免“环境地狱” 在一场深夜的模型训练中,你兴冲冲地拉起一个预配置的 TensorFlow-v2.9 深度学习镜像,准备复现一篇新论文。Jupyter 启动顺利,GPU 也检测到了——一切看起来都完美。但…

作者头像 李华
网站建设 2026/2/14 18:09:51

【AI推理效率提升300%】:基于C++的分布式任务调度优化全解析

第一章:AI推理效率提升300%的核心挑战在追求AI推理效率提升300%的目标过程中,开发者面临多重技术瓶颈。尽管硬件算力持续升级,算法优化与系统协同仍存在显著断层,导致实际性能远未达到理论峰值。内存带宽瓶颈 现代深度学习模型对内…

作者头像 李华
网站建设 2026/2/9 6:52:26

Git Remote添加多个仓库同步TensorFlow项目

Git Remote添加多个仓库同步TensorFlow项目 在深度学习项目的实际开发中,一个常见的痛点是:你在本地调试好的模型,在同事的机器上跑不起来;或者训练脚本在云服务器上因环境差异而报错。更糟的是,某次关键提交只推到了 …

作者头像 李华
网站建设 2026/2/19 20:09:15

歌曲文件转换,mgg文件如何转换程ogg,再转换到mp3

发现最新的mgg文件使用ffmpeg无法转换到ogg,更不能转换程mp3通用的音频文件了,所以查找资料,发现必须使用老版本的qqmusic才可以。 所以下载19.51版本的qq music。 之后开会员,下载音乐到本地。浏览本地文件夹,发现mg…

作者头像 李华
网站建设 2026/2/6 1:08:39

C++26重大更新来了,Clang 17已支持?开发者必须关注的3大变革

第一章:C26重大更新概述 C26作为ISO C标准的下一个重要版本,正在引入一系列旨在提升开发效率、增强类型安全以及优化运行时性能的语言和库特性。该版本延续了现代C对简洁性与高性能并重的设计哲学,同时针对开发者在实际项目中遇到的痛点进行了…

作者头像 李华