中断是我们的老朋友了,在裸机开发中中断处于不可或缺的地位。在linux开发中,也有一套自己的中断体系。与裸机开发最大的不同是,操作系统通常将中断划分为了上下文。比如上文处理硬件请求,而下文则对数据进行处理,网卡是一个典型的例子。
中断上文
相关函数接口
申请一个中断:
int request_irq(unsigned int irq,
irqreturn_t (*handler)(int, void *, struct pt_regs *),
unsigned long irq_flags,
const char * devname,
void *dev_id)
参数分别是中断号、中断处理程序入口、flag(书的94页)、设备名称(可查询)、dev_id用于共享中断线(没有的话写NULL)。
这个函数可能会引起休眠,因此不能在中断上下文中调用(原因可能是需要申请空间,用到了kmalloc)。
irqreturn_t (*handler)(int irq, void *dev