微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决内核模块 - 在 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 举报,一经查实,本站将立刻删除。