Linux PCI设备驱动程序 - 总线v.内核IRQ

s.b*_*kes 5 interrupt irq linux-kernel pci

我正在为Linux中的PCIe卡编写设备驱动程序.我试图在我的驱动程序中使用中断.

读取PCI配置寄存器的"IRQ线"部分(偏移量0x3C)报告设备的分配IRQ线为11.lspci -b -vv还报告我的设备的中断号码是11.

继续它变得奇怪... cat /sys/bus/pci/devices/<my_device>/irq报告中断号是19.lspci -vv还报告中断号为19.

在我的驱动程序中请求11不起作用.如果我在驱动程序中请求19,我就可以很好地捕获中断.

是什么赋予了?

谢谢!!!

Sea*_*den 6

我认为它与"物理"和"虚拟"IRQ线之间的区别有关.由于处理器具有有限数量的物理IRQ线,因此它分配虚拟IRQ线以允许PCI设备的总数超过物理线的数量.

在这种情况下,19是您的虚拟IRQ线(由处理器识别),而11是物理线(由PCI设备识别).

顺便说一下,你应该真正从该设备的struct pci_dev获取IRQ号,因为它们是动态生成的.