news 2026/4/16 19:33:54

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/4/16 12:59:47

数据结构解释

一句话:数据结构 “数据在计算机里怎么放、怎么找、怎么增删改” 的一套方法论。一、生活类比 书架按“编号→书”就是 数组——随便抽第 n 本只要一步。衣柜挂衣服是 链表——想加一件只需挂上去,不用整体搬家。文件夹层层嵌套是 树——从根到叶的一条…

作者头像 李华
网站建设 2026/4/15 21:56:00

7大AI岗位,哪些最有前景?

根据脉脉的调研数据显示:2025年AI相关岗位招聘量增加10倍,而求职人数增加了11倍! 也就是说越来越多的企业、个人意识到AI的价值,都要转型到这个领域。 但是很多求职者都知道AI行业机会大,但具体到“哪个岗位值得去”“…

作者头像 李华
网站建设 2026/4/16 12:02:18

TensorFlow-v2.9镜像安装全攻略:轻松配置GPU开发环境

TensorFlow-v2.9镜像安装全攻略:轻松配置GPU开发环境 在深度学习项目中,最让人头疼的往往不是模型设计本身,而是环境搭建——明明代码写得没问题,运行时却报出 libcudart.so not found 或 “CUDA driver version is insufficient”…

作者头像 李华
网站建设 2026/4/16 9:36:30

2025最新!专科生必看8个AI论文平台测评,开题报告神器推荐

2025最新!专科生必看8个AI论文平台测评,开题报告神器推荐 2025年专科生AI论文平台测评:为何需要这份权威榜单? 随着人工智能技术的快速发展,AI论文写作工具已成为许多专科生完成毕业论文、开题报告的重要辅助。然而&am…

作者头像 李华
网站建设 2026/4/16 12:03:21

收藏!AI智能体五大核心模式全解析,程序员必学的大模型进阶指南

本文系统拆解AI智能体的五大主流核心模式:具备自省纠错能力的反思模式、突破自身局限的工具调用模式、实现知行合一的推理-行动闭环、高效拆解复杂任务的规划分解模式,以及模拟社会化协作的多智能体协作模式。这些模式是推动AI从"被动工具"向&…

作者头像 李华