当前位置: 首页 > news >正文

驱动代码编写(一)

驱动程序的作用

驱动程序是指与硬件设备和操作系统进行通信的软件。它的主要功能有以下几个方面:

  1. 提供硬件支持:驱动程序允许操作系统与硬件设备进行通信,以便正确地操作和控制硬件设备。它可以向操作系统提供有关硬件设备的各种信息,如设备类型、特性和功能。

  2. 硬件操作与控制:驱动程序可以向硬件设备发送指令和控制信号,以执行特定的操作和控制。例如,打印机驱动程序可以向打印机发送打印任务,并控制打印机的打印速度、纸张尺寸等。

  3. 设备管理:驱动程序可以提供设备管理功能,例如检测和识别新连接的设备,配置设备参数和设置选项,以及与其他设备进行协调和通信。

  4. 系统性能优化:驱动程序可以通过优化硬件设备的操作和与操作系统的通信来提高系统性能。它可以提供更高效的数据传输、更低的延迟和更好的资源利用。

  5. 错误处理和故障排除:驱动程序可以检测和处理硬件设备的错误和故障,并提供相应的错误处理和故障排除功能。它可以显示错误信息、尝试修复问题或建议用户采取适当的措施。

总的来说,驱动程序的功能是使操作系统能够与硬件设备进行有效的通信和控制,以便实现各种设备操作和管理功能,并提供系统性能优化和故障排除等服务。

驱动的框架

 入口(安装):资源的申请

出口(卸载):资源的释放

许可证GPLLinux系统是开源的,写一个模块需要开源,所以需要写许可协议

Linux内核许可规则 — The Linux Kernel documentationicon-default.png?t=N7T8https://docs.kernel.org/6.2/translations/zh_CN/process/license-rules.html

驱动代码框架

#include <linux/init.h>
#include <linux/module.h>//申请资源
//static - 限定作用域,延长生命周期
//存储类型 数据类型 指定存放内存区域 函数名(形参)
static int __init hello_init(void)
{return 0;
}//释放资源
static void __exit hello_exit(void)
{
}module_init(hello_init);    //入口:申请资源   本质-回调一个自己写的函数
module_exit(hello_exit);    //出口:释放资源
MODULE_LICENSE("GPL");      //许可证:公共许可协议(开源协议)

注释

module_init(X):入口;X为自己写的函数的函数名

它的作用是申请资源,也就是说,当你执行安装驱动的时候,他会立马执行你写的init函数中的相关功能。

module_exit(X):出口;X为自己写的函数的函数名

它的作用是释放资源,即当你卸载驱动的时候,会执行自己写的exit函数内的功能。

static: 限制作用域

因为在内核里面会有很多个驱动,驱动名字可能会有重复的,那么你在安装的时候就可能出现错误,他识别不到你到底是哪一个申请资源的函数,所有需要用static限制一下函数的作用域,让他只能在当前文件中使用。

__init :申请资源的区域

__exit :释放资源的区域

驱动Makefile的编写

驱动代码的编译需要依赖于内核,本质上你想把.c文件编译成一个驱动代码,使用的是make modules命令,但make modules是在内核的顶层路径下面去执行的,在下层文件中的.c想要编译就需要写一个自己的Makefile来编译生成驱动模块。

驱动Makefile代码

KERNELDIR = /home/linux/kernel/kernel-3.4.39	#写自己的开发板内核路径
#KERNELDIR = /lib/modules/$(shell uname -r)/build	#PC机内核路径(尽量不要用,使用不当可能导致linux崩溃)PWD = $(shell pwd)    #驱动文件的路径all:make -C $(KERNELDIR) M=$(PWD) modules.PHONY:clean
clean:make -C $(KERNELDIR) M=$(PWD) cleanobj-m += hello.o

代码讲解   

这段代码的作用是基于内核框架将驱动代码编译生成驱动模块,需要在内核的顶层目录下执行 make modules

-C:指定到哪个路径下执行这个命令(KERNELDIR中存放顶层路径)

M:赋值,要将哪个路径下的驱动文件编译生成驱动模块(使用shell pwd命令获取当前路径)

