我正在尝试让MSI-X在Linux v4.1中的iMX6(Freescale / NXP / Qualcomm)CPU上运行PCIe字符设备驱动程序。每当我拨打pci_enable_msix()
或pci_enable_msix_range()
或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()
时,我甚至可以在驱动程序中获得相同的正确数字。