我有一个安装和工作正常的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设备,对吧?任何有关弄清楚发生了什么的帮助都将受到赞赏。
答案 0 :(得分:0)
这个问题的实际解决方案是消除我不得不对pci_dev_put(..)进行无关的调用。在提交问题之前我没有注意到这一点。这个驱动程序没有使用pci_probe()方法来发现这个设备时剩下这个。因此,在退出例程中执行此调用会导致此设备的结构在5次调用后消失。所以现在这个问题已经解决了。