首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pci_Driver.probe未被调用

pci_Driver.probe未被调用
EN

Stack Overflow用户
提问于 2014-05-18 18:35:47
回答 1查看 2K关注 0票数 4

我开始为通过笔记本电脑的PCIe扩展槽连接的PCI设备开发Linux设备驱动程序。

在靴子上,一切都运行得很好。然而,我试图获得基本的热插拔在线支持。当我弹出卡片时,我可以看到(在dmesg中)正确的删除内容被调用。然而,当卡被重新插入时,什么也不会发生.如果手动删除模块,然后插入卡(或启动后插入卡),则可以看到模块的init被调用,而不是probe。而且,设备不会出现在lspci输出中。

但是,如果我是echo 1 > /sys/bus/pci/rescan,那么它会出现在lspci输出中,但是模块无法加载错误(pci_enable_device failed with code -22)。

你知道从哪里开始诊断这个吗?未能执行.probe是真正令我困惑的。

我应该提到,这是一个连接在这里的FPGA板,所以设备本身可能有问题,但我仍然希望探测器运行,然后出现一个奇怪的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-04 08:10:57

如果设备没有在lspci中显示,则不可能调用驱动程序的.probe函数,因为它确实会在内核设备树中列出。

当您执行pci总线重新扫描并且lspci看到它时,这并不意味着设备是可访问的。实际上,尝试执行一个lspci -vv -s BB:DD (其中BB:DD是lspci报告的设备总线id和设备id。我希望你能得到0xFF的许多注册(特别是酒吧)。我想这就是pci_enable_device失败的原因。

当我在运行时重新加载位文件时,我的FPGA设备也有类似的问题。造成问题的一个可能原因是重新设置配置空间寄存器。您可以尝试在删除主板之前节省配置空间(以root格式):

代码语言:javascript
复制
cp /sys/bus/pci/devices/0000\:BB\:DD.0/config ~/config.save

然后恢复它:

代码语言:javascript
复制
cp ~/config.save /sys/bus/pci/devices/0000\:BB\:DD.0/config

我让这种方法在一些硬件上工作,但在其他硬件(较新的硬件)上不起作用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23725484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档