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. Html学习之十九(表格与表单学习--邮箱注册页面设计)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 如何在Windows系统上基于Sublime搭建Python的编译环境

    刚刚接触到Python,直接在计算机上编译时不能正确的运行,所以将一些有关编译环境调试的知识总结了一下. 环境搭建: Python在 windows系统上编译的时候可能会出现一些编译无法运行的情况,我 ...

  3. day55_9_19模型层的操作

    一.配置settings. 如果是queryset对象 那么可以点query直接查看该queryset的内部sql语句 将以下代码放入settings中.就可以实现当使用orm时查看sql语句: LO ...

  4. KPConv针对Modelnet40的分类

    1. 训练样本airplane_0001.txt的可视化: 飞机尺度: 物体类别与对应标签: 2. 对训练样本进行降采样: 体素法降采样,降采样的网络大小设置为0.02m.在pycharm下面的Con ...

  5. 使用python做一个爬虫GUI程序

    整体思路和之前的一篇博客爬虫豆瓣美女一致,这次加入了图片分类,同时利用tkinter模块做成GUI程序 效果如下: 整体代码如下: # -*- coding:utf-8 -*- import requ ...

  6. Note | PyTorch

    目录 0. 教程和笔记 1. 模型操作 2. 网络设计 卷积图示 填充(padding) 升采样 全连接层 3. 损失函数 交叉熵 4. 系统或环境交互 模型加载 5. 犯过的错误 损失异常 测试显存 ...

  7. 阿里云cdn缓存设置技巧,不同文件结尾用不同的缓存时间

    https://edu.aliyun.com/lesson_130_1505?spm=5176.10731542.0.0.2ed37dbf42YL6U#_1505

  8. 【Java语言特性学习之二】反射

    一.概念java加载class文件分两种情况:(1)类型是编译器已知的,这种文件的.class文件在编译的时候,编译器会把.class文件打开(不加载)检查,称为Run- Time Type Iden ...

  9. git push 报504 (因提交文件内容过大而失败的解决方案)

    Enumerating objects: 60, done. Counting objects: 100% (60/60), done. Delta compression using up to 4 ...

  10. 使用 Xbox Game 录制桌面视频(录制音频)

    使用 Xbox Game 录制桌面视频(附带音频) 前言:可能自己音频输出的问题,一直无法用工具录制桌面的音频,而最后发现利用 Xbox Game 录制游戏视频的功能很好地解决我们的问题. 1)打开游 ...