Linux

強制為特定設備使用 USB 驅動程序

  • March 13, 2020

我在 Ubuntu 16.04 上使用 Wacom STU-530 設備時遇到了一個非常奇怪的問題。

如果我將平板電腦連接到任何埠,它將以 USB 1.1 啟動(非常慢),因為它會載入驅動程序:ohci-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 執行沒有問題。

附加資訊:

我正在從Wacom 的 SDK執行 DemoButtons (Java) 。它只是打開一個視窗,讓我與平板電腦進行互動。

案例:

  1. 如果我將平板電腦直接連接到“PC”,軟體將無法執行,會以錯誤 LIBUSB -99 錯誤結束。

  2. 如果我通過便宜的 USB 2.0 HUB 連接平板電腦,軟體將毫無問題地執行。

  3. 電腦有 (2/2) 個 USB 3.0 埠,我已經對它們重複了前兩個測試,只有當集線器在中間時,平板電腦才能工作。

將平板電腦連接到 3.0 埠時,BUS Class = root_hub with driver xhci_hcd將處理設備,但驅動程序將處理usbhid / 12M(因此設備仍然是 USB 1.1)。

我已經通過更改LIBUSB_BULK_TRANSFER的內部超時修復了 Wacom 的軟體,因此無論平板電腦是直接連接還是通過集線器連接,軟體都能正常執行。

問題是,我需要找到一種方法來理解為什麼設備在此硬體中執行速度較慢,因為從 3000 台電腦僅在 ~350 台電腦中出現此錯誤,它們都是相同的型號、相同的版本、相同的供應商、相同的作業系統(如複製)。

也許與特定晶片組或低質量 USB 晶片組有關?

來自 hwinfo、lsusb、lsusb -t 的所有資訊在電腦中都是相同的(與 vimdiff 相比)。

我知道的:

  • libusb_bulk_transfer 執行速度較慢(出於某種未知原因)
  • 當設備明顯作為 2.0 工作時,作業系統將設備作為 USB 1.1 處理
  • 在大約 3,000 台具有相同硬體/軟體的 PC 中,這個錯誤只會出現在大約 350 台左右。(安裝相同的 BIOS 版本/相同的作業系統和軟體)。

問候。

M。

嗯……我已經嘗試了很多事情:

  • 使用額外參數執行 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,但至少我找到了解決方法。

首先,這種行為的原因似乎是 USB 特定的。Kernel.org(此處)聲明如下:

當 USB 1.1 設備插入 USB 2.0 集線器時,它們通過集線器中的“事務轉換器”(TT)與 EHCI 控制器互動,將低速或全速事務轉換為不浪費傳輸頻寬的高速“拆分事務” .

由於沒有特定的 USB 1.0 模組(USB 2.0 將處理 USB 1.1 設備),可能會被列入黑名單,因此這是沒有選擇的。

產品頁面將設備聲明為 USB 2。(here)由於設備不是 USB 3,我們不能解除安裝所有模組並先載入 XHCI,讓它抓取設備。

請嘗試: udevadm trigger 看看它是否被正確辨識。

並且不要忘記支持我的努力!:p

引用自:https://unix.stackexchange.com/questions/570996