Linux中断驱动程序
1.中断概念
中断时一种电信号,由硬件设备产生,然后再由中断控制器向处理器发送相应的信号。处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断。此后,处理器会通知操作系统已经产生中断。不同的设备,对应的中断不同,而每个中断都通过一个唯一的数字标识,这些值通常被称为中断请求线。
2.Linux2.6中断处理原理
- 获取中断号:中断处理程序的第一步要做两件事:
* 将中断号压栈
* 将当前寄存器信息压栈
- 中断串行化:将多个cpu同时产生的某一中断进行串行化
- 关中断条件下的中断处理:中断处理函数总是在关中断的情况下进行
- 开中断条件下的软中断
- 开中断下的tasklet:软中断很少直接被使用,开中断情况下进行的处理过程一般是由tasklet机制完成
3.Linux中断处理程序架构
- Linux系统将中断程序分成上半部和下半部:
* 顶半部:完成尽可能少,比较紧急的功能。往往只是简单读取寄存器中的中断状态并清除中断标志后就进行登记中断工作
* 底半部:中断处理大部分工作都在底半部完成。主要机制有:tasklet, 工作队列, 软中断
- tasklet
* 定义tasklet机器处理器,并将两者关联
void my_tasklet_func(unsigned long)
DECLARE_TASKLET(my_tasklet, my_tasklet_func, data)
* 调度
tasklet_schedule(&my_tasklet)
- 工作队列
* 定义一个工作队列
struct work_struct my_work;
void my_wq_functon(struct work_struct *work);
* 在初始化函数中通过INIT_WORK()初始化工作队列并将工作队列与处理函数绑定
INIT_WORK(&my_work, (void *)my_wq_func);
* 在适当的地方调度工作队列,一般在中断的上半部调度
schedule_work(&my_work);
- Linux 2.6中断API
* request_irq:向内核注册一个中断服务函数
* free_irq:从内核注销一个中断服务函数
* disable_irq:关闭指定中断,并等待中断服务函数运行结束才会返回
* disable_irq_nosync:关闭指定中断,不等待中断服务函数结束,调用完该函数立即返回
* enable_irq:打开指定中断
- 中断共享:指多个设备共享一根中断线的情况,中断共享使用方法如下:
* 在申请中断时,使用IRQF_SHARED标志
* 在中断到来时,会遍历共享此中断的所有中断处理程序
Linux中断驱动程序的更多相关文章
- Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层【转】
转自:http://blog.csdn.net/droidphone/article/details/7497787 在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本 ...
- linux网络设备驱动程序
4.linux网络设备驱动程序体系结构 -------------------------------------- | 数据包发送 | 数据包接收 | ----->网络协议接口层 | dev_ ...
- 15.linux按键驱动程序(二)
linux按键驱动程序 包含内容定时器延时去抖动,阻塞型设备驱动设计 一.定时器延时去抖 按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开.因而 ...
- linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)
原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是 ...
- 【转】linux设备驱动程序中的阻塞机制
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/04/2275272.html 阻塞与非阻塞是设备访问的两种方式.在写阻塞与非阻塞的驱动程序时,经 ...
- Linux中断(interrupt)子系统
Linux中断(interrupt)子系统之一:中断系统基本原理 Linux中断(interrupt)子系统之二:arch相关的硬件封装层 Linux中断(interrupt)子系统之三:中断流控处理 ...
- Linux中断分层技术
一.中断嵌套 当系统正在执行某中断处理函数时,又产生了一个新的中断,这就叫做中断嵌套.当中断为慢速中断时,新的中断会取代当前中断,即当前中断没有执行完就结束 了:当中断为快速中断时,新的终端就不会产 ...
- Linux中断管理 (2)软中断和tasklet
目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...
- Linux中断管理 (3)workqueue工作队列
目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...
随机推荐
- leetcode刷题-58最后一个单词
题目 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度.如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词. 如果不存在最后一个单词,请返回 0 . 说明:一 ...
- SpringBoot打Jar包在命令行运行
首先写一个测试文件 然后点击IDEA右侧的maven,然后选择package,之后点击上面运行或者直接双击即可, 等下方控制台构建成功即可: 然后找到项目目录下target下即可看到打的jar包 然后 ...
- FFmpeg开发笔记(四):ffmpeg解码的基本流程详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- python中gui编程的模块之一:tkinter(python3.x中是tkinter,小写的t)
一.tkinter是python的标准gui库,tkinter是内置在python的安装包之中的,所以安装好python之后就可以import导入tkinter模块了 二.创建一个GUI程序 1.导入 ...
- Tomcat vs Jetty vs Undertow性能对比
Tomcat,Jetty和Undertow是目前比较主流的3款Servlet容器,而且Spring Boot框架还提供了对它们的集成支持(默认使用的是Tomcat),网络上有许多文章都在介绍Under ...
- 在windows下使用pip安装python包遇到缺失stdint.h文件的错误
今天在windows上使用pip安装一个python包python-lzf时遇到如下的错误: fatal error C1083: Cannot open include file: 'stdint. ...
- web网站——apache和nginx对比02
nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...
- CSS、bootstrap4等相关疑难杂症
说明 本篇博客仅用于个人随笔,所以内容比较随意. 在bootstrap4中,引入样式后,按钮.输入框等组件的选取状态会出现黑色加重边框,该如何解决? 解决示例: input:focus{outline ...
- python第一节课内容及练习
一.input输入 sname = input("请输入你的姓名:")yu_yan = input("请输入你学习的语言:")print("{}, 欢 ...
- C++11 随机数生成器
背景 考试想造浮点数然后发现不会 正好下午被虎哥茶话会 谈到了一些不会的问题balabala的 被告知\(C++11\)有些神奇特性(哦豁) 然后就学习了一手看上去没什么用的随机数生成器\(QwQ\) ...