news 2026/3/12 3:59:16

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/3/11 22:56:44

想提升实战能力?盘点网络安全领域那些不可错过的顶级竞技场

从零开始学CTF:网络安全竞赛完全指南,建议收藏学习 文章全面介绍网络安全竞赛,重点解析CTF比赛的概念、规则和五大类别(Web安全、逆向工程、二进制安全、密码学和隐写术),并对比了CTF比赛、信息安全比赛和…

作者头像 李华
网站建设 2026/3/9 12:20:48

C++26 constexpr进阶之路:90%开发者忽略的5个关键限制与破解方法

第一章:C26 constexpr 编译时计算的演进与定位C26 对 constexpr 的进一步扩展标志着编译时计算能力在现代 C 中的核心地位愈发稳固。该标准不仅放宽了 constexpr 函数中的运行时操作限制,还引入了对动态内存分配和异常处理的有限支持,使得更多…

作者头像 李华
网站建设 2026/3/11 12:59:20

如何将本地Git项目推送到TensorFlow-v2.9云端环境运行

如何将本地Git项目推送到TensorFlow-v2.9云端环境运行 在深度学习项目的实际开发中,一个常见的困境是:模型越做越大,训练数据越来越多,本地笔记本的GPU显存频频告急,而每次换机器都要重新配置CUDA、cuDNN、TensorFlow版…

作者头像 李华
网站建设 2026/3/11 13:48:57

Token过期怎么办?大模型API重新认证流程

Token过期怎么办?大模型API重新认证流程 在构建AI驱动的应用时,开发者常常会遇到一个看似微小却影响深远的问题:调用大模型API时,Token突然失效,任务中断。尤其是在长时间运行的批量推理、定时训练或自动化流水线中&a…

作者头像 李华
网站建设 2026/3/10 13:00:15

transformer模型详解:结合TensorFlow-v2.9实现文本生成

Transformer模型详解:结合TensorFlow-v2.9实现文本生成 在自然语言处理(NLP)飞速发展的今天,我们每天都在与智能助手、自动翻译、内容推荐等系统交互。这些系统的背后,几乎都离不开一个关键架构——Transformer。自20…

作者头像 李华
网站建设 2026/3/11 12:30:11

Transformers模型详解之Positional Encoding实现

Transformers模型详解之Positional Encoding实现 在构建现代自然语言处理系统时,我们早已告别了RNN“逐词推进”的时代。如今的Transformer架构可以在一个步骤内并行处理整段文本——这听起来像是效率的飞跃,但背后却隐藏着一个关键问题:如果…

作者头像 李华