41-功能驱动01:UVC协议规范与驱动分析
专栏总目录文章目录概述一、概念:1.1、UVC1.2、V4L2二、内核配置UVC三、UVC驱动分析3.1、Kconfig3.2、uvc_driver.c3.2.1、uvc_driver3.2.2、uvc_probe3.3、uvc_fops3.3.1、uvc_v4l2_open3.3.2、uvc_v4l2_release3.3.3、video_ioctl23.3.4、uvc_ioctl_querycap概述UVC(USB Video Class)是USB视频类设备的标准协议,主流操作系统均内置UVC驱动,符合UVC规格的摄像头设备无需安装专用驱动即可使用。一、概念:1.1、UVCUVC全称为USB Video Class,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。如今的主流操作系统(如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later)都已提供 UVC 设备驱动,因此符合 UVC 规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用。使用 UVC 技术的包括摄像头、数码相机、类比影像转换器、电视棒及静态影像相机等设备。Linux UVC driver(uvc) 驱动适用于符合USB视频类规范的摄像头设备,它包括V4L2内核设备驱动和用户空间工具补丁。只要符合这类标准,则不同厂商的USB camera设备,不需要特定的driver就能在Linux下使用。1.2、V4L2简单的讲V4L2就是用来管理UVC设备的并且能够提供视频相关的一些API。那么这些API怎么使用或者能被谁使用呢。在Linux系统上有很多的开源软件能够支持V4L2。常见的有FFmpeg、opencv、Skype、Mplayer等等。我们知道在linux下,一切设备皆是是文件,可以像访问普通文件一样对其进行读写。因此,我们不难猜出,V4L