linux中断处理程序

Linux进行中断处理的4个步骤:
  1、当中断产生,跳到统一入口IRQ_SVC
  2、获取中断号
  3、根据中断号找到irq_desc结构
  4、从irq_desc结构中取出事先注册好的中断处理函数

Linux中断处理程序设计:
  1、注册中断
  2、实现中断处理函数
  3、注销处理

一、注册中断
  使用request_irq函数
  原型:int request_irq(unsigned int irq,irq_handler_t handler,unsigned long flags, const char *devname, void *dev_id)
  参数:
    irq:中断号
    handler:中断处理函数名
    flags:中断选项,例:IRQF_TRIGGER_FALLING(在下降沿触发中断),其余选项对IRQF_TRIGGER_FALLING逆搜索即可得出
    devname:产生中断的设备名
    id:设备id,当中断选项为IRQF_SHARED共享中断时用到,即同一中断号会包含多个设备的irq_desc结构体,根据设备id加以区分

二、实现中断处理函数
  中断处理函数有以下限制:
    1、不能调用可能引起阻塞的函数
    2、不能调用可能引起中断的函数
  处理流程:
    1、检查设备是否产生中断
    2、清除中断产生标志
    3、相应的硬件操作
  其中,第一步针对共享中断,第二步通常内核会进行清除。

/*中断处理函数*/
irqreturn_t key_int(int irq, void *dev_id)
{
    /*1、检测设备是否产生中断*/

    /*2、清除中断产生标志*/

    /*3、相应的硬件操作*/
    printk("press key down\n");

    return 0;
}

三、注销中断
  free_irq函数
  原型:void    free_irq(unsigned int irq, void *dev_id)
  参数:
    irq:中断号
    id:设备id

四、中断号查找

  用SourceInsight查看linux内核源代码,打开s3c2410对应的irqs.h

  

  查看mini2440手册和s3c2440芯片手册查到设备对应的硬件中断号,即EINTXX,在内核代码中中断号即为与之对应的IRQ_EINTXX

时间: 2024-08-08 09:40:17

linux中断处理程序的相关文章

13.linux中断处理程序

linux中断处理程序 一.中断处理流程 在linux内核代码中进入entry-armv.S目录: linux统一的入口:__irq svc. 进入了统一的入口之后,程序跳到irq_handler标号(在同一个文件上面有说明): 而irq_handler实际上是调用上面的arch_irq_handler_defualt.该代码在entry-macro-multi.S里面. 在这个中断处理程序中.最重要的是get_irqnr_and_base获取产生中断的中断源,搜索这个宏.这里以2410的为例(

《Linux内核设计与实现》学习笔记——中断、中断处理程序

中断和中断处理程序 中断随时可能产生,打断CPU的执行,CPU转而处理中断. 不同的设备对应的中断不同,每个中断都通过一个唯一的数字标志. 这些中断值称为中断请求(IRQ)线,每个irq线关联一个数值. 中断处理程序 响应中断时,内核会执行一个函数,中断处理程序/中断服务例程ISR, 一个设备的中断处理程序是他的设备驱动的一部分. IO资源包括 : 中断,I/O端口,共享RAM,DMA.驱动程序需要管理注册释放这些资源. 上半部:接收到中断就立即执行,只做有严格时限的工作,如对中断应答或复位硬件

《Linux内核设计与实现》之中断与中断处理程序

1.中断的概念 中断本质上是一种特殊的电信号,由硬件设备发向处理器.处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由OS负责处理这些新到来的信号. 从物理学的角度看,中断是一种电信号,有硬件设备产生,并直接送入中断控制器的输入引脚上.然后再由中断控制器向处理器发送相应的信号.处理器一经检测到此信号,便中断自己的当前工作转而处理中断.伺候处理器会通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当的处理了. 不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标识.这

Linux中断(interrupt)子系统之一:中断系统基本原理

这个中断系列文章主要针对移动设备中的Linux进行讨论,文中的例子基本都是基于ARM这一体系架构,其他架构的原理其实也差不多,区别只是其中的硬件抽象层.内核版本基于3.3.虽然内核的版本不断地提升,不过自从上一次变更到当前的通用中断子系统后,大的框架性的东西并没有太大的改变. /*****************************************************************************************************/ 声明:本博内容

Linux 中断详解 【转】

转自:http://blog.csdn.net/tiangwan2011/article/details/7891818 原文地址 http://www.yesky.com/20010813/192117.shtml 方法之三:以数据结构为基点,触类旁通 结构化程序设计思想认为:程序 =数据结构 +算法.数据结构体现了整个系统的构架,所以数据结构通常都是代码分析的很好的着手点,对Linux内核分析尤其如此.比如,把进程控制块结构分析清楚 了,就对进程有了基本的把握:再比如,把页目录结构和页表结构

2.中断处理程序

回顾裸机的流程.在裸机下学期,通过按键玩中断. 裸机中断的过程: 中断会有统一的入口:当我们的程序产生中断的时候,无论是哪种中断.都会跳到中断向量表里的_irq这里.这是统一的入口. 2.用户要先注册中断处理程序. 3.根据中断源编号,调用中断处理程序. 接下来我们来看linux的中断,是不是也是这种模式的呢? 我们打开内核工程的entry-armv.S这个文件,在这个文件里有这样的代码: 这就是linux统一的入口:__irq svc. 进入了统一的入口之后,程序会去调用irq_handler

linux中断底半部机制

中断处理程序 ----中断处理程序ISR是在中断发生时被调用时用来处理中断的函数,在中断运行期间,不能 ----执行有可能引起睡眠测操作,不能同用户空间交换数据,不能调用schedule函数,实现 ----中断处理有一个原则,就是尽可能快处理并返回地,但是多数中断产生时要进行大量的 ----耗时处理,为了使中断处理尽可能短并完成后续大量工作,linux引入了一种底半部机制, ----分为顶半部(top half)和底半部(buttomhalf). 底半部机制 ----Tasklet ----工作

[linux内核][linux中断]——软中断机制

点击打开链接 一,linux软中断的概念软中断(softirq)常常表示可延迟函数的所有种类,目前linux上使用的软中断个数是有限的,linux最多注册32个,目前使用了10个,在interrupt.h中定义,中断上下文:表示内核当前正在执行一个中断处理程序或者一个可延迟函数.软中断(即使同一类型的软中断)可以并发运行在多个CPU上,因此软中断是可重入函数必须使用自旋锁保护其数据结构.一个软中断不会去抢占另外一个软中断. 软中断和tasklet的区别由于软中断必须使用可重入函数,这就导致设计上

linux中断

文章主要是本人的认识,介绍也不全面,则重于流程,用词方面也不讲究,很多观点也比较粗糙,有错误的地方,请多多指正. 文章主要参考<深入分析linux内核源码>关于中断的章节:http://oss.org.cn/kernel-book/ 中断是计算机系统的一种机制,主要有两种作用: 实现异步. 紧急处理某一过程. 由于CPU与外设的运行速率相差较大,且CPU资源比较重要,如果采用同步的方式让CPU与外设进行通信,则当外设在工作时,CPU就要等待外设完成工作并返回结果时,CPU才能断续运行,这段时间