Soweit ich weiß, ist der Gerätetreiber ein Teil von SW, der mit einem bestimmten Gerätetyp kommunizieren kann, der an einen Computer angeschlossen ist.
Im Falle einer USB-Webcam ist der verantwortliche Treiber UVC, der alle UVC-kompatiblen Geräte unterstützt. Dies bedeutet, dass das Betriebssystem oder ein anderes Computerprogramm auf Hardwarefunktionen zugreifen kann, ohne genaue Details der verwendeten Hardware kennen zu müssen.
Aus diesem Grund habe ich den UVC Linux-Gerätetreiber installiert, indem ich Folgendes ausgeführt habe:
opkg install kernel-module-uvcvideo
Webcam wurde vom Linux-Kernel erkannt : dev/video0
. Ich konnte jedoch immer noch kein Video-Streaming mit FFmpeg durchführen, da mir die V4L2-API fehlte. Ich habe V4L2 installiert, indem ich den Kernel konfiguriert habe.
Meine Fragen sind:
- Wie sind UVC-Treiber und V4L2 miteinander verbunden?
- Was ist der Zweck der V4L2-API?
- Wenn ich UVC nicht zuerst installiert habe, wird es mit V4L2 installiert?
LinuxTV verweist: Die Implementierung des uvcvideo-Treibers entspricht nur der V4L2-API . Dies bedeutet, dass UVC Teil der V4L2-API ist?
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:
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
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.
quelle