【问题标题】:Issue with usb deregistration on linux kernellinux内核上的usb注销问题
【发布时间】:2021-07-31 20:09:43
【问题描述】:

我在 omap3 处理器上使用 Linux 4.19.55 armv7l。在我的目标上,有一个 USB 调制解调器,它从一个 gpio 引脚值(在 /sys/class/gpio 下定义)获取电源。有时我更改此 gpio 引脚的 value 参数以降低硬件,同时我经常收到错误(由 musb_handle_intr_disconnect 从内部 drivers/usb/musb/musb_core.c 抛出),如下所示:

“musb_handle_intr_disconnect 843:未处理的 DISCONNECT 转换(a_idle)”

我尝试通过挂载 debugfs 并使用 usbmon 从相关总线捕获数据来调试问题。总线 ID 从 lsusb 输出中识别并通过观察 /sys/kernel/debug/usb/devices 确认。我观察到,只要出现上述错误,usbmon 就无法捕获数据。在没有错误的情况下,usbmon 会捕获来自相关总线的流量。请帮助如何调试此问题。

【问题讨论】:

  • 我们现在处于 v5.13-rc1。 v5.10 是 LTS,你能在其中一个上重现吗?
  • 是的,这个问题在最新的内核上也可以重现。我花了一些时间来升级驱动程序的版本。我发现最新内核也存在问题。
  • 嗯...在切换 GPIO 之前,调制解调器的驱动程序不应该关心总线静止吗?如果没有内核端驱动,恐怕你也无能为力。我建议将电子邮件发送到 linux-usb@ 邮件列表。
  • 内核端 USB 驱动程序是在集线器下的任何总线上取消注册设备的驱动程序。 usb 驱动程序的状态机的处理仍在随着每个新内核的发展而发展。其中一项提交帮助我解决了这个问题。

标签: usb linux-device-driver embedded-linux usb-debugging


【解决方案1】:

刚刚检查了内核分支上的提交修复了这个问题,该问题存在于粘合层处理的状态中。这是the required commit

【讨论】:

  • 提到的提交是在 v5.6-rc1 的内核中。你怎么会在上面的评论中说这个问题在最新的内核上也可以重现我不明白。
  • 0andriy 它发生在我使用 v5.13 时,正如您在第一条评论中提到的那样。此外,该解决方案在较旧的内核上并不容易适应。我首先用 5.13 修补了 4.19,当它没有按预期工作时,我去寻找针对跨多个内核版本的 USB 问题所做的特定提交。因此,达到了解决方案。
猜你喜欢
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多