代码之家  ›  专栏  ›  技术社区  ›  user2205930

Linux:强制从命令行触发PCIe MSI中断

  •  0
  • user2205930  · 技术社区  · 4 年前

    背景

    cat /proc/interrupts /sys/bus/pci/devices/<address>/msi_bus 有一个 1 所以它被启用了。一切从 lspci -vv 看起来井井有条 CONFIG_PCI_MSI 应用于内核。我能够读取和写入PCIe设备上的内存缓冲区,以便通信正常工作,我只是无法触发MSI中断。这是运行在32位CPU上的完全相同的驱动程序代码,它工作正常,并在新的64位CPU上重新编译。

    问题

    lspci-vv 我可以看到的MSI地址,我知道的MSI矢量值写入。那么我应该把这个写在哪里呢?我看过 /dev/mem 以及其他我希望能做一个 echo 0x1 > <address>

    0 回复  |  直到 4 年前
        1
  •  0
  •   prl    4 年前

    MSI不能由CPU触发;触发中断的dword写只有在来自设备时才被识别为中断。

    CPU可以通过写入本地APIC ICR寄存器以类似的方式启动中断。这只能从内核中完成,据我所知,目前还没有允许注入任意中断的内核服务。也许你可以添加一个服务到你的内核驱动程序中去做。(注意,作为一种临时调试辅助工具;这将非常不适合留在驱动程序中。)

    ICR的字段与MSI的字段不同,但它们是相似的。比较这两个文档以将一个映射到另一个应该很简单。