ビデオファイルを使用してストリーミングして、実際のUVCデバイスのように見せる方法を探しています。
少し調べて見つけました。UVCガジェットしかし、これが私の要件を満たしているかどうかを判断することはできません。最後に、受信機に追加のソフトウェアをインストールせずにUSB経由で他のデバイスからビデオをストリーミングできるようにしたいので、UVCを使用する必要があります。ただし、現在は同じデバイスで実行され、UVCデバイスをシミュレートするツールのみが機能します。
これを行うためのツールはありますか?
答え1
USBは非対称です。 USBマスター(PC)とUSBスレーブ(デバイス)があります。これがUSBコネクタにマスターデバイス用A型とスレーブデバイス用B型の2種類がある理由です。どこでもType Aコネクタを使用するハードウェア設計者によって、これらの区別はますます曖昧になりつつありますが、USB OTGは2つの要件を同時に満たすことができます。 。
Linux USBガジェットデバイスは、USBスレーブコントローラのUSBデバイスを表すカーネルモジュールです。デバイスを表す組み込みLinuxシステムに接続するには、(スレーブ)ホストコントローラ(HC)が必要です。これはUSBコントローラドライバです。 PCにはハードウェアはありません。
しかし、これを行う別のカーネルモジュールがあります。シミュレーションUSBスレーブコントローラ:このdummy_hcd
モジュールは、接続するガジェットの仮想(スレーブ)ホストコントローラと、デバイスが表示される追加のUSBバスを提供する仮想(マスター)ホストコントローラを提供します。それ。
例:
# modprobe dummy_hcd
# lsusb
...
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# modprobe g_serial
# lsusb
...
Bus 005 Device 002: ID 0525:a4a7 Netchip Technology, Inc. Linux-USB Serial Gadget (CDC ACM mode)
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
2つの新しい装置ノードが生成される。 1つはガジェット/dev/ttyGS0
から、もう1つはデバイスを表す自動ロードモジュールから取得されます。一方の側に書き込み、もう一方の側に読み込んで通信するかどうかをテストできます。g_serial
/dev/ttyACM0
cdc_serial
g_webcam
小型ツールUVCドライバもあります。上記の新しい/dev/video*
デバイスが作成され、/dev/ttyGS0
ビデオをストリーミングできます。入力するこのデバイスはこのガジェットを使用します。ユーザー空間プログラムが実行する作業は次のとおりですuvc-gadget
。静的イメージをインポートするか、既存の他の「実際の」UVCデバイスを供給し、新しく作成されたデバイスにストリーミングして、/dev/video*
USBデバイスデータに実際のUVCデバイスを提供して出力することを確認できます。デバイスを使用してUSBホストに正しいインストール。
しかし、バスでは動作しないようですdummy_hcd
(今試してみました)。上記のように、第二 /dev/video*
デバイスはホスト側のUSBカーネルモジュールによって作成する必要があります。使用ウェブカメラ。しかし、そのようなことは起こらず、むしろUSBシステムが短時間で複雑すぎて、もはやキーボードとマウスを使用できなくなりました。
したがってg_webcam
、何か問題があるか、ビデオサブシステムが同じ識別子を使用して2つのデバイスを作成しようとすると、中断されたか、他の問題がある可能性があります。わかりません。
したがって、物理(スレーブ)ホストコントローラを搭載した物理組み込みシステムでのみ機能できます。
はい。これを行うためのツールがありますが、残念ながら、エミュレートされたデバイスを同じコンピュータ(通常のPC)に表示したい場合は、エミュレーションが問題になります。組み込みシステムではまだ動作できます(エミュレートされたデバイスをどこでどのように使用したいのかを明らかにしていません)。