Linux驱动——模块化编程

news2024/11/27 5:27:01

文章目录

    • 模块化编程
      • 方法一
      • 方法二
        • 前提
        • 模块化编程
          • 模块化编程基本框架(重要)
          • 模块化编程的编译
          • ubantu上操作开发板的文件系统的指令——make
          • 超级终端上的模块指令
      • 多模块
        • 情况1
        • 情况2
      • 传递参数
        • 传递单个参数
        • 传递数组

模块化编程

方法一

修改kconfig,make menucofig,Makefile,编译进内核,启动的时候会自动加载,关机的时候自动卸载,
1.进入Linux3.5内核下的文件系统,make menucofig可选菜单,该路径下的Kconfig其实就是菜单的代码,编辑菜单
2.内核裁剪和添加make menuconfig
打开图形化界面——可以将一些配置选择为*或者空或者为M
空:不选择
*:选择,直接编译进内核
M:选择,编译成模块,需要用户手动加载
3.内核源码路径下的Kconfig文件是来配置make menuconfig的菜单选项的。
可以使用的类型:bool 真假
选择/不选择 */空格
tristate 三态类型 真 假 模块
选择/不选择/编译为模块
/空格/M
在make menuconfig配置完成之后,会被保存在一个.config文件里边
选择为
的,会被写成xxx = y
选择为M的,会被写成xxx = m
选择为空格的,会被注释掉
接下来内核的编译就是根据.config文件进行的。
make的时候,会依次去查找路径下的makefile文件,进行编译,根据.config里边的配置去决定使用哪个文件参与编译。
在添加新的选项的时候,需要更改kconfig文件,还需要更改和Kconfig同一级目录下的Makefile文件。
具体不再截图实现,主要使用方式二

方法二

将驱动代码写成模块,使用的时候手动加载,不使用的时候手动卸载

前提

安装在windows下,使用这个软件来新建工程—》将linux3.5内核源代码添加到工程里边—》可以在该工程里边写代码
在windows下的sourceinsight软件里边写代码
在ubuntu下的linux3.5源码路径下编译代码
将代码移动到根文件系统路径下
在开发板端运行代码。

新建工程,导入linux3.5源码文件
准备工作:安装好source insight
在windows下解压linux3.5内核源代码

模块化编程

工程的创建及source insight的下载请参考博文https://blog.csdn.net/whhcsdn233/article/details/132545683?spm=1001.2014.3001.5501

模块化编程基本框架(重要)

1. 头文件包含
#include “linux/module.h”
#include “linux/kernel.h”
2. 编写模块的加载函数
有返回值 __init 函数名随便写 没有参数
函数必须被 __init修饰(两个下划线)
加载函数是在驱动被添加的时候自动执行的函数
3. 编写模块的卸载函数
无返回值 __exit 函数名随便写 没有参数
函数必须被 __ exit修饰(两个下划线)
卸载函数是在驱动被卸载/删除的时候自动调用的
4. 声明加载函数
module_init(加载函数名称)
5. 声明卸载函数
module_exit(卸载函数名称)
6. 声明遵循GPL协议
代码实现如下

//1.包含头文件
#include <linux/module.h>
#include <linux/kernel.h>

//2.编写加载函数
int __init first_module_init(void)
{
	printk("first_module_init is called\n");
	return 0;
}
//3.编写卸载函数
void __exit first_module_exit(void)
{
	printk("first_module_exit is called\n");
}

//4.声明加载函数
module_init(first_module_init);
//5.声明卸载函数
module_exit(first_module_exit);
//6.声明遵循的协议
MODULE_LICENSE("GPL");

模块化编程的编译

模块编译:将.c代码编译成.ko文件
必须借助linux3.5内核源代码
需要一个makefile文件//注释:makedown软件没有makefile的代码块,这里用c语言代码块来复制粘贴(阅读的美观)

obj-m += led.o	#xxx.c这里需要改为xxx.o

KDIR:=/root/test/第三天/linux-3.5
				#linux-3.5内核的位置
all:
	make -C $(KDIR) M=$(PWD) modules
	#不是执行此Makefile
	#他是去将此文件 led.o拿到 内核的位置
	#用内核的Makefile将此文件编译生成内核的驱动模块
	#而且将此模块放到了当前路径
