内核模块 - 在 64 位系统上强制使用 32 位 MSI 向量

问题描述

使用多 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...