问题描述
使用多 MSI 为自定义 PCIe 硬件设备开发 Linux 内核模块。一切都在 32 位系统上工作,但在 64 位系统上重新编译和运行时不起作用。 MSI 中断根本不会出现在 64 位系统上。我没有从 pci_irq_vector()
和 request_irq()
之类的函数中得到任何错误。总共有 16 个向量,当模块加载时我可以看到(来自 lspci
):
Capabilities: [50] MSI: Enable+ Count=16/16 Maskable- 64bit+
我还可以看到正确列出的所有中断:cat /proc/interrupts
。在 VHDL 开发环境中,MSI 设置为 32 位,我怀疑 TLP 缺少 MSI 的 64 位地址;因此,向量永远不会出现在 64 位系统上。 VHDL 硬核 IP 仅允许 32 位或 64 位,我们需要该硬件能够连接到 32 位和 64 位 CPU。
如何告诉 Linux 在我的内核模块中只使用 32 位的 MSI?有没有这方面的 API?我也愿意接受其他建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)