linux驱动--中断

中断号和中断的申请

中断号的添加-----定义设备节点,描述当前设备

通过设备树文件获取
/dts/xxxx.dts文件中进行设备的设置
在这里插入图片描述

在dts设备树文件中进行设备的定义,包括继承的设备,中断号的设置

需要对我们的dts设备树文件进行编译,然后重启开发板,在proc目录下device-tree目录下可以找到我们添加的设备

中断号的申请-----在驱动中通过代码获取中断号,申请中断

驱动代码的框架

在这里插入图片描述

中断号申请流程

1、获取到设备树中的节点
2、通过节点去获取中断号
在这里插入图片描述
加载驱动模块:insomd xxxx.ko
卸载驱动模块:rmmod xxxx.ko

申请中断

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char * name, void * dev)

参数一:中断号
参数二:中断处理函数
参数三:触发方式(上升沿,下降沿,高电平,低电平)
参数四:中断描述 cat /proc/interrupts 查看当前的中断信息,
参数五:传递给中断处理函数指针的值

在这里插入图片描述

释放中断

void free_irq(unsigned_int irq, void *dev)

参数一:中断号
参数二:和申请中断中第五个参数一致即可

实现字符设备驱动的框架

设定一个全局的设备对象-----描述设备信息

在这里插入图片描述
然后对该设备对象分配空间

在这里插入图片描述

申请主设备号

在这里插入图片描述

在这里插入图片描述
参数一:动态申请
参数二:设备名称
参数三:file_operations

创建设备节点文件

在这里插入图片描述

class_create(owner, name)

参数一:所有者
参数二:设备名称

struct device *device_create(struct class *cls, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...);

参数一:与逻辑设备相关的逻辑类
参数二:当前逻辑设备的父设备的指针
参数三:逻辑设备的设备号,需要用MKDEV(主设备号进行映射)
参数四:中断处理函数的参数
参数五:逻辑设备的设备名

硬件的初始化------地址映射或者中断申请

在这里插入图片描述

驱动将硬件产生的数据传递给用户

硬件如何获取数据

读取硬件对应的GPIO口的状态,来判断硬件的动作。

是通过读取对应GPIO的数据寄存器来获取状态的

在这里插入图片描述
通过ioremap将物理地址GPXDATA_RED宏定义对应的实际物理地址映射到设备虚拟空间data_reg_base中
在这里插入图片描述
通过readl将data_reg_base中的数据读4字节出来

驱动如何将数据传递给用户

在中断处理函数中将event(事先定义好的结构体)进行填充
在这里插入图片描述

然后通过copy_to_user()函数传递给用户
在这里插入图片描述

用户如何拿到数据------编写应用程序

在用户空间调用read函数,会执行驱动中的key_drv_read驱动函数,将key_event结构体中的数据读出来,之后对数据在用户层面进行处理。
在这里插入图片描述

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

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

相关文章

LeetCode 191, 173, 210

