积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> LINUX
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
基于嵌入式Linux的图像采集系统的设计与实现
 
作者:西安电子科技大学 白 孙肖子   来源:电子设计应用    点击数:122   更新时间:2008-6-17
您可以添加到网摘 让更多人关注此文章:

    

摘    要:本文介绍了在嵌入式Linux系统下开发USB摄像头图像采集系统的方法,给出了基于Intel Xscale PXA255处理器的嵌入式图像采集系统的设计方案,并对如何编写符合Video for Linux 标准的摄像头图像采集程序进行了讨论。
关键词:Video for Linux;USB摄像头;USB驱动
引言
嵌入式Linux操作系统同目前广泛应用的嵌入式操作系统如pSOS、VxWorks、winCE相比,具有可移植性好、网络功能强、有优秀的GNU编译工具支持等优点。更重要的是Linux的开放源代码和免费的优点使得系统成本显著降低。一流的程序设计和开发加上测试的开放性使得Linux系统非常可靠和稳定,因而越来越多的人开始使用Linux开发应用程序。Intel Xscale PXA255处理器是一款采用ARM结构,面向高性能、低功耗设备的嵌入式处理器,非常适用于手持移动设备的开发。USB摄像头因具有低廉的价格,良好的性能,及方便使用的特性,因此很容易集成到嵌入式系统中。本文介绍的基于嵌入式Linux系统的USB摄像头图像采集系统使用采用OV511芯片的WEBEYE摄像头,在基于PXA255处理器的开发板上实现了图像的采集与压缩,借助Mencoder编码工具可以将多幅JPEG图片合成AVI视频流,并实现视频回放。



图1 硬件系统总体框图



图2  Linux下USB系统软件结构



图3获得图像过程



图4  图像采集程序的流程图
系统硬件平台
系统结构
系统硬件平台如图1所示。PXA255处理器主频最高可达400MHz,内部集成了多种外设控制模块,在实际使用时可以根据需要进行裁减。开发板上提供了64M SDRAM、32M Flash、640×480 TFT LCD触摸屏,以及外扩的USB主口控制器等,它们构成了一个嵌入式多媒体开发平台,可以满足复杂计算和图形显示的需求。采用OV511芯片的WEBEYE摄像头支持多种制式,CIF(352×288)格式帧率达30fps,可实现真正的实时视频捕获,VGA(640×480)格式帧率为10~15fps,具有完善的自动亮度、白平衡控制,提供色彩饱和度、对比度、边缘增强、伽马表等高级数码影像控制功能。它与TWAIN标准兼容,提供640×480格式的高清晰静止图像捕获模式,具有多种视频和输出格式供选择。USB总线控制器采用Cypress 公司的一款专为嵌入式领域研制的USB控制芯片CY67300,该芯片可作为主口控制,也可作为从口控制芯片,内嵌有8051微控制器和RAM,支持全速和高速两种模式。JTAG口用于Flash的擦写,UART用于系统调试。以太网口可使现网络传输,也可作NFS调试用。
系统工作过程
系统通过WEBEYE摄像头采集图像,对现场图像进行高速捕捉,然后将捕捉到的图像通过USB总线传输到PXA255处理器进行处理,并将图像压缩,保存为JPEG格式的文件。程序调用Encoder编码器可以将多幅JPEG格式的图像合成一段AVI视频流,实现视频回放,这在安全监控、事故鉴定、车辆防盗等领域中都有广泛应用。最后,系统还可以通过以太网口或UART口将保存的图片和视频流传到服务器上,实现网络监控。