clean:
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.markers *.order

ubantu上操作开发板的文件系统的指令——make

在这里插入图片描述

超级终端上的模块指令

加载模块:insmod
卸载模块:rmmod
查看模块:lsmod

在这里插入图片描述

多模块

多模块下需要注意以下几点

情况1

情况1:
多个独立的模块,模块之间的代码存在依赖关系
被调用模块里边,需要使用EXPORT_SYMBOL声明该函数可以被外部调用
需要调用模块里边,需要声明函数来自外部
在加载的时候,需要先加载被调用的模块
卸载的时候,先卸载调用模块
模块1使用模块2代码

情况2

情况2:
多个文件生成一个模块—》只有一个模块文件,其他的就是普通的功能文件
多个文件生成一个模块,只有一个文件里边是模块的框架,其余的是被使用的函数
编译的时候,需要修改makefile

传递参数

传递单个参数

在这里插入图片描述

传递数组

在这里插入图片描述
在加载模块的时候传递参数
格式是变量名=变量值
如果是数组,多个值之间逗号隔开即可

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

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

相关文章

时间序列数据在工厂运营管理中的作用

工业领域中&#xff0c;数据一直扮演着不可或缺的角色&#xff0c;而时间序列数据则因其独特的特性在工厂运营管理中发挥着极其重要的作用。从揭示趋势到支持实时决策&#xff0c;时间序列数据成为工厂智能化的关键组成部分&#xff0c;以下将对时间序列数据在工厂运营管理中的…

Linux - Docker 安装使用教程

Docker 官方文档地址: Get Started | Docker 中文参考手册: https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are on your contain…

git difftool对比差异,避免推送不相关内容

问题 在利用git进行版本管理的时候&#xff0c;经常会由于对其他不相关的代码&#xff0c;做了一些小改动&#xff0c;例如删除了一个空行&#xff0c;多了一个缩进等。 为避免将这些不相关的改动也提交到远程&#xff0c;对PR造成不必要的影响&#xff0c;可以利用git diff命…

JVM-性能优化工具 MAT

一、MAT下载和安装 1、概述 MAT&#xff08;Memory Analyzer Tool&#xff09;工具是一款功能强大的]ava堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT是基于Eclipse开发的&#xff0c;不仅可以单独使用&#xff0c;还可以作为插件的形式嵌入在Eclipse中使用…

对话iPayLinks:在支付赛道,用技术创新发现出海“潮水的流向”

2023是充满变化和机遇的一年。从突飞猛进的Temu、TikTok Shop等新渠道&#xff0c;到“全托管模式”席卷整个跨境电商行业&#xff0c;以及Chat GPT等人工智能大模型的横空出世&#xff0c;都让出海每一环的从业者感受到“潮水流向的变化”。 不久前&#xff0c;7月及上半年进出…

爬虫项目(一):艺术二维码制作

《Python网络爬虫入门到实战》京东购买地址,这里讲解了大量的基础知识和实战,由本人编著: https://item.jd.com/14049708.html配套代码仓库地址:https://github.com/sfvsfv/Crawer艺术二维码制作 到知数云https://data.zhishuyun.com/services ,申请艺术二维码API,可免费…

【广州华锐互动】AR昆虫认知学习系统实现对昆虫形态的捕捉和还原

随着科技的不断发展&#xff0c;人们对自然界的认识也在不断加深。在这个过程中&#xff0c;AR&#xff08;增强现实&#xff09;技术的出现为人们带来了全新的体验方式。为此&#xff0c;广州华锐互动开发了AR昆虫认知学习系统&#xff0c;本文将为大家详细介绍这款系统的特点…

谷歌发布Gemini以5倍速击败GPT-4

在Covid疫情爆发之前&#xff0c;谷歌发布了MEENA模型&#xff0c;短时间内成为世界上最好的大型语言模型。谷歌发布的博客和论文非常可爱&#xff0c;因为它特别与OpenAI进行了比较。 相比于现有的最先进生成模型OpenAI GPT-2&#xff0c;MEENA的模型容量增加了1.7倍&#xf…

Android 中SettingsActivity(PreferenceFragmentCompat)的简单使用

