Es sorprendente la cantidad de documentación que puede encontrar para Video4Linux2, y nada de eso explica qué es Video4Linux .
Primero, Video4Linux2 es un marco de controlador de Linux . Los controladores de framework no controlan los dispositivos directamente. En cambio, proporcionan un modelo abstracto de alguna clase de dispositivo, en este caso dispositivos de video para que las aplicaciones los usen. Los marcos de controladores proporcionan tres beneficios principales:
- Proporcione una API unificada para que las aplicaciones las utilicen con una amplia gama de dispositivos físicos, ya sea que estén conectados por USB, PCIe, MIPI, Ethernet u otro tipo de bus de transporte de datos
- En el núcleo, los marcos contienen el tipo de código que se necesita en casi todos los controladores de dispositivo de una clase en particular, lo que reduce en gran medida el volumen de código disparejo.
- En el núcleo, los marcos proporcionan un plan para escribir nuevos controladores de nivel inferior que realmente controlan el hardware, lo que simplifica el desarrollo de controladores.
Entonces, el controlador V4L2 es un controlador de alto nivel que maneja el controlador UVC, que maneja el controlador USB que podría estar manejando un controlador de hardware de nivel aún más bajo.
Este modelo de Matryoshka es muy común en el árbol de controladores del kernel de Linux. V4L2 es uno de los ejemplos más complejos porque algunos dispositivos de cámara requieren acceder a grandes grupos de subdispositivos en varias capas que controlan la cámara y enrutan la salida de la cámara entre varios componentes, como los procesadores de imágenes.
Todavía puede acceder al controlador UVC directamente desde el espacio de usuario utilizando un archivo de dispositivo y llamadas al sistema "ioctl", sin pasar por el controlador V4L2, y aún puede acceder al controlador USB subyacente directamente desde el espacio de usuario utilizando su archivo de dispositivo y "ioctl" s.
Al ser un marco general que proporciona una funcionalidad común a una amplia gama de dispositivos, V4L2 no le brinda toda la funcionalidad que el controlador UVC podría proporcionar (suponiendo que su dispositivo realmente proporcione más funcionalidad UVC de la necesaria para admitir V4L2) .
Entonces, si tuviera un dispositivo UVC que proporcione todas las funciones especificadas en la especificación UVC, entonces para usar algunas de estas funciones necesitaría acceder al controlador UVC directamente a través de un archivo de dispositivo y un sistema "ioctl" llamadas, suponiendo que el controlador UVC del kernel de Linux de hecho sea compatible con todas las especificaciones UVC.
Sin embargo, el significado de
La implementación del controlador uvcvideo es adherente solo a la API V4L2
es que en el actual controlador LinuxC del núcleo de Linux, de hecho, no proporciona más soporte para la función UVC de la necesaria para V4L2.
El soporte V4L2 en el kernel por sí solo no proporciona soporte UVC o USB o soporte de hardware USB de nivel inferior.