我正在尝试让 MSI-X 在 Linux v4.1 中的 iMX6 (Freescale/NXP/Qualcomm) CPU 上运行,用于 PCIe 字符设备驱动程序。每当我调用pci_enable_msix()
or pci_enable_msix_range()
or时,pci_enable_msix_exact()
我都会返回一个EINVAL
值。我确实CONFIG_PCI_MSI
在内核配置中选择了该选项,并且我也可以让单个 MSI 使用pci_enable_msi()
,但我也无法让多个 MSI 工作。
我已经在运行内核 v3 的 Intel i7 上测试了我的驱动程序代码,并且连接了相同的 PCIe 硬件,我能够让 MSI-X 正常工作,所以我知道我的代码编写正确并且硬件运行正常。
在 iMX6 上运行时,我可以使用lspci -v
查看硬件是否具有 MSI-X 功能并查看它允许的 IRQ 数量。打电话时,我什至可以在我的驱动程序中获得相同的正确号码pci_msix_vec_count()
。
问题
- 我还需要设置其他内核配置标志吗?
- 我需要考虑哪些特定于 iMX6 CPU 的东西?
- 有人对 iMX6 和 MSI-X 或多个 MSI 有任何经验吗?