Linux内核编程(八) 添加自定义目录驱动菜单 (Kconfig文件使用)

本文目录

  • 一、Linux 内核驱动目录
  • 二、自定义驱动的Kconfig编写
    • ●示例:在 drivers 菜单添加一个自己驱动的子菜单。
  • 三、自写驱动的Makefile编写
  • 四、总结

  

   一个Linux内核源码,其中包含了很多驱动程序,对应不同的功能。我们在编译内核时。如果将所有的驱动程序都编译进镜像文件中时,该镜像文件会占的内存很大。然而在公司企业中通常会使内核镜像占用内存空间尽可能的小,如裁剪掉不常用的功能,保留使用的功能即可。这时就需要菜单文件来进行选择裁剪。在linux中我们常用make menuconfig来进行图形化的方式来选择功能裁剪。完成裁剪后会生成.config文件来保存选择的配置信息。对于64位的arm架构,可以使用make menuconfig ARCH=arm64,32位的arm使用make menuconfig ARCH=arm
   源码树目录下一般都会有两个文件:Kconfig 和 Makefile。分布在各目录下的 Kconfig 构成了一个分布式的内核配置数据库,每个 Kconfig 分别描述了所属目录源文件相关的内核配置菜单。在内核配置 make menuconfig(或 xconfig 等)时,从 Kconfig 中读出配置菜单,用户配置完后保存到 .config (在顶层目录下生成) 中。 在内核编译时,主 Makefile 调用这个 .config ,就知道了用户对内核的配置情况。

在这里插入图片描述

一、Linux 内核驱动目录

   对于一个内核驱动程序,通常我们使用文件目录的形式在区分各个驱动程序。即不同的驱动程序对应不同的文件目录。定义目录位置:在内核源码的dirvers目录下。
  在dirvers目录下,包含Kconfig、Makefile、各类驱动程序目录。Kconfig 分别描述了所属目录源文件相关的内核配置菜单。 Makefile 为管理工程代码文件,决定哪些文件被编译,如何被编译,如何链接。每个驱动程序目录又包含其c文件、Kconfig、以及Makefile文件。
在这里插入图片描述
在这里插入图片描述

drivers目录下的Kconfig内容如下,这里包含了其目录下的各个驱动程序目录里的Kconfig文件。用于配置菜单。

在这里插入图片描述

二、自定义驱动的Kconfig编写

   Kconfig 就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,可以通过修改 Kconfig 来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的 Makefile。因此,一般添加新的驱动时需要修改的文件有两种(注意不只是两个):Kconfig、Makefile。要想知道怎么修改这两种文件,就要知道两种文档的语法结构。

   一般一个 Kconfig 文件表示的就是一个菜单,一个菜单由多个菜单项组成,其格式如下:

menu "Device Drivers"//具体的子项菜单
config 自定义宏名1类型 "选项描述(菜单里显示的内容,提示字符串,用给人看的)"default n  //默认状态help帮助信息..........config 自定义宏名2类型 "选项描述(菜单里显示的内容,提示字符串,用给人看的)"default y  //默认状态help帮助信息..........endmenu

在这里插入图片描述

●示例:在 drivers 菜单添加一个自己驱动的子菜单。

(1)在drivers目录下新建自己驱动的文件夹:mkdir qjl

(2)进入自己驱动的文件夹,创建Kconfig文件。
在这里插入图片描述

(3)编写Kconfig文件。

menu "QJL_dirver"config QJL_KEYbool "qjl_key_driver"default y    //默认值helpthis is a key_dirver, user is qjl.config QJL_LEDbool "qjl_led_dirver"default n   //默认值helpthis is a led_dirver, user is qjl.config QJL_LED1tristate "led1_driver"  //添加了编译为模块的形式。depends on QJL_LED   //如果QJL_LED被选上,该选项才会出现。(依赖于QJL_LED )helpthis is a led1_dirver, user is qjl.endmenu

(4)在dirver目录下的Kconfig添加自定义子菜单的Kconfig路径。
在这里插入图片描述

(5)在源码主Makefile下配置菜单。使用:make meunconfig配置,配置完成后保存退出,生成.config配置文件。
在这里插入图片描述

(6)查看.config配置文件内容。

注意:y为编译进内核、n为不编译进内核、m为编译为模块。
在这里插入图片描述

三、自写驱动的Makefile编写

   章节二中我们已经配置好哪些驱动编译进内核,哪些驱动编译为模块。本章的Makefile 使用 .config 文件的宏来裁剪 C 代码,决定哪些 C 代码被编译。我们使用.config文件中的宏定义来编写Makefile文件,这里obj-y表示编译进内核,obj-m表示编译为模块。

目录如下:
在这里插入图片描述

该目录的Makefile内容如下:

obj-$(CONFIG_QJL_KEY)     +=key_dirver.o
obj-$(CONFIG_QJL_LED1)    +=led1_dirver.o

●重要:编写完成子目录下的Makefile后,需要在dirver目录下的Makefile中添加子目录路径。这样做的目的是为了在编译时会找到子目录中的Makefile文件,从而使用顶层Makefile进行编译。
在这里插入图片描述

四、总结

本文学习了如何添加自定义驱动菜单,步骤如下:

  1. 在dirver目录下新建自己的驱动文件夹,该文件夹包含Kconfig、Makefile以及自己的驱动程序文件。
  2. 编写Kconfig和Makefile文件。按如上内容编写。
  3. 将自己目录下的Kconfig文件路径添加至上层目录的Kconfig下。
  4. 将自己目录路径添加至上层目录的Makefile下。
  5. 在源码顶层Makefile目录下,使用make menuconfig ARCH=arm64进行配置的选择,最后保存并生成.config文件。
  6. 使用make进行源码编译。如果编译64位的arm芯片,则使用make ARCH=arm64,32位使用make ARCH=arm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式:真正的建造者模式

