C代码的中断处理

时间:2014-03-10 06:17:59

标签: c interrupt

我试图通过C代码禁用中断,但卡在request_irq()request_irq()的一个参数是flag,SA_INTERRUPT标志现已弃用。任何人都可以告诉我替代SA_INTERRUPT吗?我使用的是内核版本3.8。

用于禁用中断的request_irq()的其他替代方法吗?

1 个答案:

答案 0 :(得分:1)

request_irq()不会“禁用”中断。它由想要将中断服务例程附加到IRQ的驱动程序调用。如果中断是共享的,则标志为IRQF_SHARED,否则为0。

以下是Realtek 8169 PCIe网络适配器驱动程序的示例:http://lxr.free-electrons.com/source/drivers/net/ethernet/realtek/r8169.c

 retval = request_irq(pdev->irq, rtl8169_interrupt,
      (tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
      dev->name, dev);

在上面的示例中,rtl8169_interrupt是每次引发IRQ时将调用的中断服务例程(ISR)。

ISR的工作是找出中断是否确实由“拥有”设备触发(与共享中断相关),然后如果设备确实触发了中断,则ISR读取中断状态然后清除中断。