文章目录 191. 位1的个数题目链接标签思路代码Integer.bitCount() 173. 二叉搜索树迭代器题目链接标签思路递归迭代 210. 课程表 II题目链接标签思路代码 191. 位1的个数 题目链接 191. 位1的个数 标签 位运算 分治 思路 这里可以使用一个结论:n & (n - 1…

天机学堂第二天项目 添加我的课表 项目总结

目录 根据产品原型得到数据库表结构 RabbitMq监听 构造器注入 幂等 mybatisplus 分页查询的多种写法 在new page里面添加排序 查询条件中 用orderBydESC指定排序 ​编辑 链式编程中使用page指定排序 stream流 ​编辑 在网关中解析token 根据产品原型得到数据库表结构 根…

基于物联网的区块链算力网络,IGP/BGP协议

目录 基于物联网的区块链算力网络 IGP/BGP协议 IGP(内部网关协议) BGP(边界网关协议) 内部使用ISP的外部使用BGP的原因 一、网络规模和复杂性 二、路由协议的特性 三、满足业务需求 四、结论 基于物联网的区块链算力网络 通 过 多个物联网传感器将本地计算…

Node服务器开发和部署

Node服务器开发和部署 第一步:写一个Node服务 方法1:Express编写 创建一个项目:node_server mkdir node_server && cd node_server && npm init -y安装express: npm install express至此,项目创建…

使用在UE5中使用AirSim插件Eigen库头文件引用报错,出现报错的解决方式

一、概述 如图所示&#xff0c;用红线圈出的两条头文件引用会报错&#xff0c;提示无法找到他们&#xff0c;但是可以发现的是&#xff0c;他们的路径书写是没有问题的。 // #include <Source/Airlib/deps/eigen3/Eigen/Core> // #include <Source/Airlib/deps/eigen…

Android 线程并发:线程通信:Handler机制

文章目录 API源码分析操作总结 API Handler相关 Handler对象.sendMessage(Message) 发送消息 Handler对象.handleMessage()空方法 自定义Handler重写handleMessage方法&#xff0c;处理Message Looper相关 Looper.getMainLooper() 获取App的UI线程的Looper对象 Looper…

【网络爬虫技术】(1·绪论)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;网络爬虫开发技术入门_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

日拱一卒 | JVM

文章目录 什么是JVM&#xff1f;JVM的组成JVM的大致工作流程JVM的内存模型 什么是JVM&#xff1f; 我们知道Java面试&#xff0c;只要你的简历上写了了解JVM&#xff0c;那么你就必然会被问到以下问题&#xff1a; 什么是JVM&#xff1f;简单说一下JVM的内存模型&#xff1f;…

梯度下降算法,gradient descent algorithm

定义&#xff1a;是一个优化算法&#xff0c;也成最速下降算法&#xff0c;主要的部的士通过迭代找到目标函数的最小值&#xff0c;或者收敛到最小值。 说人话就是求一个函数的极值点&#xff0c;极大值或者极小值 算法过程中有几个超参数&#xff1a; 学习率n&#xff0c;又称…

代码随想录算法训练营第22天-leetcode-回溯算法part01:

#回溯算法理论基础 能解决的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题&#xff1a;一个字符串按一定规则有几种切割方式子集问题&#xff1a;一个N个数的集合里有多少符合条件的子集排列问题&#xff1a;N个数按一定规则全排列&…

大数据——HBase原理

摘要 HBase 是一个开源的、非关系型的分布式数据库系统&#xff0c;主要用于存储海量的结构化和半结构化数据。它是基于谷歌的 Bigtable 论文实现的&#xff0c;运行在 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;之上&#xff0c;并且可以与 Hadoop 生态系统的其他组…

太美了!智能汽车触摸屏中控让驾驶员和乘客目不转睛

太美了&#xff01;智能汽车触摸屏中控让驾驶员和乘客目不转睛 引言 艾斯视觉作为行业ui设计和前端开发领域的从业者&#xff0c;其观点始终认为&#xff1a;智能汽车已经成为现代交通的新宠。其中&#xff0c;触摸屏中控系统以其美观、智能、人性化的特点&#xff0c;为驾驶…

Electron的入门介绍与使用React18+Vite+Electron(2)共30节

上一篇讲了如何安装Electron和简单例子&#xff0c;Electron的入门介绍与使用&#xff08;1&#xff09;共30节 让我们回顾一下Electron的发展历史&#xff0c;Electron 最初由 GitHub 公司开发&#xff0c;最早用于构建 GitHub Desktop。随着其成功&#xff0c;Electron 逐渐…

在线投稿小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;编辑管理&#xff0c;用户文章管理&#xff0c;文章分类管理&#xff0c;文章展示管理&#xff0c;文章稿酬管理&#xff0c;通知公告管理&#xff0c;系统管理 微信端账号功能包…

从零开始的Python开发日记(3):Flask框架的使用

最近学会了使用Python的Flask框架&#xff0c;并通过该框架实现API的调用以及转发&#xff0c;以下是flask框架下前后端的数据交互模式 后端&#xff1a;python 的 flask 框架 前端&#xff1a;html、css、js前后端数据交互的方式&#xff1a; 一、前端发送数据&#xff0c;后…

Unity ParticleSystem:创造魔法般的视觉效果

Unity的ParticleSystem是一个功能强大的组件&#xff0c;用于创建各种动态的粒子效果&#xff0c;如火焰、烟雾、雨滴、爆炸等。它不仅可以用于增加游戏的视觉吸引力&#xff0c;还可以用于实现复杂的动画效果。本文将探讨如何使用Unity的ParticleSystem组件来实现动画效果。 …

2022.11.17 阿里钉钉数据开发岗位一面

今天晚上和阿里钉钉面试官聊了一面&#xff0c;整个过程持续45分钟&#xff0c;还是相当持久的。前面先让我自我介绍&#xff0c;包括自身背景、工作经历和项目经验&#xff0c;在介绍的时候面试官几次打断&#xff0c;让我停下来&#xff0c;然后他提问&#xff0c;我很纳闷还…

59 阻塞和非阻塞IO

阻塞式io 一个简单的用户输入回显功能&#xff0c;在用户未输入内容时&#xff0c;会一直阻塞住 #include <iostream> #include <unistd.h>using namespace std; int main() {char buff[1024];while (true){cout << "please enter ";fflush(stdo…

VAD: 向量化场景表示,用于高效的自动驾驶

VAD: Vectorized Scene Representation for Efficient Autonomous Driving VAD: 向量化场景表示&#xff0c;用于高效的自动驾驶 https://github.com/hustvl/VAD Abstract Autonomous driving requires a comprehensive understanding of the surrounding environment for …

英语单词终极记忆

你应当知道一个专业术语&#xff0c;叫COCA。 这个单词很好记&#xff0c;但你可能记不住。 你应当这样记&#xff1a; 你记住了 可口可乐&#xff0c;也就记住了 coca &#xff08;谐音&#xff1a;可口&#xff09;。 从而记住了 COCA。 无论如何&#xff0c;你这辈子&…