ウェブカメラのLinuxデバイスドライバーについて


11

私の知る限り、デバイスドライバーは、コンピューターに接続されている特定の種類のデバイスと通信できるSWの一部です。

USB Webカメラの場合、責任のあるドライバーは、UVC準拠のデバイスをサポートするUVCです。これは、使用されているハードウェアの詳細を正確に知る必要なく、OSまたは他のコンピュータープログラムがハードウェア機能にアクセスできるようにすることを意味します。

このため、次のコマンドを実行してUVC Linuxデバイスドライバーをインストールしました。

opkg install kernel-module-uvcvideo

ウェブカメラはLinuxカーネルで認識されています:dev/video0。ただし、V4L2 APIがないため、FFmpegでビデオストリーミングを実行できませんでした。カーネルを設定してV4L2をインストールしました。

私の質問は:

  • UVCドライバーとV4L2はどのようにリンクされていますか?
  • V4L2 APIの目的は何ですか?
  • 最初にUVCをインストールしていない場合、V4L2と共にインストールされますか?

LinuxTVの言及:uvcvideoドライバーの実装は、V4L2 APIのみに準拠しています。これは、UVCがV4L2 APIの一部であることを意味しますか?

回答:


7

USBビデオクラス(UVC)は、USB Webカメラなどが準拠するはずの仕様です。このようにして、UVC準拠デバイスのサポートを実装するすべてのシステムで使用できます。

V4L2は、Linux UVC実装が依存するLinuxカーネルビデオサブシステムです。つまり、カーネルでは UVCサポートにはV4L2が必要ですが、その逆は必要ありません。

V4L2 APIは、ここに記載さているユーザー空間 プログラミングインターフェイスを指します


私が理解した場合、V4L2のないカーネルは、uvcドライバーがインストールされていても、UVC準拠のデバイスをサポートできません。
dempap 2014

2
はい。ドライバーはカーネルの一部です。別々のモジュールとしてコンパイルされる場合もありますが、これらはカーネルソースを使用してコンパイルされます。それが実行中のカーネルと同じソースバージョンでない場合、それらは機能せず、同じ構成からコンパイルされていない場合、重大な不整合が発生する可能性があります。たとえば、カーネルにサウンドコア(ALSA)が組み込まれていない(またはモジュールとして利用できない)場合、サウンドカード用のモジュラーハードウェアドライバーは役に立ちません。
goldilocks 2014

13

Video4Linux2のドキュメントをどれほど多く見つけることができるかは驚くべきことです。Video4Linux 何であるかを実際に説明しているドキュメントありません。

まず、Video4Linux2はLinuxドライバーフレームワークです。フレームワークドライバーは、実際にはデバイスを直接制御しません。代わりに、これらはデバイスのあるクラスの抽象モデルを提供します。この場合、アプリケーションが使用するビデオデバイスです。ドライバーフレームワークには、3つの主な利点があります。

  1. USB、PCIe、MIPI、イーサネット、またはその他のタイプのデータ転送バスで接続されているかどうかに関係なく、アプリケーションが非常に広範囲の物理デバイスで使用できる統合APIを提供します
  2. カーネルでは、フレームワークには、特定のクラスのほとんどすべてのデバイスドライバーで必要とされるタイプのコードが含まれているため、異種コードの量が大幅に削減されます。
  3. カーネルでは、フレームワークは、ハードウェアを実際に制御する新しい下位レベルのドライバーを作成するための青写真を提供し、ドライバー開発を簡素化します。

したがって、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ハードウェアサポートを提供しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.