web-dev-qa-db-ja.com

特定のデバイスに対して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)を実行しています。ウィンドウを開いて、タブレットを操作するだけです。

ケース:

1)タブレットを「PC」に直接接続すると、ソフトウェアが機能せず、LIBUSB -99エラーで終了します。

2)安価なUSB 2.0ハブを介してタブレットを接続すると、ソフトウェアは問題なく実行されます。

3)コンピューターにはUSB 3.0ポートが2つ(2つ)あります。最初の2つのテストを繰り返しましたが、ハブが中央にある場合にのみタブレットが機能します。

タブレットを3.0ポートに接続すると、BUS Class = root_hub with driver xhci_hcdはデバイスを処理しますが、ドライバーはusbhid / 12M(デバイスはまだUSB 1.1です)。

ワコムのソフトウェアは、内部タイムアウトを LIBUSB_BULK_TRANSFER に変更することで修正済みです。タブレットが直接接続されていても、ハブを介して接続されていても、ソフトウェアは正しく動作します。

問題は、このハードウェアでデバイスの動作が遅い理由を理解する方法を見つける必要があるでしょう。これは、3000台のコンピューターから約350の場合にのみこのエラーが表示されるためです。これらはすべて同じモデル、同じバージョン、同じベンダー、同じOSです。 (クローンのように)。

たぶん、特定のチップセットまたは低品質のUSBチップセットに関連するものですか?

Hwinfo、lsusb、lsusb -tからのすべての情報は、コンピューターで同じです(vimdiffで比較)。

私が知っていること:

  • libusb_bulk_transferの実行速度が遅くなっています(不明な理由により)
  • O.Sは、デバイスが明らかに2.0として機能する場合、デバイスをUSB 1.1として処理しています。
  • 同じHW/SWを備えた約3,000台のPCでは、このエラーは約350以下でのみ発生します。 (同じBIOSバージョン/同じOSおよびインストールされているソフトウェア)。

よろしく。

M.

2
Miguel Ortiz

うーん...私は多くのことを試しました:

  • Java追加のパラメーターを指定して実行し、アプリケーションが正しく実行されるかどうかを確認する
  • デバイスのBIOSを更新しようとしました(ただし、古すぎて に更新がありません
  • 取得のohciドライバーを無効にする方法を探し、udevを使用してそれを達成しましたが、デバイスが認識されないか、別のドライバーを使用します。 (* HCDの組み込みモジュールを作成しても意味がありません。結果はまったく同じです)

最後に私はあきらめて回避策を講じ、libwgssSTU.soドライバーでlibusbのusbバルク操作のタイムアウトを設定しました。Wacomデモボタンは次のように設定すると失敗します。

EncodingMode.EncodingMode_24bit_Bulk

JIRAのワコム開発者サポートに私たちの創設者(私は同僚と共同で作業しました)を渡しました。彼らはlibwgssSTU.soのソースコードに変更を追加します。 ドライバー、新しいドライバーは正常に動作しますが、この特定のハードウェアでは2〜3秒の遅延がかかります。

ソフトウェアがマシン上でランダムに1/60または1/30または1/45で実行される理由を見つけることはできませんでしたが、少なくとも回避策は見つかりました。

0
Miguel Ortiz

まず、この動作の理由はUSB固有のようです。 Kernel.org( ここ )は次のように述べています:

USB 1.1デバイスがUSB 2.0ハブにプラグインすると、ハブの「Transaction Translator」(TT)を介してEHCIコントローラーとやり取りします。これにより、低速またはフルスピードのトランザクションが、転送帯域幅を浪費しない高速の「スプリットトランザクション」に変わります。 。

ブラックリストに載っている可能性がある特定のUSB 1.0モジュール(USB 2.0はUSB 1.1デバイスを処理します)がないため、これはオプションではありません。

製品ページには、デバイスがUSB 2と記載されています。( こちら )デバイスはUSB 3ではないため、すべてのモジュールをアンロードしてXHCIを最初にロードして、デバイスを取得することはできません。

試してみてください:udevadm triggerそして、正しく認識されるかどうかを確認してください。

そして、私の努力に賛成することを忘れないでください! :p

0
WGRM