强制对特定设备使用 USB 驱动程序

强制对特定设备使用 USB 驱动程序

我在 Ubuntu 16.04 上使用 Wacom STU-530 设备时遇到了一个非常奇怪的问题。

如果我将平板电脑连接到任何端口,它将以 USB 1.1 启动(非常慢),因为它会加载驱动程序:奥西-PCI

[  230.708046] usb 4-1: new full-speed USB device number 3 using ohci-pci
[  230.883203] usb 4-1: New USB device found, idVendor=056a, idProduct=00a5
[  230.883217] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  230.883226] usb 4-1: Product: STU-530
[  230.883234] usb 4-1: Manufacturer: Wacom Co.,Ltd.
[  230.883242] usb 4-1: SerialNumber: 8LZQ000683
[  230.896179] input: Wacom Co.,Ltd. STU-530 Pen as /devices/pci0000:00/0000:00:12.0/usb4/4-1/4-1:1.0/0003:056A:00A5.0009/input/input20
[  230.896691] wacom 0003:056A:00A5.0009: hidraw2: USB HID v1.10 Device [Wacom Co.,Ltd. STU-530] on usb-0000:00:12.0-1/input0

但如果我改为连接一个(非常便宜的 USB 集线器),然后将平板电脑连接到 USB 集线器,则正确的驱动程序ehci-pci已配置且平板电脑以 USB 2.0 运行:

[  335.120117] usb 1-1.1: new full-speed USB device number 5 using ehci-pci
[  335.214488] usb 1-1.1: New USB device found, idVendor=056a, idProduct=00a5
[  335.214501] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  335.214511] usb 1-1.1: Product: STU-530
[  335.214519] usb 1-1.1: Manufacturer: Wacom Co.,Ltd.
[  335.214527] usb 1-1.1: SerialNumber: 8LZQ000683
[  335.221870] input: Wacom Co.,Ltd. STU-530 Pen as /devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1.1/1-1.1:1.0/0003:056A:00A5.000A/input/input23
[  335.222255] wacom 0003:056A:00A5.000A: hidraw2: USB HID v1.10 Device [Wacom Co.,Ltd. STU-530] on usb-0000:00:12.2-1.1/input0

有没有办法在连接平板电脑时强制使用 ehci-pci?也许使用udev?

PD:设备在其他电脑上运行2.0没有问题。

附加信息:

我正在执行 DemoButtons (Java)Wacom 的 SDK。它只是打开一个窗口,让我与平板电脑交互。

案例:

1) 如果我将平板电脑直接连接到“PC”,软件将无法运行,将以错误 LIBUSB -99 错误结束。

2) 如果我通过便宜的 USB 2.0 HUB 连接平板电脑,软件将运行没有问题。

3) 计算机有(2/两个)USB 3.0 端口,我已对它们重复了前两项测试,并且平板电脑仅在集线器位于中间时才能工作。

将平板电脑连接到 3.0 端口时,BUS Class = root_hub with driver xhci_hcd将处理设备,但驱动程序将处理usbhid / 12M(因此设备仍然是 USB 1.1)。

我已经通过更改内部超时来修复 Wacom 的软件LIBUSB_BULK_TRANSFER因此无论平板电脑是直接连接还是通过集线器连接,软件都会正确运行。

问题是,我需要找到一种方法来理解为什么设备在该硬件中运行速度较慢,因为从 3000 台计算机开始,只有大约 350 台计算机出现此错误,所有这些计算机都是相同的型号、相同的版本、相同的供应商、相同的操作系统(如克隆)。

也许与特定芯片组或低质量 USB 芯片组有关?

来自 hwinfo、lsusb、lsusb -t 的所有信息在计算机中都是相同的(通过 vimdiff 进行比较)。

我知道的:

  • libusb_bulk_transfer 运行速度较慢(由于某些未知原因)
  • 当设备明显以 2.0 方式工作时,操作系统将设备作为 USB 1.1 进行处理
  • 在大约 3,000 台具有相同硬件/软件的 PC 中,此错误只会在大约 350 台中出现。 (相同的 BIOS 版本/安装相同的操作系统和软件)。

问候。

M。

答案1

首先,此行为的原因似乎是 USB 特定的。内核.org(这里) 规定如下:

当 USB 1.1 设备插入 USB 2.0 集线器时,它们通过集线器中的“事务转换器”(TT) 与 EHCI 控制器交互,该转换器将低速或全速事务转换为高速“分割事务”,从而不会浪费传输带宽。

由于没有可能被列入黑名单的特定 USB 1.0 模块(USB 2.0 将处理 USB 1.1 设备),因此这是没有选择的。

产品页面指出该设备为 USB 2。(这里)由于设备不是USB 3,我们无法先卸载所有模块并加载XHCI,以让它抓取设备。

请尝试:udevadm触发器并查看它是否被正确识别。

并且不要忘记为我的努力点赞! :p

答案2

嗯......我尝试了很多事情:

  • 使用额外参数运行 java 以查看应用程序是否可以正确运行
  • 尝试更新设备的BIOS(但它太旧了并且没有更新
  • 寻找一种方法来禁用 ohci 驱动程序,通过使用 udev 实现它,但设备无法被识别或将使用另一个驱动程序。 (制作*HCD的内置模块是没有意义的,结果是完全一样的)

最后我放弃并寻求解决方法,在 libwgssSTU.so 驱动程序上为 libusb 的 USB 批量操作设置超时,Wacom 演示按钮将通过设置失败:

EncodingMode.EncodingMode_24bit_Bulk

我已将我们的基础(我与一位同事合作)传递给 JIRA 的 Wacom 开发人员支持,他们会将更改添加到源代码中libwgssSTU.so驱动程序,新驱动程序工作正常,但在此特定硬件中需要 2 到 3 秒的延迟。

我无法找出为什么软件会在机器上随机运行 1/60 或 1/30 或 1/45,但至少我找到了解决方法。

相关内容