随笔分类 - linux / 设备驱动 / camera
摘要:前面的博客已经分析了USB摄像头驱动程序的框架,我们知道了USB摄像头驱动程序的重点在于1)描述符的分析;2)属性的控制(通过VC来设置);3)格式的选择(通过VS来设置);4)数据的获得(通过VS的URB来获得)。后面的博客就会从这4个方面进行深入的分析,本篇博客首先来看一下UVC驱动程序的描述符
阅读全文
摘要:UVC是属于USB行业规范中的USB设备类规范,用于USB接口的视频设备的一个统一的数据交换规范。其中UVC官方协议文档 UVC 1.5 Class specification是对整个UVC协议的框架做了规范,USB_Video_Example则规定了描述符等的数据结构和相关的一些其他相关规定。 1
阅读全文
摘要:usb摄像头驱动程序,里面涉及硬件的操作。比如说,想设置亮度的时候,需要把亮度的参数发给硬件。去得到真正视频数据的时候,需要访问硬件得到数据。usb摄像头驱动程序框架与虚拟摄像头驱动程序的框架是一样的。 1、构造一个usb_driver 2、设置 probe: 2.1 分配video_device
阅读全文
摘要:继续分析数据的获取过程: 1、请求分配的缓冲区: ioctl(4,VIDIOC_REQBUFS) vidioc_reqbufs 2、查询和映射缓冲区 ioctl(4,VIDIOC_QUERYBUF) mmap 3、把缓冲区放入队列 ioctl(4,VIDIOC_QBUF) 4、启动摄像头 ioctl
阅读全文
摘要:前面的几篇文章已经分析了v4l2的框架,对框架的分析是比较粗浅的,能基本清楚函数之间的调用过程。但是很多内容并没有分析,比如说里面有很多ioctl,并没有分析哪些ioctl是必须的,也没有分析如何从应用程序去获得摄像头数据。在本篇文章中,将根据虚拟驱动vivi的使用彻底分析摄像头驱动。 要想分析使用
阅读全文
摘要:上一篇文章中,已经介绍了v4l2_open、v4l2_read、v4l2_write的调用过程,相对于v4l2_ioctl,它们是比较简单的。下面来分析v4l2_ioctl。注意在这里还是分析以vivi.c为例,进行分析。 app: ioctl drv: v4L2_fops.unlocked_ioc
阅读全文
摘要:1、app: open("/dev/video0",....) drv: v4l2_fops .v4l2_open //这个函数主要做的是,调用具体设备提供的open函数 /* 问题来了,应用程序调用open("/dev/video0",....),v4l2_open为什么会最终会被调用? vide
阅读全文
摘要:1、分配video_device结构体 2、设置 3、注册 video_register_device 分析vivi.c: vivi_init( )//入口函数 vivi_create_instance() ret = v4l2_device_register(NULL, &dev->v4l2_de
阅读全文
摘要:在V4l2初识(一)中,我们已经知道当插上一个摄像头的时候,在uvc_driver.c中最终会调用函数video_register_device函数。接下来我们就简要分析这个函数做了哪些事情,揭开其神秘面纱。 /* Register video devices. Note that if video
阅读全文
摘要:V4L2驱动框架概述 V4L2(video for linux two)是linux为视频设备提供的一套标准接口。它也属于字符设备驱动程序。 首先回顾普通字符设备驱动程序的写法: app : open read write 内核: drv_open drv_read drv_write 相关的硬件设
阅读全文
浙公网安备 33010602011771号