Video4Linux2のドキュメントをどれほど多く見つけることができるかは驚くべきことです。Video4Linux が何であるかを実際に説明しているドキュメントはありません。
まず、Video4Linux2はLinuxドライバーフレームワークです。フレームワークドライバーは、実際にはデバイスを直接制御しません。代わりに、これらはデバイスのあるクラスの抽象モデルを提供します。この場合、アプリケーションが使用するビデオデバイスです。ドライバーフレームワークには、3つの主な利点があります。
- USB、PCIe、MIPI、イーサネット、またはその他のタイプのデータ転送バスで接続されているかどうかに関係なく、アプリケーションが非常に広範囲の物理デバイスで使用できる統合APIを提供します
- カーネルでは、フレームワークには、特定のクラスのほとんどすべてのデバイスドライバーで必要とされるタイプのコードが含まれているため、異種コードの量が大幅に削減されます。
- カーネルでは、フレームワークは、ハードウェアを実際に制御する新しい下位レベルのドライバーを作成するための青写真を提供し、ドライバー開発を簡素化します。
したがって、V4L2ドライバーは、UVCドライバーを駆動する高レベルのドライバーであり、さらに低レベルのハードウェアドライバーを駆動している可能性のあるUSBドライバーを駆動します。
このマトリョーシカモデルは、Linuxカーネルドライバーツリーでは非常に一般的です。一部のカメラデバイスは、カメラを制御し、画像プロセッサなどのさまざまなコンポーネント間でカメラの出力をルーティングするいくつかのレイヤーのサブデバイスの大きなグループにアクセスする必要があるため、V4L2はより複雑な例の1つです。
V4L2ドライバーを経由せずに、デバイススペースと「ioctl」システムコールを使用してユーザースペースから直接UVCドライバーにアクセスできます。また、デバイスファイルと「ioctl」を使用して、ユーザースペースから直接基になるUSBドライバーにアクセスできます。
V4L2は、幅広いデバイスに共通の機能を提供する一般的なフレームワークであるため、UVCドライバーが提供できるすべての機能を提供するわけではありません(デバイスが実際にV4L2をサポートするために必要な数よりも多くのUVC機能を提供するとします) 。
したがって、UVC仕様で指定されているすべての機能を提供するUVCデバイスがある場合、これらの機能の一部を実際に使用するには、デバイスファイルと「ioctl」システムを介してUVCドライバに直接アクセスする必要があります。 LinuxカーネルのUVCドライバーが実際にすべてのUVC仕様をサポートしていると想定して呼び出します。
ただし、の意味
uvcvideoドライバーの実装はV4L2 APIのみに準拠しています
現在のLinuxカーネルでは、UVCドライバーは実際にはV4L2で必要とされる以上のUVC機能サポートを提供していません。
カーネルでのV4L2サポート自体は、UVCやUSBのサポート、または低レベルのUSBハードウェアサポートを提供しません。