【发布时间】:2020-09-04 22:17:06
【问题描述】:
背景
我遇到了一个问题,在 32 位 Linux 内核上,我的 PCIe 驱动程序、多 MSI 和自定义硬件设备可以完美运行,现在我已经转移到 64 位 iMX8MM CPU 并且 MSI 中断不再扳机。驱动程序正确注册中断,没有任何错误,我可以查看cat /proc/interrupts 的输出,并查看为我的驱动程序列出的所有 MSI 向量及其中断计数,该计数为零。有一个网桥,但/sys/bus/pci/devices/<address>/msi_bus 有一个1,因此它已启用。 lspci -vv 中的所有内容都按顺序排列,CONFIG_PCI_MSI 已应用于内核。我能够在 PCIe 设备上读取和写入内存缓冲区,因此通信正常工作,我只是无法触发 MSI 中断。这是在 32 位 CPU 上运行的完全相同的驱动程序代码,它可以工作,并在新的 64 位 CPU 上重新编译。
问题
如何强制系统上的 MSI 中断以查看 Linux 是否会接收并执行我的代码?从lspci -vv 我可以看到 MSI 地址并且我知道要写入的 MSI 向量值。那么我在系统哪里写这个呢?我查看了/dev/mem 和其他领域,希望可以在其中执行echo 0x1 > <address> 或其他命令行函数来写入值并触发它。我在哪里/如何写来触发特定的 MSI 中断?
【问题讨论】:
标签: linux command-line interrupt pci-e