Linux 下 USB摄像头驱动实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 下 USB摄像头驱动实现

Linux 下 USB摄像头驱动实现   摘要:介绍了Linux体系下USB摄像头驱动的体系结构。首先介绍了作为Linux视频部分标准的Video4Linux,这是USB摄像头开发的关键部分;然后描述了Linux体系下USB设备驱动的层次结构以及涉及到的几个重要数据结构;最后给出了中星微的ZC0301P摄像头驱动的具体实现。 关键词:USB摄像头;Linux;video4Linux;驱动程序 中图分类号:TP301文献标识码:A文章编号2012)009001803 0引言 USB摄像头由于价格低廉、使用方便、通用性强,被广泛应用于个人电脑、视频监控、图像采集等设备中。目前 ,摄像头驱动程序大部分都是基于Windows平台下,而嵌入式系统大都采用Linux系统,因此需要开发在嵌入式Linux平台下的基于Linux驱动框架的摄像头驱动程序。 摄像头主要由主控芯片和传感芯片两部分组成,景物通过镜头生成的光学图像投射到图像传感器上,然后转为电信号,经过A/D转换后变为数字图像信号,然后送到DSP中处理。主控芯片负责图像采集、压缩以及和主机的通信。本文中摄像头芯片采用的是中星微公司的ZC0301P芯片,这是目前应用比较广泛的一款产品。 1Linux下的视频标准Video4Linux 目前的Linux内核已经添加了对音视频设备的支持,这部分的标准是Video4Linux(简称V4L)。V4L是一些视频系统、视频软件、音频软件的基础,目前主要应用在图像采集、视频采集等多媒体设备中,比如可视电话、视频监控、Webcam,是嵌入式Linux开发人员经常使用的系统调用接口。Linux内核通过V4L为用户空间提供了标准的操作接口,各种音频和视频设备相应的驱动程序加载进内核后,V4L就可以通过内核提供的API像对普通文件一样来操作视频和音频设备,从这里可以看出V4L大体分为两层,上层为系统提供的API,底层为音视频设备在内核中的驱动。这个标准提供了一套标准接口,应用程序、内核、驱动以这个接口进行互相访问。同时,该标准对USB摄像头也提供非常好的支持。 V4L为Linux音视频设备驱动程序提供了以下几个重要数据结构:①struct video_capabilitycap;/ 包含了摄像头设备的基本信息;②struct video_picturepic;/包含了摄像头设备采集的图像的各种属性;③struct video_mmapbuf;/用于实现内存映射;④struct video_mbufvm;/利用video_mmap进行内存映射得到帧的信息。 2Linux下USB驱动体系 USB是英文Universal Serial BUS(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,主要有以下特点:使用简单、支持热插拔、传输速度快、方便扩展,大大简化了不同类型外设与计算机间的连接。USB是一种分层总线结构,并且由一个主机控制器来控制,USB主机控制器负责询问每一个USB设备是否有数据需要发送,USB不支持设备的直接通信。 如图1所示,在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linux内核USB核心负责USB驱动管理和协议处理的主要工作。主机控制器驱动和设备驱动之间的USB核心非常重要,其功能包括:通过定义一些数据结构、宏和功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;通过全局变量维护整个系统的USB设备信息;完成设备热拔插控制、总线数据传输控制等。 3本文涉及的几个主要数据结构 本文中主要有如下几个数据结构,分别是: (1)USB设备数据结构usb_device,它保存了一个USB设备的信息,包括设备地址、设备描述符、配置描述符等。 (2) struct usb_driver 是对USB设备的最高层次的抽象,这个结构用于向USBD层注册USB设备驱动程序。该结构体中有两个重要函数分别是probe和disconnect,当内核中有某设备的驱动程序,而且当该设备连接上时,系统会自动调用probe函数探测。当拔出该设备时disconnect函数会被调用,移除该设备。所以这两个函数支持了热拔插操作。 (3)文件系统数据结构。File_opertions是Linux设备驱

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档