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. 自己整理的模拟爬虫的user-agent

    自己经常用的一些爬虫用的user-agent头部 This XML file does not appear to have any style information associated with ...

  2. C++ class外的 << 重载,输出流,重载示例。不应该定义类内的<<重载

    #include <iostream> // overloading "operator << " outside class // << 应该 ...

  3. python数据分析教程大全

    第一篇:Anaconda安装和使用 第二篇:Jupyter norebook使用 第三篇:pandas教程 第四篇:numpy教程 第五篇:Matplotlib教程 第六篇:实战项目 期待吗?(微笑脸 ...

  4. Rabbitmq 实现延时任务

    1.需要用到插件 rabbitmq_delayed_message_exchange 来实现,插件下载地址:https://www.rabbitmq.com/community-plugins.htm ...

  5. redis.windows.conf 配置注释

    . daemonize no Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 . pidfile /var/run/redis_6379.pid 当Redis以守 ...

  6. 《Linux内核原理与分析》教学进程

    目录 2019-2020-1 <Linux内核原理与分析>教学进程 考核方案 第一周: 第二周: 第三周: 第四周: 第五周 第六周 第七周: 第八周 第九周 第十周 第十一周: 第十二周 ...

  7. FFmpeg 常用结构体

    0.FFmpeg 中最关键的结构体之间的关系 FFmpeg 中结构体很多.最关键的结构体可以分成以下几类: 1)解协议(http, rtsp, rtmp, mms) AVIOContext,URLPr ...

  8. liunx下安装mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

    1.解压准备一个赶紧的环境,然后安装mysql. 2.cd到/usr/local/目录下,修改文件名为mysql 修改完目录名以后我们cd到mysql下,建立一个data目录命令:cd mysql/ ...

  9. LeetCode 225:用队列实现栈 Implement Stack using Queues

    题目: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 Implement th ...

  10. tensorflow之tf.to_float

    1. tf.to_float()       # 将张量转换为float32类型 2. tf.to_int32()     # 将张量转换为int32类型 等等, 就是将张量转换成某一种类型.