注:进入内核目录下执行make modules这条命令,如果不指定 M=$(PWD) 会把内核目录下的.c文件编译生成.ko 

obj-m:功能是生成一个hello.ko 的模块

示例

代码:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/printk.h>static int __init hello_init(void)
{printk("hello world\n");printk(KERN_CRIT "%s %s %d\n",__FILE__,__func__,__LINE__);return 0;
}
static void __exit hello_exit(void)
{printk("baibai le ninlei \n");printk(KERN_CRIT "%s %s %d\n",__FILE__,__func__,__LINE__);}module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

 运行结果:

相关文章:

驱动代码编写(一)

驱动程序的作用 驱动程序是指与硬件设备和操作系统进行通信的软件。它的主要功能有以下几个方面&#xff1a; 提供硬件支持&#xff1a;驱动程序允许操作系统与硬件设备进行通信&#xff0c;以便正确地操作和控制硬件设备。它可以向操作系统提供有关硬件设备的各种信息&#x…...

Prompt-to-Prompt Image Editing with Cross Attention Control

Prompt-to-Prompt Image Editing with Cross Attention Control (P2P) Amir Hertz, Tel Aviv University, ICLR23, Paper, Code 1. 前言 编辑对这些生成模型来说是具有挑战性的&#xff0c;因为编辑技术的一个固有特性是保留大部分原始图像&#xff0c;而在基于文本的模型中…...

实验11 OSPF协议配置

实验11 OSPF协议配置 一、OSPF单区域配置&#xff08;一&#xff09;原理描述&#xff08;二&#xff09;实验目的&#xff08;三&#xff09;实验内容&#xff08;四&#xff09;实验配置&#xff08;五&#xff09;实验步骤 二、OSPF多区域配置&#xff08;一&#xff09;原理…...

ChatGPT-4o, 腾讯元宝,通义千问对比测试中文文化

国内的大模型应用我选择了国内综合实力最强的两个&#xff0c;一个是腾讯元宝&#xff0c;一个是通义千问。其它的豆包&#xff0c;Kimi&#xff0c;文心一言等在某些领域也有强于竞品的表现。 问一个中文文化比较基础的问题,我满以为中文文化chatGPT不如国内的大模型。可事实…...

node.js学习

node.js学习实操及笔记 温故node.js&#xff0c;node.js学习实操过程及笔记~ node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记 为什么学node.js 可以让别人访问我们编写的网页为后续的框架学习打下基础&#xff0c;三大框架vue react angular离不开node.js …...

python将一个图片雕刻镂空成二维码

本文使用创作助手。 要将一个图片雕刻镂空成二维码&#xff0c;你可以使用Python中的Pillow库来处理图像&#xff0c;并使用qrcode库来生成二维码。以下是一个示例代码&#xff0c;用于将图片雕刻镂空成二维码&#xff1a; import qrcode from PIL import Image# 打开待处理的…...

OS进程取样器OS Process Sampler执行CMD/Shell命令

Apache JMeter - Users Manual: Component Reference 1.背景 项目上最近需要测试一种很少用到的DICOM协议,但是网上资料很少,基本上可以总结为三种方案: 直接发送TCP 16进制数据包,但是参数化数据准备难度大通过开发封装jar包发送,需要开发组提供通过发送cmd命令给前置机…...

excel两个数据表格,怎样实现筛选的联动?

如图&#xff0c;想要通过处理器或者像素条件进行筛选&#xff0c;形成一个右边图2的对比表&#xff0c;如何实现实现联动显示呢&#xff1f; 这个在excel里可以借用数据透视表切片器来完成。步骤如下&#xff1a; 1.添加表 选中数据区域中任意一个单元格&#xff0c;点击 插…...

python,django好的get和post请求