如果你需要一个简单的APP设置&#xff0c;可以使用sharedPreferences进行存储&#xff0c;我们可以借助AndroidStudio快速创建一个用于设置的Activity&#xff0c;其实它是继承PreferenceFragmentCompat&#xff0c;存储方式用的就是sharedPreferences&#xff0c;只是帮我们节…

一文教你如何防御数据库渗透入侵

前言 前段时间博主在做学校内部项目的时候&#xff0c;项目需要暂时上线测试&#xff0c;没想到上线测试几天&#xff0c;MySQL 数据库数据就被恶意删除&#xff0c;但是当时我们没有太当回事&#xff0c;以为只是一次普通黑客攻击&#xff0c;恢复数据之后仍然可以正常使用。…

『 LeetCode题解 』203. 移除链表元素

题目链接 : 『 LeetCode题解 』203. 移除链表元素 https://leetcode.cn/problems/remove-linked-list-elements/ 目录 &#x1f31f;题目要求&#x1f31f;解题思路&#xff08;动图解析&#xff09;&#x1f9d0;方案一&#x1f601;方案二 &#x1f31f;代码示列 &#x1f31…

海康机器人工业相机SDK MVS安装教程

文章目录 一. 海康机器人介绍二. 工业相机客户端安装教程 一. 海康机器人介绍 海康机器人是面向全球的机器视觉和移动机器人产品及解决方案提供商&#xff0c;业务聚焦于工业物联网、智慧物流和智能制造&#xff0c;构建开放合作生态&#xff0c;为工业和物流领域用户提供服务…

低代码平台如何改变软件开发?低代码平台是否能形成新生态?

低代码平台如何改变软件开发&#xff1f;低代码平台是什么&#xff1f;低代码平台又有什么样的独特价值&#xff1f;在如今的市场环境下&#xff0c;低代码平台又能展现出怎样的生机&#xff1f; 01 什么是低代码开发平台&#xff1f; 低代码开发平台是一种更偏向于赋能技术人…

监管机构新出台的会计法规将对阿里巴巴和其他中概股产生重大影响

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 监管机构出台了新的会计法规 猛兽财经获悉&#xff0c;为规范企业数据资源相关会计处理&#xff0c;强化相关会计信息披露&#xff0c;财政部于2023年8月21日制定并发布了《企业数据资源相关会计处理暂行规定》&#xff0c…

使用Python连接MySQL数据库并查找表信息

使用Python连接MySQL数据库并查找表信息 1.导入MySQLdb包 import MySQLdb如果你的PyCharm中没有MySQLdb&#xff0c;就从Setting-》Project Interpreter查找并下载 2.在MySQL中新建一个连接&#xff0c;取名为python &#xff0c;再新建一个测试表&#xff0c;取名为examples…

FAQ包含哪些内容?

FAQ页面也叫常见问题解答页面&#xff0c;能够帮助回答客户有关你的产品和服务的常见问题&#xff0c;这不仅仅只是一个问题列表&#xff0c;通过解答页面&#xff0c;可以节约销售时间和服务成本&#xff0c;以及可能推动新用户购买。常见问题解答页面可以在整个采购过程中为客…

顺序表链表OJ题(2)->【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a; 单链表的结构常常不完美&#xff0c;没有双向链表那么”优秀“&#xff0c;所以繁衍出很多OJ练习题。今天我们继续来look look数据结构习题。 下面就是OJ时间&#xff01;&#xff01;&#xff01; …

UEditorPlus v3.4.0 全新公式编辑体验,Logo全新发布

UEditor是由百度开发的所见即所得的开源富文本编辑器&#xff0c;基于MIT开源协议&#xff0c;该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器&#xff0c;主要做了样式的定制&#xff0c;更符…

基于Java+SpringBoot+Vue前后端分离图书管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

缓存一致性问题

在开发中我们为了提高查询效率&#xff0c;经常使用缓存(典型的缓存技术redis)&#xff0c;但是在缓存的使用中我们经常遇到缓存和一致性问题(缓存的数据和数据库的数据不一致) 常见的解决方式 1.双写模式&#xff1a;更新数据库时候同时更新缓存 2.失效模式&#xff…