news 2026/2/28 6:07:23

2.make menuconfig

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2.make menuconfig

1.概述

内核源码的顶层目录下,输入命令make menuconfig。(无论什么linux源代码,还是安卓源代码)

这个图像化界面可以配置将驱动编译进内核,也可以配置不将这个驱动编译进内核。

打开图形化配置界面前,先设置环境变量,确定平台的类型。

export ARCH=arm64

2.打不开menuconfig的常见问题

常见打不来图形界面的问题:

1.没有安装ncurses

2.终端的窗口太小

3.没有在内核顶层源码路径下输入make menuconfig

3.界面操作

驱动状态:

将驱动编译成模块 ,用M表示

将驱动编译到内核中,用*表示

不编译

使用空格切换

搜索:/

跟rtthread的menuconfig操作一样。其实linux驱动开发和单片机的驱动开发方式,跟硬件相关的,一模一样。

4.容易困扰的一个问题

如果要将驱动编译到内核中,源码的位置一定在驱动文件夹中

而如果只是将驱动编译成模块,源码位置可以自己修改

准确结论

  1. 驱动编译到内核中(内置编译,y选项)

    • 源码建议 / 通常放在内核源码树的驱动文件夹中(如drivers/char/drivers/misc/等),而非 “必须”—— 本质是内核的KconfigMakefile要能找到源码,只要配置文件路径正确,源码也可放在内核树内其他目录,但行业惯例是按驱动类型归类到对应drivers/子目录(比如字符驱动放drivers/char/,SPI 驱动放drivers/spi/)。
    • 核心要求:必须修改内核源码树中的Kconfig(添加驱动配置项)和Makefile(添加obj-y += 驱动文件名.o),否则内核编译时无法识别该驱动。
  2. 驱动编译成模块(模块编译,m选项)

    • 源码位置完全可以自定义(比如你放在/home/workspace/driver/下),无需放入内核源码树 —— 这也是嵌入式开发中最常见的方式(避免修改内核源码树)。
    • 核心要求:只需在驱动的独立Makefile中指定内核源码路径(KERNELDIR)、架构(ARCH)、交叉编译器(CROSS_COMPILE),即可独立编译出.ko模块,无需修改内核的Kconfig/Makefile

补充关键细节(避免踩坑)

1. 内置编译(编译到内核)的实操要点

如果你要把驱动编译进内核,步骤是:

  1. 将驱动源码(如hello_drv.c)复制到内核源码树的对应驱动目录(如drivers/char/);
  2. 修改该目录下的Kconfig,添加驱动配置项:

    config

    config HELLO_DRV tristate "Hello World Driver" help A simple char driver for test.
  3. 修改该目录下的Makefile,添加:

    makefile

    obj-$(CONFIG_HELLO_DRV) += hello_drv.o
  4. 执行make menuconfig,找到HELLO_DRV选项并设为y(内置),再编译整个内核;
  5. 编译后的内核镜像(zImage/Image)会包含该驱动,启动后无需手动加载。
2. 模块编译的核心优势(为什么更常用)
  • 无需修改内核源码树,驱动源码可放在任意目录(如你的/home/workspace/driver/);
  • 编译速度快(仅编译驱动,无需编译整个内核);
  • 可动态加载 / 卸载(insmod/rmmod),调试方便;
  • 适合驱动开发阶段,迭代效率远高于内置编译

总结

  1. 驱动内置编译到内核:源码 “惯例上” 放在内核drivers/子目录(便于管理),核心是Kconfig/Makefile要能找到源码,路径可自定义但不推荐;
  2. 驱动编译为模块:源码位置完全可自定义,只需在驱动的Makefile中指定内核源码路径即可;
  3. 嵌入式开发中(如 RK356X),驱动开发阶段优先用 “模块编译”,调试完成后若需随内核启动加载,再改为 “内置编译”。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/8 3:29:50

CTF选手的一站式工具箱:核心分类、实战指南与资源直达

文中介绍的所有工具,均在压缩包中,结合本文更便于大家下载使用,快速上手。 CTF比赛必备常用工具 一、什么是CTF二、比赛中工具的重要性三、常用MISC(杂项)工具 1. Audacity (提取莫斯密码辅助工具&#xff…

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

从理论到落地:网络安全核心概念解读与标准合规建设步骤详解

网络安全概念及规范 1.网络安全定义 网络安全的概述和发展历史 网络安全 广义的网络安全:Cyber Security(网络空间安全) 网络空间有独立且相互依存的信息基础设施和网络组成,包括互联网、电信网、计算机系统、嵌入式处理器和控制…

作者头像 李华
网站建设 2026/2/19 14:16:50

构筑企业护城河:信息系统安全中必须掌握的七大防范技术与实践

伴随着互联网的发展,它已经成为我们生活中不可或缺的存在,无论是个人还是企业,都离不开互联网。正因为互联网得到了重视,网络安全问题也随之加剧,给我们的信息安全造成严重威胁,而想要有效规避这些风险&…

作者头像 李华
网站建设 2026/2/27 10:03:38

写可靠安全的 CUDA 代码:编码规范 + 自动化检查的“双保险”

写可靠安全的 CUDA 代码:编码规范 自动化检查的“双保险” 大家好!GPU 编程越来越火,尤其在自动驾驶、医疗机器人、工业自动化这些安全关键领域,CUDA 代码一旦出 bug,可能后果很严重。NVIDIA 最近发布了官方的 CUDA …

作者头像 李华
网站建设 2026/2/28 14:14:19

Python自动整理音乐文件:按艺术家和专辑分类歌曲

一、音乐文件管理的痛点与解决方案现代音乐收藏常面临杂乱无章的问题:同一艺术家的歌曲散落在不同文件夹,专辑被错误命名,甚至文件标签信息缺失。手动整理上千首音乐既耗时又容易出错。本文将介绍如何用Python编写自动化脚本,通过…

作者头像 李华
网站建设 2026/2/25 16:13:06

SSH免密码登录简化TensorFlow镜像运维操作

SSH免密码登录简化TensorFlow镜像运维操作 在深度学习项目中,工程师常常面临一个看似简单却极其烦琐的问题:如何高效、安全地访问远程GPU服务器上的开发环境?尤其是在需要频繁调试模型、同步数据或运行自动化任务时,每次连接都要输…

作者头像 李华