在linux内核开发中,我读到了关于内核接收到中断的中断,它会依次调用每个注册的处理程序。
我的问题是为什么内核调用其他处理程序?
答案 0 :(得分:0)
这是因为有几个设备共享同一个中断线。内核可以检测调用哪个处理程序的唯一方法是将设备的dev_id
传递给需要调用处理程序的所有处理程序。使用传递的dev_id
注册的处理程序获得匹配并继续运行。
请记住,处理程序已注册为:
static irqreturn_t intr_handler(int irq, void *dev_id, struct pt_regs *regs)
通过传递dev_id
来注册处理程序。因此,这是区分同一IRQ线路上设备的唯一因素。
答案 1 :(得分:0)
在一个良好定义的中断处理程序中,专门共享irq行,它将通过读取某些寄存器来检查特定设备是否引发了中断,如果是,则处理中断并返回IRQ_HANDLED
,或者返回IRQ_NONE
以表明该处理程序服务的设备不是。
因此,它会顺序调用该行上的每个已注册处理程序,直到处理程序返回IRQ_HANDLED
意味着正确处理