
回顾裸机中断处理流程
- 中断处理入口
- 事先注册中断处理程序
- 根据中断源编号调用中断处理程序
Linux中
- irq_svc:
- 拿到产生中断的编号(中断号)
- 根据中断号找到irq_desc
- 取出事先注册好的中断处理程序
驱动实现什么:
- 注册中断
- 实现中断处理程序
- 注销处理
注册中断处理程序:使用request_irq
int request_irq(unsigned int irq,void (*handler)(int, void*, structpt_regs *),
unsigned long flags,const char *devname,void *dev_id)
返回0表示成功,或者返回一个错误码
irq : 中断编号
void (*handler)(int, void*, structpt_regs *) : 中断处理函数
unsigned long flags : 与中断处理有关的相关选项 比如:IRQF_DISABLED说明是快速中断
const char *devname : 设备名
void *dev_id : 共享中断时使用
中断处理函数的两个原则:
- 不能使用可能引起阻塞的函数
- 不能使用可能引起调度的函数
注销中断:
当设备不再需要使用中断时(通常在驱动卸载时), 应当把它们注销, 使用函数:
void free_irq(unsigned int irq, void *dev_id)




近期评论