Linux环境下的USB摄像头驱动开发
摘要嵌入式环境下的USB摄像头驱动需要充分利用USB总线与内核中的USB核心密切配合并且保证数据流的高速与稳定。本文从Linux内核的USB核心模块出发,遵循Video4Linux接口标准,采用urb策略与内存映射的方式以提高数据读取速度,设计开发了基于Linux环境下的USB摄像头驱动,并在ARM9实验平台上对该驱动程序进行了测试与分析。
关键词:嵌入式LinuxUSB摄像头驱动;urb;内存映射机制
引言:嵌入式图像处理的应用范围随着嵌入式技术的不断发展而不断扩大,摄像头作为数字图像采集的基础,驱动程序的开发显得尤为重要。作为操作系统内核与硬件设备之间的接口,驱动程序是否优良,直接影响着硬件设备能否正常、高效运转。带有U S B ( 通用串行总线) 接口的摄像头因其具有支持热插拔、接口通用性好、实时性强、较高的传输速率、低成本、易于扩展等优点而备受青睐。但是嵌入式系统中支持U S B 摄像头的驱动程序很少,因此,研究和开发嵌入式环境下的U S B 摄像头驱动程序具有应用价值和现实意义。
USB摄像头驱动程序构架
设备驱动程序是计算机软、硬件之间存在的悖论的产物:软件和硬件不应该互相渗透到对方的领域。因此,设备驱动程序是介于操作系统与硬件之间,将硬件设备的具体工作细节对操作系统内核完全屏蔽的接口。用户的操作通过标准化的调用执行,经设备驱动程序映射到实际的硬件设备上。
由于在不同的环境下通常需要不同的方式来操作硬件,所以在编写访问硬件的设备驱动程序时,不能给用户强加任何特定的策略描写冬至的古诗句( 策略,既是如何使用这些功能) 。驱动程序应该处理如何使硬件工作的问题,而将怎样使用硬件的问题留给上层应用程序,即驱动程序的作用在于提供机制(机制,既是需要提供什么功能)西湖美景
1.1USB子系统分析
一个U S B 子系统是由几个点对点的连接方式构建而成的树状结构,在该系统中U S B 是担当设备和主控制器之间通信通道的角,对它所发送或者接受的数据没有任何特殊的内容和结构上的要求。L i n u x 内核支持两种主要类型的U S B 驱动程序:宿主系统上的驱动程序和设备上的驱动程序。宿主系统上的U S B 驱动程序控制插入其中的U S B 设备而设备上的驱动程序则控制该设备如何与主机通信。
  L i n u x 内核提供了U S B 核心模块,该模块将不同类型的U S B 主控制器完全屏蔽,而为上层的U S B 设备驱动程序提供了用于访问和控制U S B 设备的接口( 如图1 ) 。因此U S B 核心模块将U S B 主控制器和U S B设备驱动程序隔开,也同时将U S B 驱动程序的编写与具体的硬件隔开。
1.2 驱动模块构架
每个硬件设备在操作系统内核中都对应一个驱动模块。U S B 摄像头设备在内核中表现为一个字符设备,并且属于视频类的硬件设备。L i n u x内核为视频类设备提供了内核接口V i d e o 4 L i n u x ,该内核接口使得L i n u x环境下的上层应用程序可以像访问普通文件一样对其进行读写操作。因此该驱动模块提供的机制应该符合爱神是谁Video4L inu x接口:
1 . O p en :提供给驱动程序以初始化的能力,从而为以后的操作完成初始化做准备;
2 . R e l ea s e :释放O p e n 分配的内存空间;
3 . R e a d :将摄像头获取的图像数据拷贝到应用程序空间;
4 . M m a p :内存映射使得进程之间通过映射同一个普通文件实现内存共享;
5 . I o c t l :提供一种执行设备特定命令的方法。
关键技术研究
洗地机品牌排行榜前十名
涮羊肉起源U S B 驱动程序与U S B 核心、用户应用层结合紧密,需要开发者对L i nu x的内核有很好的掌握,理解驱动程序与U S B 设备的关联方式、系统内核与U S B 设备的通信方式、内
存的映射机制以及由于U S B 热插拔而引出的驱动探测、断开机制的实现对U S B 设备驱动开发有很好的指导作用。
2.1驱动程序与桃花源记原文及翻译USB设备的关联
L i n u x 操作系统内核提供了U S B 核心模块用于处理U S B 设备的复杂操作。在U S B 核心中将U S B 设备划分为配置、接口和端点三个层次接口(如图2)