内核识别 USB 状态改变,但缺少正确的高级 USB 状态反馈

内核识别 USB 状态改变,但缺少正确的高级 USB 状态反馈
$ dmesg | grep usb 

... 显示插入/拔出 USB 时的状态变化

$ lsusb -v

将 USB 列为“集线器”

$ usb-devices

没有给我想要的输出:

T:  Bus=02 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  6 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=06c2 ProdID=007b Rev=01.01
S:  Manufacturer=Phidgets Inc.
S:  Product=PhidgetStepper
S:  SerialNumber=267330
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=96mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid

... 但反而:

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480 MxCh= 3
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev=03.05
S:  Manufacturer=Linux 3.5.0-mt9v034+ ehci_hcd
S:  Product=OMAP-EHCI Host Controller
S:  SerialNumber=ehci-omap.0
C:  #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub

有什么想法可以解释为什么低级内核能够识别 USB 的变化...但却无法对设备进行更高级别的识别(例如usb-devices)?

还值得注意的是,这是试图控制 phidgets 步进机,并在 Linux 上进行了验证正确的安装这些方向

在主机启动时我也碰巧通过以下方式收到此错误dmesg

[    0.152526] usbhs_omap usbhs_omap: xclk60mhsp2_ck set parentfailed error:-22

我刚刚发现这个新命令:

$ hwinfo --usb

恰巧给出了一个充满错误的输出:

hal.1: read hal dataprocess 1711: arguments to dbus_move_error() were incorrect, assertion "(dest) == NULL || !dbus_error_is_set ((dest))" failed in file ../../dbus/dbus-errors.c line 282.
This is normally a bug in some application using the D-Bus library.
libhal.c 3483 : Error unsubscribing to signals, error=The name org.freedesktop.Hal was not provided by any .service files
07: USB 00.0: 10a00 Hub                                         
[Created at usb.122]
Unique ID: k4bc.qEeA4IsuqFC
SysFS ID: /devices/platform/usbhs_omap/ehci-omap.0/usb1/1-0:1.0
SysFS BusID: 1-0:1.0
Hardware Class: hub
Model: "Linux 3.5.0-mt9v034+ ehci_hcd OMAP-EHCI Host Controller"
Hotplug: USB
Vendor: usb 0x1d6b "Linux 3.5.0-mt9v034+ ehci_hcd"
Device: usb 0x0002 "OMAP-EHCI Host Controller"
Revision: "3.05"
Serial ID: "ehci-omap.0"
Driver: "hub"
Driver Modules: "usbcore"
Speed: 480 Mbps
Module Alias: "usb:v1D6Bp0002d0305dc09dsc00dp00ic09isc00ip00"
Config Status: cfg=new, avail=yes, need=no, active=unknown

编辑:

安装 hal 后

$ sudo apt-get install hal

输出

$ hwinfo --usb

清理:

07: USB 00.0: 10a00 Hub                                         
[Created at usb.122]
UDI: /org/freedesktop/Hal/devices/usb_device_1d6b_2_ehci_omap_0_if0
Unique ID: k4bc.qEeA4IsuqFC
SysFS ID: /devices/platform/usbhs_omap/ehci-omap.0/usb1/1-0:1.0
SysFS BusID: 1-0:1.0
Hardware Class: hub
Model: "Linux 3.5.0-mt9v034+ ehci_hcd OMAP-EHCI Host Controller"
Hotplug: USB
Vendor: usb 0x1d6b "Linux 3.5.0-mt9v034+ ehci_hcd"
Device: usb 0x0002 "OMAP-EHCI Host Controller"
Revision: "3.05"
Serial ID: "ehci-omap.0"
Driver: "hub"
Driver Modules: "usbcore"
Speed: 480 Mbps
Module Alias: "usb:v1D6Bp0002d0305dc09dsc00dp00ic09isc00ip00"
Config Status: cfg=new, avail=yes, need=no, active=unknown

启动似乎也引发了一个问题:

$ dmesg grep | USB

启动时显示这两个错误:

[    0.067077]  usbhs_omap: alias fck already exists
...
[    0.152496] usbhs_omap usbhs_omap: xclk60mhsp2_ck set parentfailed error:-22

根据要求:

$ sudo uname -a
Linux statler 3.5.0-mt9v034+ #1 PREEMPT Thu May 30 22:23:53 UTC 2013 armv7l armv7l armv7l GNU/Linux

... 以及来自:$ sudo lsusb -v 的输出

https://gist.github.com/delinquentme/890532515002c503815e

答案1

您的 USB 是否在 BIOS 和 Linux 中配置为传统模式和/或 USB 3.0?看起来它可能正在尝试使用其中之一,但两者都未设置。

查找 hwinfo --usb 输出中给出的供应商 ID 表明您的视频和/或 USB 驱动程序配置不正确。由于您需要 EHCI 才能使 USB 正常工作,并且这表明您的 HAL 正在抛出错误,因此可以肯定地说,您的 USB 问题就是由此引起的。

更新:看来该主板的某些版本可能不支持 USB 2.0 或者可能需要内置 USB_OTG 支持。我找到了一些 Beagle 主板指南,应该涵盖了你可能拥有的任何设置,但可能性太多,无法在此全部涵盖。

PS 如果您正在使用 beagleboard 之外的东西,这些仍然会为该芯片提供良好的信息,但当然您不会想将任何东西直接刷入您的设备。

要了解某些 USB 类型之间的差异以及它们的功能,请参见: http://elinux.org/BeagleBoard#EHCI

适用于不同 USB 配置的主板的 uboot 补丁:
https://groups.google.com/forum/#!topic/beagleboard/2xhpUT2jzLE/discussion

适用于 OMAP 的核心 Linux USB 驱动程序:
http://cateee.net/lkddb/web-lkddb/MFD_OMAP_USB_HOST.html

希望这可以帮助!

相关内容