Linux下基于XScale的USB摄像头图像采集

  摄像头分为数字摄像头和模拟摄像头两大类。传统的模拟摄像头,获取图像信息需要先将视频采集设备产生的模拟视频信号经过特定的视频捕捉卡转换成数字信号,进而才能进行存储等处理。数字摄像头可以直接捕捉影像产生数字信号,然后通过串、并口或者USB接口传输到计算机里。数码摄像头的一般结构如图1 所示。 

图1 数码摄像头的结构

  相比于模拟摄像头,数码摄像头具有很大优势:CMOS图像传感器直接产生图像原始数据;硬件支持标准的JPEG压缩;主流高速的USB总线设备接口等。

  由于模拟摄像头的整体成本较高,并且USB接口的传输速度远远高于串口、并口的速度,所以当前市场热点主要是USB接口的数码摄像头。比较而言,USB摄像头在一些嵌入式的应用场合具有明显的优势。本文介绍了基于XScale的嵌入式Linux下利用USB 摄像头采集图像的硬件、软件设计过程, 最终实现了在目标板上图像的采集和显示。

2、系统设计与器件选择

  基于XScale的USB摄像头图像采集硬件平台如图2所示。

  图中各个主要模块基本组成描述如下:

  ① 微处理器(MPU):针对开发视频终端的需要,并考虑到系统外围设备的需求情况,本系统采用INTEL公司XScale架构的PXA270 处理器,主频时钟可达520MHz。

  ② SDRAM 存储部分采用两颗SAMSUNG 公司的K4S561632E-TC75内存,每个大小为32M。

  ③ FLASH 存储器采用两颗INTEL 公司的JS28F128 J3D75 NOR Flash,每个大小为16M。

  ④ LCD:采用SAMSUNG 公司的3.5 寸LCD,分辨率为320×240。 

Linux下基于XScale的USB摄像头图像采集

图2 硬件结构原理图

3、基于XScale 的USB 摄像头图像采集的软件系统

  由于嵌入式Linux 具有成本低、代码开放、移植性好的特点,其用于嵌入式系统的优势和发展潜力是不容置疑的。软件部分的搭建主要依赖于以下三个部分:

  ① Boatloader: 本系统采用u-boot作为引导程序,可以从网站上下载,经过交叉编译生成映像文件,然后通过JTAG 接口将映像烧写到目标板,实现引导程序的装载。

  ② Kernel:本系统采用Linux- 2.6.12.4.tar.bz2 版本的内核。

  ③ 文件系统:考虑到程序运行的速度,本系统采用ramdisk技术制作文件系统映像。

  在Linux 操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备。而在Linux 下要使系统所挂接的外部设备正常工作,必须加载相应的驱动程序。Linux 下对于驱动的加载有两种方式:一种是直接加载到系统的内核当中去;另一种是以模块方式进行加载。在Linux 下要采集视频类数据,需要加载Video4Linux 驱动模块Videodev.o。然后再加相应的摄像头驱动程序。在项目开发中,我们把Video4Linux的驱动编译进内核,而摄像头驱动以模块方式加载。我们所使用是采用中芯微公司生产的zc301芯片的摄像头,所对应的驱动程序可以从网上下载,本项目用的是gspcav1-20070508.tar.gz。所以在系统启动时必须要通过如下命令来加载所需要的模块:

#insmod gspca.ko

  通过开源项目spca5xx 可以得到模块的全部源代码。上层软件部分我们参考了servfox软件的操作过程,使用了spcav4l.c中的函数,经过交叉编译,在实验板上实现了实时图像采集的目的。

4、在Linux 下采集并显示USB 摄像头数据

Linux下基于XScale的USB摄像头图像采集

 

图3 图像采集流程图

  Linux 下摄像头的驱动程序是以81 为主设备号,在编写应用程序的时候,要通过打开一个具有该主设备号的设备文件来建立与设备驱动程序的通信,我们所使用的Linux 没有该文件,所以需要手工创建,并建立其软连接。我们用到的videodev.o 模块即为视频部分的标准Video for Linux (简称V4L)。这个标准定义了一套接口,内核、驱动、应用程序以这个接口为标准进行通信。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/26329.html