Linux中断处理驱动程序编写

Linux中断处理驱动程序编写

ID:43325064

大小:118.02 KB

页数:17页

时间:2019-09-28

Linux中断处理驱动程序编写_第1页
Linux中断处理驱动程序编写_第2页
Linux中断处理驱动程序编写_第3页
Linux中断处理驱动程序编写_第4页
Linux中断处理驱动程序编写_第5页
资源描述:

《Linux中断处理驱动程序编写》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux中断处理驱动程序编写中断处理是操作系统必须具备的上要功能之一,下面我们一起来探讨一下Linux中的中断处理。1.什么是中断中断就是CPU正常运行期间,由于内、外部事件引起的CPU暂时停止正在运行的程序,去执行该内部事件或外部事件的引起的服务中去,服务执行完毕后再返回断点处继续执行的情形。这样的中断机制极大的提高了CPU运行效率。中断的分类:1)根据中断的来源可分为内部中断和外部中断,内部中断的中断源来自于CPU内部(软件中断指令、溢出、除法错误等),例如操作系统从用户态切换到内核态需要借助CPU内部的软件中断,外部中断的中断源来自于CPU外部,由外设触发。

2、2)根据中断是否可以被屏蔽,中断可分为可屏蔽中断和不可屏蔽中断,可屏蔽中断可以通过设置中断控制器寄存器等方法被屏蔽,屏蔽后,该中断不再得到响应,而不可屏蔽中断不能被屏蔽。3)根据中断入口跳转方式的不同,中断可分为向量中断和非向量中断。采用向量中断的CPU通常为不同的中断分配不同的中断号,当检测到中断的中断号到来时,就自动跳转到该中断对应的地址处去执行程序。不同的中断号对应不同的中断入口地址。非向量中断的多个中断共享一个入口程序处理入口地址,中断程序跳转到该入口地址执行时,再通过中断程序来判断中断标志来识别具体是哪一个中断,也就是说向量中断由硬件提供中断服务程序入口地

3、址,非向量中断由软件提供中断服务程序入口地址。4)非向量中断处理流程:厂典型的非向量中断首先会判断中断源,然后调用不同中断源的中断处理程序*/irq_handler(){•••intint_src=read_int_status();/*读硬件的中断相关寄存器*7switch(int_src){〃判断中断标志caseDEV_A:dev_a_handler();break;caseDEV_B:dev_b_handler();break;•••default:break;2・linux中断顶部.底部概念为保证系统实时性,中断服务程序必须足够简短,但实际应用中某些时候发生

4、中断时必须处理大量的工作,这时候如果都在中断服务程序中完成,则会严重降低中断的实时性,基于这个原因,linux系统提岀了一个概念:把中断服务程序分为两部分:顶半部、底半部。24顶半部完成尽可能少的比较急的功能,它往往只是简单的读取寄存器的中断状态,并清除中断标志后就进行“中断标记”(也就是把底半部处理程序挂到设备的底半部执行队列中)的工作。特点是响应速度快。22底半部中断处理的大部分工作都在底半部,它几乎做了中断处理程序的所有事情。特点:处理相对来说不是非常紧急的事件,底半部机制主要有:tasklet.工作队列和软中断。Linux中查看/proc/interrupt

5、s文件可以获得系统中断的统计信息:Cpuo0:135253XT^PICtimer1:22XT-PIC180422:0XT-PICcascade8:1XT-PICrtc10:108XT-PICethO11:3707XT-PICBusLogicBT-95812:313XT-PIC1804215:4XT-PICidelNMI:0ERR:03.Linux中断编程3.1.申请和释放中断3.1.1.申请中断:intrequest_irq(unsignedintirq,irq_handler_thandler,unsignedlongirqflags,constchar*devn

6、ame,void*dev_id);参数介绍:i「q是要申请的硬件中断号。Handler:是向系统登记的中断处理程序(顶半部),是一个回调函数,中断发生时,系统调用它,将devjd参数传递给它。irqflags:是中断处理的属性,可以指定中断的触发方式和处理方式:触发方式:IRQF_TRIGGER_RISING、IRQF_TRIGGER_FALLING、IRQF_TRIGGER_HIGH、IRQF_TRIGGER_LOW,处理方式:IRQF_DISABLE表明中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,IRQF.SHARED表示多个设备共享中断,de

7、vjd在中断共享时会用到,一般设置为NULL。返回值:为0表示成功,返回-EINVAL表示中断号无效返回-EBUSY表示中断已经被占用,且不能共享。顶半部的handler的类型irq_handler_t定义为:typedefirqreturn_t(*irq_handler_t)(int,voicT);typedefintirqreturn_t;3」2释放IRQ有请求当然就有释放。中断的释放函数为:voidfree_irq(unsignedintirq,void*dev_id);参数定义与requestjrq类似。3/3中断的使能和屏蔽voiddisable_ir

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。