usb摄像头驱动程序,里面涉及硬件的操作。比如说,想设置亮度的时候,需要把亮度的参数发给硬件。去得到真正视频数据的时候,需要访问硬件得到数据。usb摄像头驱动程序框架与虚拟摄像头驱动程序的框架是一样的。

1、构造一个usb_driver

2、设置

   probe:

    2.1 分配video_device  : video_device_alloc

    2.2 设置

      .fops

      .ioctl_ops(里面需要设置11项)

      如果需要内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops

    2.3 注册 :video_register_device

  id_table: 表示支持哪些usb设备

当将usb设备接到板子上后,如果该设备能够被driver所支持,也就是说吻合这个id_table,此时probe函数就会被调用。在probe函数里面就可以做自己想做的事情了。

linux内核已经自带有usb摄像头的驱动程序,它支持UVC规格的摄像头

UVC:usb  video  class

基本上对于Windows下面,那种即插即用的usb摄像头,就吻合UVC规范的,不需要自己再去安装驱动程序。

UVC驱动所在路径:drivers\media\video\uvc\(3.4.2内核)

uvc_driver.c分析:

1、usb_register(&uvc_driver.driver)

2、

  struct uvc_driver uvc_driver = {
    .driver = {
    .name = "uvcvideo",
    .probe = uvc_probe,//当它发现所能支持的设备时,就会调用该函数
    .disconnect = uvc_disconnect,
    .suspend = uvc_suspend,
    .resume = uvc_resume,
    .reset_resume = uvc_reset_resume,
    //假设我们接上了一个usb摄像头,这个摄像头在uvc_ids里面,那么内核就会调用uvc_probe函数
    .id_table = uvc_ids,
    .supports_autosuspend = 1,
    },
  };

  uvc_probe

    uvc_register_chains(dev)

      uvc_register_terms(dev, chain);

        uvc_register_video(dev, stream);

          video = video_device_alloc();

          video->fops = &uvc_v4l2_fops;

          video_register_device(video, VFL_TYPE_GRABBER, -1); //到这个地方又回到了以前我们分析的video_register_device这个函数了。

-----------------------------------------------------------------------------------------------

接下来简要看一下,usb摄像头的硬件框图:

USB摄像头驱动框架分析的更多相关文章

  1. USB摄像头驱动框架分析(五)

    一.USB摄像头驱动框架如下所示:1.构造一个usb_driver2.设置   probe:        2.1. 分配video_device:video_device_alloc        ...

  2. Linux USB驱动框架分析(2)【转】

    转自:http://blog.chinaunix.net/uid-23046336-id-3243543.html   看了http://blog.chinaunix.net/uid-11848011 ...

  3. Linux USB驱动框架分析 【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...

  4. 2.1 摄像头V4L2驱动框架分析

    学习目标:学习V4L2(V4L2:vidio for linux version 2)摄像头驱动框架,分析vivi.c(虚拟视频硬件相关)驱动源码程序,总结V4L2硬件相关的驱动的步骤:  一.V4L ...

  5. Linux USB驱动框架分析【转】

    转自:http://blog.csdn.net/jeffade/article/details/7701431 Linux USB驱动框架分析(一) 初次接触和OS相关的设备驱动编写,感觉还挺有意思的 ...

  6. Hi3559AV100外接UVC/MJPEG相机实时采图设计(一):Linux USB摄像头驱动分析

    下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...

  7. Linux USB摄像头驱动【转】

    本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...

  8. 2.5 USB摄像头驱动程序框架

    学习目标:根据vivi驱动架构和linux-2.6.31/linux-2.6.31.14/drivers/media/video/uvc/Uvc_driver.c驱动源码,分析usb摄像头驱动程序框架 ...

  9. Linux USB 摄像头驱动

    在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 USB 接口的摄像头.这一章主要是介绍 USB 摄像头的设备驱动程序.在我们印象中,驱动程序都是一个萝卜一个坑, ...

随机推荐

  1. web-文件包含

    提示 构造payload ?file=flag.php 得到一串字符,那么我们用PHP伪协议尝试一下 构造payload ?file=php://filter/read=convert.base64- ...

  2. 剑指Offer-4.重建二叉树(C++/Java)

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2 ...

  3. Codeforces Round #575 (Div. 3) D2. RGB Substring (hard version) 水题

    D2. RGB Substring (hard version) inputstandard input outputstandard output The only difference betwe ...

  4. vue通过v-for渲染的列表,可以单独操作的其中的列表的两种方法

    如图,三个标题分别有多个子元素.通过点击三个标题分别控制显示和隐藏.上代码 第一种情况:点击 青1,其所有的标题下的列表全部隐藏,也就是只有一个标题的会显示子元素 <div class=&quo ...

  5. windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式

      1.情景展示 做了这么长时间的java开发,但是,你知道JVM是以怎样的编码加载.解析class文件的吗? 我们知道,通常情况下,我们会将java文件的字符集修改成utf-8,这样,理所当然地就认 ...

  6. centos配置ADSL拨号 配置阿里云的yum源

    如果系统yum源有问题可以更改yum源配置阿里云的yum源1)下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo(没有 wget命令可 ...

  7. JVM&NIO&HashMap简单问

    JVM&NIO&HashMap简单问 背景:前几天在网上看到关于JVM&NIO&HashMap的一些连环炮的面试题,整理下以备不时之需. 一.JVM Java的虚拟机的 ...

  8. Unity开发实战探讨-资源的加载释放最佳策略

    注:本文中用到的大部分术语和函数都是Unity中比较基本的概念,所以本文只是直接引用,不再详细解释各种概念的具体内容,若要深入了解,请查阅相关资料. Unity的资源陷阱 游戏资源的加载和释放导致的内 ...

  9. (三十一)golang--面向对象之工厂模式

    golang面向对象中是不存在构造函数的,可以使用工厂模式.   使用工厂模式,让即使不是大写的变量可以被外部包使用.

  10. Gin框架 - 数据绑定和验证

    概述 上篇文章分享了 Gin 框架使用 Logrus 进行日志记录,这篇文章分享 Gin 框架的数据绑定与验证. 有读者咨询我一个问题,如何让框架的运行日志不输出控制台? 解决方案: engine : ...