強制為特定設備使用 USB 驅動程序
我在 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) 。它只是打開一個視窗,讓我與平板電腦進行互動。
案例:
如果我將平板電腦直接連接到“PC”,軟體將無法執行,會以錯誤 LIBUSB -99 錯誤結束。
如果我通過便宜的 USB 2.0 HUB 連接平板電腦,軟體將毫無問題地執行。
電腦有 (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