linux – 没有调用pci_Driver.probe

linux – 没有调用pci_Driver.probe,第1张

概述我正在开始 Linux设备驱动程序开发,用于通过笔记本电脑的PCIe扩展槽连接的PCI设备. 在启动时,一切都很美妙.但是,我正在尝试在线获得基本的Hotplug支持.当我d出卡片时,我可以看到(在dmesg中)调用正确的移除内容.但是,当重新插入卡时,没有任何反应.如果我手动删除模块,然后插入卡(或在启动后插入卡),那么我可以看到模块的init被调用,但不是探测器.此外,该设备不会出现在lspc 我正在开始 Linux设备驱动程序开发,用于通过笔记本电脑的PCIE扩展槽连接的PCI设备.

在启动时,一切都很美妙.但是,我正在尝试在线获得基本的Hotplug支持.当我d出卡片时,我可以看到(在dmesg中)调用正确的移除内容.但是,当重新插入卡时,没有任何反应.如果我手动删除模块,然后插入卡(或在启动后插入卡),那么我可以看到模块的init被调用,但不是探测器.此外,该设备不会出现在lspci输出中.

但是,如果我回声1> / sys / bus / pci / rescan然后它出现在lspci输出中,但模块无法加载错误(pci_enable_device失败,代码为-22).

任何想法甚至开始诊断这个? exec .probe的失败让我很困惑.

我应该提一下,这是一块连接在这里的FPGA板,因此设备本身可能出现了问题,但我仍然希望探测器能够运行,然后失败并出现奇怪的错误.

解决方法 如果设备未在lspci中显示,则不会调用驱动程序的.probe函数,因为它确实列在内核设备树中.

当你进行pci总线重新扫描并且它被lspci看到时,这并不意味着设备是可访问的.实际上,尝试做一个lspci -vv -s BB:DD(其中BB:DD是lspci报告的设备总线ID和设备ID.我希望你的许多寄存器(特别是bar)得到0xFF.我猜猜这就是pci_enable_device失败的原因.

当我在运行时重新加载位文件时,我遇到了与FPGA器件类似的问题.
导致问题的一个可能原因是配置空间寄存器被重置.
您可以尝试在删除板之前保存配置空间(以root身份):

cp /sys/bus/pci/devices/0000\:BB\:DD.0/config ~/config.save

然后恢复它:

cp ~/config.save /sys/bus/pci/devices/0000\:BB\:DD.0/config

我已经将这种方法用于某些硬件而不是其他(较新的硬件).

总结

以上是内存溢出为你收集整理的linux – 没有调用pci_Driver.probe全部内容,希望文章能够帮你解决linux – 没有调用pci_Driver.probe所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1018055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存