【问题标题】:Load a usb driver that has been already inserted in the kernel加载一个已经插入内核的usb驱动
【发布时间】:2010-12-11 12:00:24
【问题描述】:

我有一个usb内核模块,需要在插入后加载,无需等待重新枚举

用例是这样的 - 构建和安装内核模块。 - 用户已插入 USB 设备,因此他/她希望设备能够正常工作 - 驱动程序存在(modprobe show is)但未加载,因此 USB 设备不工作

有没有办法强制内核重新枚举给定的设备,我目前正在研究 libusb,似乎通过发出 IOCTL 来完成类似的事情。

【问题讨论】:

  • 也许是您对“负载”的使用使问题变得混乱。运行 insmod 会加载一个内核模块。如果一个模块显示为 lsmod,则它已被加载。模块未检测到 USB 设备是您需要帮助解决的问题吗?
  • 没有,我的模块正在检测 USB 设备,但要让它出现在 lsmod 中,我需要拔下并重新插入。当然这只会发生一次,就在驱动程序被安装后。

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


【解决方案1】:

我对你到底在问什么有点困惑。

您设备的驱动程序应该支持“probe”调用。当插入新设备时,较低级别的 USB 驱动程序将检测并枚举设备。找到每个设备后,它会调用所有注册的 USB 驱动程序的探测函数,传递新找到的设备的引用。这使每个驱动程序都有机会“声明”该设备是它自己的,如果它认为应该使用它来驱动设备。

当插入设备或(简单地说)加载和注册新的 USB 模块时,此枚举将自动发生。

【讨论】:

  • 假设没有当前加载的驱动程序声明该设备。如果以后有新的 USB 驱动程序向系统注册,它会自动获得设备所有权吗?
  • 是的,绝对 - 当注册新的 USB 驱动程序时,它会为无人认领的设备发送“轮询”。
  • hmm.. 有趣的是我没有看到.. 我的驱动程序中可能存在错误。
  • 实验了一下,插入驱动后好像没有调用probe函数,不知道是不是usb设备已经绑定了其他驱动
  • 让我四处挖掘,看看是否有一些旧代码可以查看。我已经这样做了一百万次了——只是几年而已。我有一些挥之不去的怀疑,这里可能还涉及另一种机制.. :-O
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
相关资源
最近更新 更多