为设备实现一个中断有两步
1、向内核注册中断
2、实现中断处理函数
request_irq(unsigned int irq,
void (*handler).., 中断处理程序
unsigned long flags, 中断标志
char *devname
void *dev_id共享中断时用)
void free_irq(unsigned int irq, void *dev_id)
IRQF_DISABLED 快速中断标志
IRQF_SHARED 共享中断标志
中断处理程序
不能向用户空间发或收数据
不能使用可能引起阻塞的函数
不能使用可能引起调度的函数
第一步,判断是否是本设备产生了中断 (共享中断号时系统会调用所有设备的中断程序,中断程序内部需要自已判断)
第二步,清除中断位
第二步,中断处理,通常是接收数据
第三步,唤醒等待数据的进城