我正在开始使用通过笔记本电脑的PCIe扩展插槽连接的PCI设备的Linux设备驱动程序开发。pci_Driver.probe未被调用
开机时,一切都很好。但是,我试图在线获得基本的Hotplug支持。当我弹出卡片时,我可以看到(在dmesg
)正确的删除东西被调用。但是,当卡被重新插入时,没有任何反应。如果我手动卸下模块,然后插入卡(或在引导后插入卡),则可以看到模块的init
被调用,但不是probe
。此外,该设备不会出现在lspci
输出中。
但是,如果我echo 1 > /sys/bus/pci/rescan
那么它出现在lspci
输出,但模块无法加载错误(pci_enable_device failed with code -22
)。
任何想法甚至可以开始诊断吗?没有执行.probe
是令我困惑的事情。
我应该提到这是连接在这里的FPGA电路板,因此设备本身可能存在问题,但我仍然期望探针运行,然后在出现奇怪错误后失败。
您需要仔细检查退出和删除代码,以确保在init&probe期间执行的每个资源和初始化操作都已撤销(以相反顺序)。您可能需要使用printk()来分配代码以查找-22错误代码(EINVAL)的来源。 *“执行失败.probe是令我困惑的事情。”* - 这可能意味着模块的init例程返回错误。 – sawdust
初始化运行成功,我测试了它..但.probe永远不会被调用。 – Yeraze
我四处寻找,只是偶然发现[pcihp_skeleton](https://svn.dd-wrt.com/browser/src/linux/universal/linux-3.4/drivers/pci/hotplug/pcihp_skeleton.c?rev= 19285)。 hotplug接口是否与常规PCI接口完全不同?我认为新的内核合并了两者。 – Yeraze