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中断管 ...
随机推荐
- 01vue.config.js
const path = require('path'); module.exports = { // 基本路径 publicPath: process.env.NODE_ENV === 'pro ...
- indexOf原理,Java,javascript,python实现
简介 最近做项目的时候,发现无论是前端还是后端,indexOf出现的概率都非常频繁,今天我们来看下他的实现原理吧! indexOf的含义:给定一个字符串去匹配另一个字符串的下标,如果匹配到,返回下 ...
- Redis适配采坑记
Redis适配采坑记 相对于其他的适配,Redis可以说是非常简单的其中只发现一个坑 问题一: 问题描述: redis认证失败 问题详解: redis连接配置时,本地需要采用password属性,远程 ...
- 10.QT-QAudioOutput类使用
本章需要用到的类如下: QAudioDeviceInfo类提供音频输出设备 QAudioFormat类提供音频参数设置 QAudioOutput类提供了用于将PCM原始音频数据发送到音频输出设备的接口 ...
- python应用 曲线拟合04
python应用 曲线拟合04 → 多项式拟合 主要是使用 numpy 库中的 polyfit() 函数,见第 66 行, z = np.polyfit(x_proton, y, 3) ,其中待拟合曲 ...
- 【小白学PyTorch】9 tensor数据结构与存储结构
文章来自微信公众号[机器学习炼丹术]. 上一节课,讲解了MNIST图像分类的一个小实战,现在我们继续深入学习一下pytorch的一些有的没的的小知识来作为只是储备. 参考目录: @ 目录 1 pyto ...
- Salesforce LWC学习(二十五) Jest Test
本篇参看: https://trailhead.salesforce.com/content/learn/modules/test-lightning-web-components https://j ...
- Sql Server之ORDER BY不规则排序.如:中文月份排序
ORDER BY CASE Month WHEN '一月' THEN 1 WHEN '二月' THEN 2 WHEN '三月' THEN 3 WHEN '四月' THEN 4 WHEN '五月' TH ...
- myisamchk是用来做什么的?MyISAM Static和MyISAM Dynamic有什么区别?
myisamchk是用来做什么的? 它用来压缩MyISAM[歌1] 表,这减少了磁盘或内存使用. MyISAM Static和MyISAM Dynamic有什么区别? 在MyISAM Static上的 ...
- 微信小程序 A~Z城市选择器js文件
微信小程序城市选择 [a~z] 的所有城市选择 city.js a~z排序的城市数据 addressChoose.js 其他js文件可引用 city.js /** * Created by yvded ...