获得get请求 df request.GET.get("dades")获得post请求 文件settings.py关闭csrf MIDDLEWARE [ ‘django.middleware.security.SecurityMiddleware’, ‘django.contrib.sessions.middleware.SessionMiddleware’, ‘django.middleware.common.CommonMiddleware’…...

volatile的用法

目录 前言 使用volatile的注意事项&#xff1a; 示例&#xff1a; 总结&#xff1a; 前言 在嵌入式C编程中&#xff0c;volatile是一个关键字&#xff0c;它用于告知编译器被修饰的变量可能会在程序的任何地方、任何时候被不可预见的、非程序本身控制的因素所改变。这通常…...

MySQL 与 PostgreSQL 关键对比二(SQL语法)

目录 1 详细示例 1.1自动增量列 1.2 字符串连接 1.3 JSON 支持 2 总结 MySQL 和 PostgreSQL 是两种流行的开源关系数据库管理系统&#xff08;RDBMS&#xff09;。尽管它们在许多方面相似&#xff0c;但在 SQL 语法和功能上存在一些显著差异。 以下SQL语句的执行如果需要开…...

徐州服务器租用该如何维护?

服务器能够帮助企业处理网络上大部分的数据和信息&#xff0c;在互联网行业中起着十分重要的作用&#xff0c;服务器的存在能够保障网站稳定的运行&#xff0c;主要是由内存、硬盘和处理器等组成&#xff0c;服务器除了进行正常的工作运行&#xff0c;还需要定期维护和管理&…...

C++习题精选(4)—— 栈

目录 1. 最小栈2. 栈的压入弹出序列3. 逆波兰表达式求值 1. 最小栈 题目描述&#xff1a;设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素…...

Web前端ES6-ES13笔记合集(下)

#### 五.ES10新特性 ##### 1. Object.fromEntries > Object.fromEntries()方法允许你轻松地将键值对列表转换为对象 js const arr [["name", "kerwin"], ["age", 100]]; console.log(Object.fromEntries(arr))//{name: kerwin, age: 100} …...

我要成为算法高手-双指针篇

目录 什么是双指针?问题1&#xff1a;移动零问题2&#xff1a;复写零问题3&#xff1a;快乐数问题4&#xff1a;盛最多水的容器问题5&#xff1a;有效三角形个数问题6&#xff1a;查找总价格和为目标值的两个商品(两数之和)问题7&#xff1a;三数之和问题8&#xff1a;四数之和…...

Fake news detection: A survey of graph neural network methods

abstract 各种社交网络的出现产生了大量的数据。捕获、区分和过滤真假新闻的有效方法变得越来越重要&#xff0c;特别是在 COVID-19 大流行爆发之后。本研究对假新闻检测系统的图神经网络 (GNN) 的现状和挑战进行了多方面、系统的回顾&#xff0c;并概述了使用 GNN 实现假新闻…...

HCIE认证,这些误区要避开

追求HCIE认证是许多网络工程师提升职业水平的选择之一。 然而&#xff0c;在这条备考之路上&#xff0c;存在不少误解可能会误导你的学习方向或影响你的备考效率。 了解并避开这些常见误区&#xff0c;将帮助你更有效地准备HCIE认证考试。 01 误区一&#xff1a;过分依赖题库 …...

主题切换之CSS文件篇

动态加载CSS: 利用HTML的标签&#xff0c;可以通过JavaScript动态改变其href属性来加载不同的CSS文件。这意味着我们可以在运行时切换整个页面的样式表&#xff0c;从而实现主题的变化。 分离样式: 将不同主题的样式分别放在不同的CSS文件中。例如&#xff0c;default_styles.…...

Vue进阶(八十八)前端测试工具介绍

文章目录 一、前言1.1 引入1.2 基础语法1.2.1 全局函数 describe 和 it1.2.2 断言 expect1.2.3 匹配器1.2.4 snapshot 快照1.2.5 测试用例覆盖率报告1.2.6 React Testing Library render1.2.7 screen1.2.8 查询函数1.2.9 waitFor1.2.10 fireEvent 和 userEvent 二、Jest 基本用…...

【录制,纯正人声】OBS录制软件,音频电流音,杂音解决办法,录制有噪声的解决办法

速度解决的方法 &#xff08;1&#xff09;用RNNoise去除噪声。RNNoise是一个开源的&#xff0c;效果不好的噪声去除器。使用方法就是点击滤镜&#xff0c;然后加噪声抑制RNNoise。【这方法不好用】 &#xff08;2&#xff09;用Krisp(https://krisp.ai/) 去除噪声。这个Kris…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...