Es ist erstaunlich, wie viel Dokumentation Sie für Video4Linux2 finden können - und nichts davon erklärt tatsächlich, was Video4Linux ist .
Erstens ist video4linux2 ein Linux - Treiber Rahmen . Framework-Treiber steuern Geräte nicht direkt. Stattdessen bieten sie ein abstraktes Modell einer Geräteklasse, in diesem Fall Videogeräte, die von Anwendungen verwendet werden können. Treiber-Frameworks bieten drei Hauptvorteile:
- Bereitstellung einer einheitlichen API für Anwendungen zur Verwendung mit einer Vielzahl von physischen Geräten, unabhängig davon, ob diese über USB, PCIe, MIPI, Ethernet oder einen anderen Datentransportbus verbunden sind
- Im Kernel enthalten Frameworks den Codetyp, der in fast allen Gerätetreibern einer bestimmten Klasse benötigt wird, wodurch das Volumen 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 Matroschka-Modell ist im Linux-Kerneltreiberbaum sehr verbreitet. V4L2 ist eines der komplexeren Beispiele, da einige Kamerageräte den Zugriff auf große Gruppen von Untergeräten in mehreren Schichten erfordern, die die Kamera steuern und die Ausgabe der Kamera zwischen verschiedenen Komponenten wie Bildprozessoren leiten.
Sie können weiterhin direkt aus dem Benutzerbereich mit einer Gerätedatei und "ioctl" -Systemaufrufen auf den UVC-Treiber zugreifen, ohne den V4L2-Treiber zu durchlaufen, und Sie können weiterhin direkt aus dem Benutzerbereich mit der Gerätedatei und "ioctl" auf den zugrunde liegenden USB-Treiber zugreifen.
Als allgemeines Framework, das Funktionen bietet, die einer Vielzahl von Geräten gemeinsam sind, bietet V4L2 nicht alle Funktionen, die der UVC-Treiber bieten könnte (vorausgesetzt, Ihr Gerät bietet tatsächlich mehr UVC-Funktionen als zur Unterstützung von V4L2 erforderlich ist). .
Wenn Sie also ein UVC-Gerät haben, das alle in der UVC-Spezifikation angegebenen Funktionen bietet, müssen Sie, um einige dieser Funktionen tatsächlich nutzen zu können, direkt über eine Gerätedatei und ein "ioctl" -System auf den UVC-Treiber zugreifen Aufrufe unter der Annahme, dass der Linux-Kernel-UVC-Treiber tatsächlich alle UVC-Spezifikationen unterstützt.
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 bietet selbst keine UVC- oder USB-Unterstützung oder Unterstützung für USB-Hardware auf niedrigerer Ebene.