データ転送のために、Windows 7 ホストと Linux デバイス間の USB 通信をセットアップする必要があります。デバイスで Linux カーネルをコンパイルして、Gadget Zero ドライバーをカーネルに含めることができました (ロード可能なモジュールとしてではなく - Linux バージョン 3.0.15)。私のプロジェクトにはいくつかの要件があり、それが Gadget Zero を選んだ理由でもあります。
1) Windows 7 ホストでは、カーネル モード ドライバーを使用して USB 接続を介して通信し、バルク データを送受信する必要があります。(速度は重要ではありません。一度に大量のデータを処理する必要はありません)。
2) Linux デバイスでは、USB リンクを介して簡単にデータを送受信することを除いて、USB 側の要件はありません。受信したデータは、最終的に別のカーネル モジュールの関数を呼び出すために「アンマーシャリング」されます (そして、それらの応答はパッケージ化されてホストに送り返されます)。
3) 複数の Linux デバイスがホストに接続されるため、接続されたデバイスを列挙してそれらと通信する簡単な方法が必要です。
そのため、要件のために、ガジェットシリアルに反対することにしました。Win 7 ホストのカーネル モード (KMDF) で仮想 COM ポートを介してデータを送受信する際に深刻な問題が発生しています。WinUSB は接続されたデバイスを開きたくないようです (私は VS2012 のテンプレートから KMDF Windows USB ドライバーを使用しています) また、Linux 側のガジェット シリアル ドライバーでは、データが送受信される関数が見つかりません。さらに、Linux デバイスで受信したデータは、何らかの理由でホストにエコー バックされるようです。(そしてこれをテストするために、Windows で簡単なユーザー モード アプリを作成しましたが、これは私のプロジェクトではダメです)。
Gadget Zero は、Linux 側でははるかにシンプルに見えます。USB ケーブルを Win7 ホストに接続すると、デバイスがデバイス マネージャーに表示されます。ただし、ここでも、リンクを介した通信に問題があります。Gadget Zero には 2 つのバルク エンドポイントがあるため、これは問題になりません。確かに、だれかが Gadget Zero を使って Windows ホストと Linux デバイスの間でデータ通信を可能にしましたか? Gadget Zero を使用すると、接続されている Linux デバイスを簡単に列挙して通信することができます。
秘訣は、Windows 側の通信をカーネル モードに保つことです。Gadget Zero、Windows 7 KMDF、およびいくつかのサンプル ソース コードを使用して、誰かが正しい方向に向けることができますか? 私のインターネット検索はあまり出てこないので、これまで誰もこれをやったことがないと信じるのに苦労しています. (およびほとんどがガジェット シリアルを使用したユーザー モード ソリューション)。
ありがとう!