2016-04-11 27 views
0

2つの異なるモードで動作するUSB​​ HIDデバイスがあります。モードの選択は、送信されたUSB列挙/初期化パケットのシーケンスに基づいて行われます。LinuxがUSB HIDデバイスを初期化できないようにする方法

私はRaspbianを実行しているRaspberry Pi 3を使用していますが、デスクトップのUbuntuディストリビューション用にコードをコンパイルすると同じ問題が発生します。

私が持っている問題は、LinuxがUSBデバイスをHIDデバイスとして認識し、デバイスの起動に必要と思われる一連のコマンドを送信していることです。正しく動作し、デバイスは「モード1」で起動します。

しかし、 "Mode 2"でデバイスを起動する必要があります。これを行うには、わずかに異なる列挙/初期化コマンドのセットを送信する必要があります。

私はLinuxには慣れていますが、LibUSBとLibUSBDotNetはWindowsの下で非常に経験があり、Windowsの下で私が望む動作を得ることができます。

Windowsは、列挙し、デバイスをUSB HIDデバイスとして認識し、デバイスが「モード1」になるという結果になると、それを初期化します。これを行うウィンドウを防ぐために、デバイスのLibUSBフィルタドライバを作成して、デフォルトのドライバを置き換えて、Windowsが最初の列挙を行い、デバイスのVIDとPIDがLibUSBフィルタドライバによって管理されるようにします。 WindowsのHIDドライバより)、列挙/初期化を停止します。これにより、自分のコードを引き継ぎ、初期化を「モード2」に完了させることができます。

Linuxがこのデバイスを完全に列挙/初期化するのを止めるにはどうすればいいですか?多分、私はudevのルールなどで何かをする必要があるかもしれませんが、私はLinuxに慣れていないと思いません。

すべてのヘルプは非常にあなたが右の持っている

+0

それを使用することができ、カーネルから離脱し、モード2への変更のために後半に独自の魔法をしているのですか? – dryman

答えて

1

を高く評価し、あなたはudevルールでプレイしています。

まず、デバイスを特定する必要があります。あなたのデバイスのidProductとidVendorを見つけてください。あなたは使用することができます。

lsusb 

を次にrules.dフォルダ(/etc/udev/rules.d)に名前で新しいファイルを作成します。

10-my-usb.rules 

をこのファイルに次の行を追加します

SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="XXXX", MODE="666", GROUP+="plugdev" 

は、その後、あなたのudevルールを再起動する前に、あなたが得る値でXXXXを置き換えます

sudo udevadm trigger 

その後抜いて、接続し直し、通常、あなたは

関連する問題