上半部与下半部
想要中断运行的快,又要处理的工作量多,一般将中断处理切为两部分,上半部和下半部。
上半部,接收到中断后立即执行,但只做严格时限的工作。
下半部,可以允许稍后完成的工作。
注册中断处理程序
驱动程序可以通过request_irq()函数注册一个中断处理程序:
- irq:表示分配的中断号;
- handler:一个指向处理这个中断的实际的中断处理程序指针。
handler函数原型:
- flags: 中断处理程序标志:
- name:与中断相关的设备的ASCII文本表示。
- dev:用于共享中断线。
释放中断处理程序
编写中断处理程序
中断处理程序声明:
static irqreturn_t intr_handler(int irq, void *dev)
Linux中的中断处理程序是无须重入的,当一个给定的中断处理程序正在执行时,相应的中断线所在所有处理器上都会被屏蔽,防止在同一中断线上接受另一个新的中断。
中断处理机制的实现
/proc/interrupts
procfs是一个虚拟文件系统,只存在内核内存,一般挂载在/proc目录。