linux-kernel - Linux PCI 设备驱动程序 - 总线与内核 IRQ

标签 linux-kernel interrupt pci irq

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

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

这就是奇怪的地方... cat /sys/bus/pci/devices/<my_device>/irq报告中断号为 19 . lspci -vv还报告中断号是 19。

索取 11 在我的驱动程序中不起作用。如果我要求 19 在驱动程序中,我捕获中断就好了。

是什么赋予了?

谢谢!!!

最佳答案

我相信这与“物理”和“虚拟”IRQ 线之间的区别有关。由于处理器具有有限数量的物理 IRQ 线,它分配虚拟 IRQ 线以允许 PCI 设备的总数超过物理线的数量。

在本例中,19 是您的虚拟 IRQ 线(由处理器识别),而 11 是物理线(由 PCI 设备识别)。

顺便说一下,您可能真的应该从该设备的 struct pci_dev 中获取 IRQ 编号,因为它们是动态生成的。

关于linux-kernel - Linux PCI 设备驱动程序 - 总线与内核 IRQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15510810/

相关文章:

Android USB 主机 : asynchronous interrupt transfer

java - 在应用程序关闭时刷新打印机

linux-kernel - 从 Linux 内核空间到 PCIe 卡的 DMA

c - 为什么操作系统需要/维护内核线程?

linux - cdev_add 和 device_create 函数之间的区别?

c - STM32 UART中断溢出后不工作

linux - resourceX linux pci内存mmap接口(interface)是什么字节序?

linux - 如何分配 IRQS

linux - macb ff0e0000.ethernet eth0 : Could not attach to PHY

sockets - 如何侵入 Unix 内核以从 TCP 中删除指数退避?