Linux系统下USB摄像头驱动开发摘要:介绍了在Iinux系统下开发符合Video for Linux标准的USB摄像头驱动的方法,并对该标准提出“不间断采集”的改进思路,配合双URB、双帧缓冲等方法,提高采集速度。

关键词:Linux设备驱动 USB摄像头 Video for Linux 不间断采集

USB摄像头以其良好的性能和低廉的价格得到广泛应用。同时因其灵活、方便的特性,易于集成到嵌入式系统中。但是如果使用现有的符合Video for Linux标准的驱动程序配合通用应用程序,难以充分利用USB带宽,帧速不高,不易满足实时监控等要求。本文首先介绍在Linux系统下USB摄像头驱动编制的一般方法,然后说明在此基础上如何提高帧速。

1 Linux系统中的USB摄像头驱动程序

USB设备驱动程序完全符合通用设备驱动的准则,不同的是内核提供了一些特别的API函数,方便驱动注册、销毁自己,例如usb_reSister()和usb_dereSister();2.4版的内核还提供了对于hotplug的支持。

1.1 USB摄像头驱动的一般编写方法

摄像头属于视频类设备。在目前的Linux核心中,视频部分的标准是Video for Linux(简称V4L)。这个标准其实定义了一套接口,内核、驱动、应用程序以这个接口为标准进行交流。目前的V4L涵盖了视、音频流捕捉及处理等内容,USB摄像头也属于它支持的范畴。

因此,USB摄像头的驱动应当与内核提供的视频驱动挂钩。即首先在驱动中声明一个video_device结构,并为其指定文件操作函数指针数组.fops,向系统注册。在应用程序发出文件操作的.相关命令时,核心根据这些指针调用相应函数,并将该结构作为参数传递给它们。这样,就完成了驱动和核心之间的通信。例如:

static struct video_device vdev_template={……};

//声明video_device,指出挂接驱动

static struct file_operations ov511_fops={……};

//声明本驱动的文件操作函数指针

struct video_device*vdev=video_devdata(file);

//从文件指针中提取出video_device结构

在video_device结构中,有一个私有指针priv,可以将它指向一块保留内存。在这块内存中,保存着本驱动、本设备的相关初始化信息。这块内存的申请、初始化、指针指向等工作都是在USB驱动的枚举函数.probe中完成。这样,在枚举函数将控制权返还给系统后,因为内核不销毁保留内存,所以驱动仍然保留着自己的信息。这点与Windows系统中WDM驱动有异曲同工之处。当然,在驱动卸载函数中,应当将申请的各块内存全部释放。

[1] [2] [3]

【Linux系统下USB摄像头驱动开发】相关文章:

linux usb摄像头驱动程序,Linux系统下USB摄像头驱动开发相关推荐

  1. linux系统下编写I2C驱动

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  2. 联想打印机 linux驱动怎么安装步骤,如何在MAC系统下安装打印机驱动

    故障现象: 如何在MAC系统下安装打印机驱动?解决方案: 一.LJ2208安装苹果驱动步骤: 1.运行lenovo Lj2208 install: 2.点击"继续": 3.软件许可 ...

  3. w7鼠标计算机无法识别,win7系统下usb鼠标无法识别的解决方法

    鼠标是非常重要的,在使用电脑的时候没有鼠标是一件很麻烦的事情,特别是台式电脑,没有鼠标根本无法操作.但是使用鼠标难免也会遇上一些让人措手无策的问题,比如最近我一同学跟我说他使用的win7旗舰版系统的u ...

  4. 无线鼠标计算机不识别,win7系统下USB无线鼠标电脑检测不到如何解决

    许多win7系统用户都喜欢使用usb无线鼠标,然而有时候可能会遇到sub无线鼠标电脑检测不到的情况,碰到这样的问题该怎么办呢,本文就给大家讲解一下win7系统下USB无线鼠标电脑检测不到的具体解决步骤 ...

  5. Linux、Mac、windows 系统下 配置Python虚拟环境 virtualenvwrapper教程,workon切换环境, 非常简单方便

    前言 开发及测试过程中每个环境都有各自的作用,避免破坏其他环境所以建议每个项目新建一个虚拟环境,经过对比最终我选择了virtualenvwrapper来作为我开发中虚拟环境管理工具,接下来一起来看一下 ...

  6. 计算机usb口不识别读卡器,windows7系统下usb读卡器读不出来如何解决

    最近有windows7系统用户到本站反馈说碰到这样一个情况,就是在使用读卡器传输文件的时候,发现插入到电脑出现无法识别读卡器的情况,该怎么办呢,针对windows7系统下usb读卡器读不出来这个问题, ...

  7. (非usb方式)树莓派4BCentos系统下使用SIM7600G-H进行GPS(直接插在树莓派上使用)

    (非usb方式)树莓派4BCentos系统下使用SIM7600G-H进行GPS(直接插在树莓派上使用) GPS接受天线必须放在能看到天空的地方 1.下载设置官方示例 1.将模块直接插入树莓派中:wge ...

  8. OK6410开发板linux系统下的SPI驱动和测试

    OK6410下的SPI驱动是可以用的,但是飞凌把它作为其它用途了,我们修改一些代码才能在/dev目录下创建SPI的设备节点文件 Step1:打开arch/arm/mach_s3c64XX/mach_m ...

  9. usrp运行完整linux,Ubuntu系统下USRP硬件驱动(UHD)的编译与安装

    在Ubuntu系统下USRP硬件驱动(UHD)安装最简单的方式就是直接从Ettus Research官方提供的PPA源安装,不过本文介绍的是如何从源代码进行编译与安装. 1.从PPA源安装只需要下面三 ...

  10. 11-20210225华为海思Hi3518EV300在鸿蒙系统下测试摄像头(拍照+录像)

    11-20210225华为海思Hi3518EV300在鸿蒙系统下测试摄像头(拍照+录像) 2021/2/25 9:37 将Hi3518EV300在鸿蒙系统下配置为UVC模式,原厂(华为海思/江苏润和) ...

最新文章

  1. 使程序变为后台运行代码
  2. w3cschool的jQuery Mobile教程总结
  3. 面试必问:Spring循环依赖的三种方式
  4. 虚拟机中的solaris无法通过putty连接(网络模式为桥接模式)
  5. c++ io条件状态 的一个例子
  6. html5与css3入门知识点精炼
  7. 解决AttributeError: 'str' object has no attribute 'decode'报错问题
  8. 获取php数组最后,php获取数组最后一个值的2种方法
  9. 数据结构-图及其遍历
  10. FTP-学习笔记(1)
  11. Modbus转Profinet网关与ARX-MA100微型空气质量监测系统配置案例
  12. SIGCOMM2019几篇有意思的文章
  13. Mac Book文件夹加密
  14. web前端之Vue——子组件的详解
  15. w ndows10启动黑屏,Windows10系统电脑开机输入密码黑屏如何解决
  16. Windows11网速慢解决方案
  17. 「音箱」进化:小米、阿里向左,百度向右
  18. 关于图片存储格式的整理(BMP)
  19. [2020/02]林深时见鹿,溪午不闻钟
  20. 小蔓的秋招计算机知识点急救方法

热门文章

  1. 电脑专业英语1500词-2
  2. gentoo mysql_Gentoo 安装 Mysql
  3. 2021-11-12
  4. 春招面经总结(获携程Offer)
  5. 有赞会不会成为去中心化流量时代的淘宝
  6. 威斯敏斯特教堂(西敏寺)墓碑上的话(WestMinster Abbey,When I was young and free...,修身齐家治国平天下)
  7. Junit Rule的使用
  8. AIDL中should be declared in a file错误
  9. [云原生专题-34]:K8S - 核心概念 - 网络 - Web服务器与反向代理服务器nginx入门介绍
  10. 论文解读(IGSD)《Iterative Graph Self-Distillation》