又臭又长的set方法 经常进行Java项目开发使用各类starter的你一定见过这种代码: public class SwaggerConfig {Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any…

【BUG】已解决:ModuleNotFoundError: No module named ‘cv2’

已解决:ModuleNotFoundError: No module named ‘cv2’ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开…

基于 Web 的家校联系系统的设计与实现

目录 基于 Web 的家校联系系统的设计与实现 一、绪论 (一)研究背景 (二) 研究目的 (三) 研究意义 二、需求分析 (一) 功能需求 (二) 性能需求 &#…

开发一个自己的chrom插件

开发一个自己的chrom插件 一、创建一个文件夹 二、配置文件manifest.json 创建名字为:manifest.json的配置文件,模板如下: {"manifest_version": 3,"name": "Hello World Extension","version": …

AV1 编码标准屏幕内容编码技术概述

AV1 屏幕内容编码 为了提高屏幕捕获内容的压缩性能,AV1采用了几种编码工具,例如用于处理屏幕画面中重复模式的内帧内块复制(IntraBC),以及用于处理颜色数量有限的屏幕块的调色板模式。 帧内块拷贝 AV1 编码中的 Intra …

【Elasticsearch7.11】reindex问题

参考博文链接 问题:reindex 时出现如下问题 原因:数据量大,kibana的问题 解决方法: 将DSL命令转化成CURL命令在服务上执行 CURL命令 自动转化 curl -XPOST "http://IP:PORT/_reindex" -H Content-Type: application…

Python: 一些python和Java不同的基础语法

文章目录 1. 数据类型2. 字符串的引用3. 字符串拼接4. Python中的报错5. Python中的输入语句(input)6. 运算符(**和//)7. 除法运算8. 注释方法: #或者三引号9. Python中的比较10. Java中用and, or, not代替逻辑运算符11. 多元赋值12. Python不支持自增自减操作13. 在Python中, …

zookeeper基础知识学习

官网:Apache ZooKeeper 下载地址:Index of /dist/zookeeper/zookeeper-3.5.7Index of /dist/zookeeperIndex of /dist/zookeeper/zookeeper-3.5.7 ZK配置参数说明: 1、tickTime2000:通讯心跳时间,zookeeper服务器与客…

笑中带泪《抓娃娃》

【标题】笑中带泪,《抓娃娃》:一场关于成长的中式惊悚喜剧盛宴在这个夏日炎炎的季节里,一部名为《抓娃娃》的电影悄然上映,以沈腾与马丽的黄金搭档再次点燃观众的热情。然而,当笑声在影院回荡时,一股不易察…

搭建图片缓存服务器,解决图片访问403 Forbidden问题

在现代Web开发中,图片是网站和应用的重要组成部分。然而,有时我们在访问某些图片时会遇到403 Forbidden错误,尤其是自己的应用访问互联网上的三方的图片时,这通常是由于别人的服务器设置了访问限制。本文将介绍如何通过搭建一个图…

7月15日学习打卡,二叉搜索树和字符串操作

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不…

C#学习

C#学习 1.B站丑萌气质狗C#的循环-判断泛型错误处理面向对象static的使用定义showInfo类和Hero类 在这里插入图片描述 然后在该解决方案add新建一个类库,点击rebuild,会在bin文件夹下生成.dll文件 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direc…

数据类型与运算符

一、进制 1.1 进制的区分 1.2进制的换算 只要掌握计算器的方式即可。人工计算的方式了解一下就行了。 二、计算机数据的存储原理 2.1 存储单位 最小的单位:比特位 bit 1位比特要么为0,要么为1 最基本的单位:字节 …

Spring-Cache 缓存

1.简介 2.SpringCache 整合 简化缓存开发 1.导入依赖 <!-- spring cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>2.redis 作为缓存…

二分法binary search

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

解决一下git clone失败的问题

1&#xff09;.不开梯子&#xff0c;我们用https克隆 git clone https://github.com 报错&#xff1a; Failed to connect to github.com port 443 after 2091 ms: Couldnt connect to server 解决办法&#xff1a; 开梯子&#xff0c;然后# 注意修改成自己的IP和端口号 gi…

docker搭建普罗米修斯监控gpu

ip8的服务器监控ip110和ip111的服务器 被监控的服务器110和111只需要安装node-export和nvidia-container-toolkit 下载镜像包 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana新建目录 mkdir /opt/prometheus cd /opt/prometheus/…

生信软件27 - 基于python的基因注释数据查询/检索库mygene

1. mygene库简介 MyGene.info提供简单易用的REST Web服务来查询/检索基因注释数据&#xff0c;具有以下特点&#xff1a; mygene技术文档&#xff1a; https://docs.mygene.info/en/latest/ 多物种支持: 包括人、小鼠、大鼠、斑马鱼等多个模式生物&#xff1b; 多数据源聚合…

卷积神经网络图像识别车辆类型

卷积神经网络图像识别车辆类型 1、图像 自行车: 汽车: 摩托车: 2、数据集目录 3、流程 1、获取数据,把图像转成矩阵,并随机划分训练集、测试集 2、把标签转为数值,将标签向量转换为二值矩阵 3、图像数据归一化,0-1之间的值 4、构造卷积神经网络 5、设置图像输入…

记录些MySQL题集(8)

ACID原则、事务隔离级别及事务机制原理 一、事务的ACID原则 什么是事务呢&#xff1f;事务通常是由一个或一组SQL组成的&#xff0c;组成一个事务的SQL一般都是一个业务操作&#xff0c;例如聊到的下单&#xff1a;「扣库存数量、增加订单详情记录、插入物流信息」&#xff0…