Es ist erstaunlich, wie viel Dokumentation man für Video4Linux2 finden kann - und keine davon erklärt wirklich was Video4Linux ist .
Erstens ist Video4Linux2 ein Framework für Linux-Treiber . Framework-Treiber steuern Geräte nicht direkt. Stattdessen stellen sie ein abstraktes Modell einer Geräteklasse bereit, in diesem Fall Videogeräte, die von Anwendungen verwendet werden können. Treiber-Frameworks bieten drei Hauptvorteile:
- Stellen Sie eine einheitliche API für Anwendungen zur Verfügung, die mit einer sehr breiten Palette von physischen Geräten verwendet werden können, unabhängig davon, ob sie über USB, PCIe, MIPI, Ethernet oder andere Arten von Datentransportbussen verbunden sind
- Im Kernel enthalten Frameworks den Codetyp, der in fast allen Gerätetreibern einer bestimmten Klasse benötigt wird, wodurch die Menge an unterschiedlichem Code erheblich reduziert wird
- Im Kernel bieten Frameworks eine Blaupause zum Schreiben neuer Treiber auf niedrigerer Ebene, die die Hardware tatsächlich steuern, wodurch die Treiberentwicklung vereinfacht wird.
Der V4L2-Treiber ist also ein High-Level-Treiber, der den UVC-Treiber steuert, der den USB-Treiber steuert, der möglicherweise einen noch niedrigeren Hardwaretreiber steuert.
Dieses Matryoshka-Modell ist im Linux-Kernel-Treiberbaum sehr verbreitet. V4L2 ist eines der komplexeren Beispiele, da einige Kamerageräte den Zugriff auf große Gruppen von Untergeräten erfordern in mehreren Schichten, die die Kamera steuern und die Ausgabe der Kamera zwischen verschiedenen Komponenten wie Bildprozessoren weiterleiten.
Sie können immer noch direkt vom Userspace auf den UVC-Treiber zugreifen, indem Sie eine Gerätedatei und „ioctl“-Systemaufrufe verwenden, ohne den V4L2-Treiber zu durchlaufen, und Sie können immer noch direkt vom Userspace aus auf den zugrunde liegenden USB-Treiber zugreifen, indem Sie seine Gerätedatei und „ioctl“ verwenden.
Als allgemeines Framework, das Funktionen bereitstellt, die einer breiten Palette von Geräten gemeinsam sind, bietet Ihnen V4L2 nicht alles der Funktionalität, die der UVC-Treiber könnte bereitstellen (vorausgesetzt, Ihr Gerät bietet tatsächlich mehr UVC-Funktionalität, als für die Unterstützung von V4L2 erforderlich ist).
Wenn Sie also ein UVC-Gerät haben, das alle in der UVC-Spezifikation angegebenen Funktionen bietet, müssten Sie, um einige dieser Funktionen tatsächlich zu verwenden, direkt über eine Gerätedatei und ein „ioctl“-System auf den UVC-Treiber zugreifen Aufrufe, vorausgesetzt, dass der UVC-Treiber des Linux-Kernels tatsächlich alle UVC-Spezifikationen unterstützt.
Allerdings ist die Bedeutung von
Die Implementierung des uvcvideo-Treibers entspricht nur der V4L2-API
ist, dass der UVC-Treiber im aktuellen Linux-Kernel tatsächlich nicht mehr UVC-Funktionsunterstützung bietet, als für V4L2 benötigt wird.
Die V4L2-Unterstützung im Kernel selbst bietet keine UVC- oder USB-Unterstützung oder USB-Hardwareunterstützung auf niedrigerer Ebene.
Die USB-Videoklasse (UVC) ist eine Spezifikation denen USB-Webcams usw. entsprechen sollen. Auf diese Weise können sie auf jedem System verwendet werden, das Unterstützung für UVC-kompatible Geräte implementiert.
V4L2 ist das Linux-Kernel-Videosubsystem, von dem die Linux-UVC-Implementierung abhängt. Mit anderen Worten, im Kernel UVC-Unterstützung erfordert V4L2, aber nicht umgekehrt.
Die V4L2-API bezieht sich auf einen Benutzerbereich Programmierschnittstelle, hier dokumentiert.