多次加载和卸载PCI驱动程序会导致其/ sys / bus / pci / devices / xxx目录消失

时间:2014-04-22 20:17:41

标签: linux-kernel linux-device-driver pci

我有一个安装和工作正常的FPGA卡的PCI驱动程序。但是,我们需要清理我们的系统而不重新启动,包括卸载此驱动程序。

重新启动时(不重新启动)重新安装驱动程序。我发现当我多次执行此过程(安装/卸载)时,在第5次卸载驱动程序时,与设备关联的目录就会消失。

由于链接不良,

lspci命令无法再找到我的设备。我必须重新启动才能让设备目录(/sys/bus/pci/devices/00000:04:00.0)重新显示。

通过一些实验并将驱动程序降低到最低限度,我发现如果我在pci_enable_device(..)中没有调用pci_probe_method函数,那么我就可以安装/卸载驱动程序了多次没有错误。

当然,我需要在我可以对设备做任何事情之前调用这个方法,但我想确定它不是我正在做的更复杂的初始化导致问题。

我已经确认我在pci_disable_device()中调用了pci_remove_method()。我应该可以无限期地启用和禁用PCI设备,对吧?任何有关弄清楚发生了什么的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

这个问题的实际解决方案是消除我不得不对pci_dev_put(..)进行无关的调用。在提交问题之前我没有注意到这一点。这个驱动程序没有使用pci_probe()方法来发现这个设备时剩下这个。因此,在退出例程中执行此调用会导致此设备的结构在5次调用后消失。所以现在这个问题已经解决了。