系统软件实现
软件系统结构
Liunx系统中对USB设备的支持是通过如图2所示的结构实现的。Linux内核中的USB Core为设备和主控制器提供API接口。USB Core包含所有的USB设备和主控制器的一些通用操作,为向上和向下操作提供一个接口。在Linux系统中,设备驱动可分为字符设备、块设备以及网络设备。其中,字符设备面向字符I/O操作,没有缓冲,顺序读取;而块设备面向数据块,所有操作都通过内核地址空间的I/O缓冲区完成,支持随机存取操作。USB设备通过快速串行通信的方式工作,应作为字符设备来处理。系统加载设备驱动的方式有模块加载和内核初始化加载两种:前者通过用户使用insmod命令动态加载到内核中,通过rmmod命令卸载驱动模块;后者是把驱动编进内核,在内核初始化时自动加载。USB主口程序由HCD(主机控制器驱动)、USBD (USB驱动程序)以及客户程序组成。其中USBD负责管理所有HCD、设备驱动和所有连接到USB总线上的设备,是USB主机软件的核心。如图2所示,Linux系统中USB子系统采用分层结构,其中USBD和HCD提供了支持设备驱动程序开发的API。USB设备驱动程序不是通过I/O操作访问设备,而是通过USB Core提供的标准接口与设备交互,它采用由管道组成的通道与设备进行通信。设备驱动程序根据USBD创建所需的管道,并为其分配传输所需的缓冲空间。
USB的传输分为控制传输、中断传输、批量传输以及等时传输四种模式。对于时间性极强但是准确性不高的视频捕捉应用来说,摄像头应采用等时传输模式。Linux系统中,任何USB传输都需要通过URB(USB请求块)来实现。为了尽可能快地得到图像数据,需要加大URB的缓冲,这样可以降低每个USB事务中握手信息所占的比例,提高有效数据传输比例。由于每次USB传输都要包括URB的建立、发送、回收、数据整理,而在这些阶段中不产生有效数据,因此可建立两个URB交替工作,一个URB在等待回收时初始化另一个URB。获得图像的过程如图3所示。
摄像头视频捕获程序的编写
摄像头属于视频类设备,遵循的标准为Video for Linux (V4L)标准。这个标准定义了一套API接口,内核、驱动、应用程序都以这个接口为标准进行交流。目前的V4L涵盖了音视频捕捉及处理等内容,也包括USB摄像头。
Linux系统中一般的文件操作是通过read、write等系统调用完成,但这些系统调用是通过内核态与用户态之间相互进行数据拷贝实现的。对于图像数据来说,进行拷贝必然会增加时间开销,因此需要使用内存映射的办法来加以解决。
首先应申请足够大的内核态内存作为图像数据缓存,将URB带来的数据暂存;然后将其用remap_page_range函数映射到用户态空间。这样,用户态空间的图像处理程序就可以使用mmap()函数,直接读写内核态帧缓冲区,减少了额外开销。要进行视频捕捉必须用到VIDIOCMCAPTURE 和VIDIOCSYNC这两个ioctl函数。VIDIOCGMBUF包含有所用缓冲器的设置与地址。VIDIOCMCAPTURE用于开始捕捉;VIDIOCSYNC用于等待捕捉完成。为加快数据处理速度,一般使用双缓冲设置,即buffer0捕捉数据时,buffer1传输数据;buffer1捕捉数据时,buffer0传输数据。
整个图像采集程序的流程图如图4所示。将采集到的图像保存为JPEG格式,然后调用Mplayer中的Mencoder编码器,即可将多幅JPEG文件合成一段视频流,实现视频回放。


结语
本文在台式机上编程实现了基于Linux系统的USB摄像头图像采集系统。系统可以实现每秒30帧的图像采集,可以直接连续显示到屏幕上构成实时监控系统,也可压缩为一段视频流,用播放器播放出来。通过交叉编译将程序移植到PXA255开发板上,实现了预期功能。

[1]



相关文章
· Linux下PCI设备驱动程序开发[7]
· 基于WinCE/Linux系统的新一代嵌入式工控主板[12]
· 基于WinCE/Linux系统的嵌入式工控主板[15]
· Linux字符设备驱动程序的编写框架[19]
· 基于嵌入式Linux的网络视频流服务模块设计[33]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM处理器应用开发4步骤

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
温度测控系统设计方案
中华英才网将被全盘收购
破国外垄断 中国移动存储标
IC设计面临三重挑战 ED
手机电视芯片方案需求多变
北京德尔威科技有限公司与台湾佳营电子
全球手机芯片市场战局将出现重大变革
北京奥运安保系统首次成功运用射频识别
英特尔开发空气传电技术
IBM生产出首个22纳米工艺SRAM
 
热门下载 [更多]
 
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
[ ] 实用电源电路集锦
 
论坛新帖 [更多]
 
液晶问题...
[原创]本公司长期批发各种滑冰...
[原创]本公司长期超低价批发各...
[原创]本公司长期超低价批发种...
[原创]本公司长期批发各种酒、...
[原创]本公司长期低价批发各种...
[原创]长期低价批发各种母婴用...
[原创]本公司长期批发各种饮料...
[推荐]通讯上通用的一个GSM...
用两个电容代替一个?...

 
赞助商 [更多]
 


ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网