如何知道哪个中断线是共享的,哪个中断线在Linux中是免费的?

时间:2013-08-16 04:57:25

标签: linux linux-kernel linux-device-driver interrupt

我打算在Linux中编写一个PCIe基本串行I / O卡驱动程序。

据我所知,通过配置空间,它提供了中断线,通过IRQF_SHARED标志,我们可以与相应的IRQ线共享中断处理程序。

但我的困惑是如何知道哪一行共享或不共享?

3 个答案:

答案 0 :(得分:1)

对于设备驱动程序,没有任何有用的方法(尤其是没有可移植方式)来确定中断线是否实际共享,并且这可以通过加载/卸载其他驱动程序随时更改。 PCI驱动程序必须始终假设它们的中断可能是共享的。

注意:PCI Express设备应支持从不共享的MSI(消息信号中断)。 如果可能,您的驱动程序应启用MSI。 但是,不保证系统支持它们。

答案 1 :(得分:1)

内核辅助探测

Linux内核提供了一个用于探测中断号的低级设施。有用 仅适用于非共享中断,但大多数硬件能够使用 共享中断模式提供了更好的方法来查找配置的中断号码 无论如何。该工具由两个函数组成,在<linux/interrupt.h>中声明 (也描述了探测机器):

unsigned long probe_irq_on(void);

此函数返回未分配中断的位掩码。司机必须预先 提供返回的位掩码,稍后将其传递给probe_irq_off。在这个电话之后, 驱动程序应安排其设备生成至少一个中断。 int probe_irq_off(unsigned long);

设备请求中断后,驱动程序调用此函数,通过 作为其参数的先前由probe_irq_on返回的位掩码。 probe_irq_off 返回“probe_on”之后发出的中断号。如果没有 rupts发生,返回0(因此,IRQ 0无法被探测,但没有cus- 无论如何,tom设备可以在任何支持的架构上使用它。如果超过 发生一个中断(模糊检测),probe_irq_off返回负数 值。

程序员在调用后应小心启用设备上的中断 probe_irq_on并在调用probe_irq_off之前禁用它们。另外,你 必须记住在probe_irq_off之后为设备中的待处理中断提供服务。

答案 2 :(得分:0)

运行cat /proc/interrupt。在输出的最右列,您应该在其中一条中断线上看到您的设备。如果它已共享,您也会看到分配给该中断的其他设备。