您可以找到Video4Linux2的大量文档,这令人惊讶,而实际上却没有任何内容解释Video4Linux2 是什么。
首先,Video4Linux2是Linux驱动程序框架。框架驱动程序实际上并不直接控制设备。相反,它们提供了某种设备类别的抽象模型,在这种情况下,视频设备供应用程序使用。驱动程序框架具有三个主要优点:
- 为应用程序提供统一的API,以与各种物理设备一起使用,无论是通过USB,PCIe,MIPI,以太网还是其他类型的数据传输总线进行连接
- 在内核中,框架包含特定类的几乎所有设备驱动程序中所需的代码类型,从而大大减少了不同代码的数量
- 在内核中,框架为编写新的底层驱动程序提供了蓝图,这些驱动程序实际上控制着硬件,从而简化了驱动程序的开发。
因此,V4L2驱动程序是驱动UVC驱动程序的高级驱动程序,该驱动程序驱动可能正在驱动甚至更低级别的硬件驱动程序的USB驱动程序。
这个Matryoshka模型在Linux内核驱动程序树中非常常见。V4L2是更复杂的示例之一,因为某些摄像头设备需要访问多层子设备组,这些子设备可以控制摄像头并在各种组件(例如图像处理器)之间路由摄像头的输出。
您仍然可以使用设备文件和“ ioctl”系统调用直接从用户空间访问UVC驱动程序,而无需通过V4L2驱动程序,并且仍可以使用它的设备文件和“ ioctl”直接从用户空间访问底层USB驱动程序。
作为提供各种设备通用功能的通用框架,V4L2无法为您提供UVC驱动程序可以提供的所有功能(假设您的设备实际上提供了比支持V4L2更多的UVC功能) 。
因此,如果要拥有确实提供UVC规范中指定的所有功能的UVC设备,则为了实际使用其中的某些功能,您需要直接通过设备文件和“ ioctl”系统访问UVC驱动程序假设Linux内核UVC驱动程序实际上支持所有UVC规范。
但是,
uvcvideo驱动程序实现仅遵守V4L2 API
是,在当前的Linux内核中,UVC驱动程序实际上不提供比V4L2所需的更多UVC功能支持。
内核中的V4L2支持本身并不提供UVC或USB支持或较低级别的USB硬件支持。