郭 琦,王志刚,牛宝超,公衍雨,王宪臻
(河北工业大学 信息工程学院,天津 300400)
随着网络技术与多媒体技术的迅猛发展和普及,人们对信息产品的使用越来越广泛。WiFi技术的出现,凭借着其灵活易用、扩展能力强等优点,已经在金融、商业、制造业等领域有了广泛的应用。
文中以ARM9处理器为核心,利用其体积小、功耗低、成本低、性能高的特点,与WiFi技术相结合,实现无线数据传输,本系统采用的是FriendlyARMmini2440开发平台,为了满足实时性与采集速率的的需求,视频采集模块使用USB摄像头,利用Arm-Linux系统实现视频采集。在嵌入式Linux中构建Web服务器实现终端显示。
系统硬件部分主要包括S3C2440A核心处理器、WiFi无线模块、LCD显示、存储器、USB摄像头等部分,其硬件结构设计如图1所示。
核心处理器才用的是三星公司推出的16/32位RISC处理器S3C2440A,S3C2440A采用了ARM920T的内核,0.13 μm的COMS标准宏单元和存储器单元。其低功耗,简单且全静态设计特别适合于对成本和功率敏感型设计的应用。ARM920T实现了MMU,AMBA BUS和 Harvard高速缓冲体系结构,这一结构具有独立的16 KB指令Cache和16 KB数据Cache。通过提供一套完整的通用系统外设,S3C2440A减少整体系统成本和无需配置额外的组件。
图1 整体结构图Fig.1 Overall structure chart
S3C2440A的片上功能主要有:外部存储控制器(SDRAM和片选逻辑);一个LCD控制器 (最大支持4K色STN和256K色 TFT),并且提供一通道 LCD专用 DMA;4通道DMA,有外部请求引脚;3通道 UART;2通道 SPA;1通道IIC-BUS接口 (多主支持);1通道IIS-BUS音频编解码器接口;2端口USB主机与1端口USB设备;4通道PWM定时器和1通道内部定时器;8通道10比特ADC和触摸屏接口;130个通用I/O口和24通道外部中断源,还兼容SD主接口协议1.0版和MMC卡协议2.11兼容版等,并且具有普通,慢速,空闲和掉电多种模式。加强的ARM体系结构MMU用于支持WinCE,EPOC32和Linux。可以说S3C2440A的资源已经极其丰富,以其强大的指令处理能力,使S3C2440能够满足多种场合的复杂需求。
本系统采用的视频摄像装置是目前应用较为广泛的USB输出的数字摄像头,以OV511芯片为核心的网眼V2000摄像头。网眼V2000使用CMOS感光元件,35万象素,最大分辨率为640(水平)x 480(垂直)像素。内置专用的DSP芯片,可对原始视频信号做前期压缩编码处理,从而减少系统中内存控制单元时间占用与程序编写的工作量。
WiFi(Wireless Fidelity),俗称无线局域网,是由电气电子工程协会(IEEE)802标准化委员会制定的IEEE 802.11系列标准,系统采用无线网卡是TP-Link的TL-MN321G无线网卡,支持标准有IEEE 802.11b和IEEE 802.11g,IEEE 802.11b最高传输速率为 11 Mbps,IEEE 802.11 g最高速率可达54 Mbps,在信号较弱或者有干扰的情况下,可实现自动调整带宽,有效地保障了网络的可靠性和稳定性。接口类型为USB 2.0接口,覆盖范围在室内最远可达100 m,室外最远300 米,工作频段为 2.4~2.483 5 GHz。
Linux操作系统具有开放性,设备独立性,丰富的网络功能,可靠的安全性以及良好的移植性等良好的特性使得Linux使用者越来越多,并且Linux源代码开放的特点也使其本身逐渐发展壮大起来。这也是本系统采用Linux的主要元因。
一个完整的可执行的Linux操作系统包括系统引导加载程序Bootloader,Linux内核,根文件系统。
Bootloader是系统加电之后运行的第一段软件代码。它是整个系统执行的第一步,类似于PC及系统中的BIOS。Bootloader的主要任务就是将内核映像从硬盘上读到RAM中,然后引导启动操作系统内核,并且完成硬件检测和资源分配工作,从而将系统的软硬件设定在一个合适的状态,为最终调用操作系统内核,运行用户程序准备好正确的环境。Bootloader依赖于具体的嵌入式板级设备的配置。本系统采用的supervivi是由友善之臂公司基于vivi改进的一个简单易用的bootloader,具有很多实用功能:USB下载,以太网和丰富的设备驱动代码等。
通过建立好的arm-linux-gcc交叉编译环境结合S3C2440硬件电路对Linux内核代码裁剪和编译,得到符合本系统的压缩内核映像文件zImage。本系统的Linux移植主要涉及到USB摄像头驱动移植,USB无线网卡驱动移植等。在linux2.6.32内核源码目录下使用make menuconfig配置内核,需要注意的是:1)加载USB驱动,依次选择Device Drivers->USB support-->Suport for Host-side USB S3C2440 2USB HOST;2)加载V4L驱动和摄像头驱动,进入Multimedia device 依 次 选 择 Video for Linux,<*>USB OV511 Camera suport;配置完成后执行make clean命令删除生成的模块和目标文件;再使用make zImage命令编译内核生成压缩的映像文件;最后使用make moduls将模块编译出来。最终生成的压缩内核映像路径为arch/arm/boot/zImage。
根文件系统使用YAFFS文件系统,通过Busybox完成文件系统的制作,主要完成工作有,建立文件结构框架,添加库文件,创建配置文件等,最后通过mkyaffs命令生成文件系统的影像。
Video For Linux是Linux中关于视频设备的内核驱动程序,是一种应用程序与视频设备之间的一个接口函数集[2]。Linux中,视频设备和其他许多设备一样都是以设备文件的形式被访问和读写的。V4L下的视频软件的实现流程如图2所示。
图2 视频采集流程图Fig.2 Video acquisition flow chart
V4L的驱动程序为videodev.c,其包含于内核存在的目录drivers/media/video文件中。依赖的头文件videodev.h在include/linux目录下。主要用到的诗句结构有:包含摄像头基本信息的结构体struct video_capability;包含设备采集窗口信息的struct video_windows;视频信息通道的结构体struct video_channel;包含设备图像采集属性的struct video_picture;用于内存映像的struct video_mmap以及利用mmap进行映射的帧信息结构体video_mbuf等。
1)打开视频设备使用 open()函数:gqfd=open(“/dev/video”,O_RDWR);以读写的方式打开文件。
2)ioctl(gqfd,VIDIOCGCAP,&(vd->picture))函 数 读 取设备的一些基本信息,包括设备名称、支持的最大最小分辨率等。
3)video_picture中包含所采集图像的各种分量信息,包含调色板、对比度、色度、亮度、白度、色深、颜色等信息。使用函数 ioctl(gqfd,VIDIOCGPICT,&(VD->picture))得到图像分量值信息,再使用VIDIOCSPICT为分量赋新值。
4)视频图像的获取采用内存映射(mmap)的方式实现,mmap通过把设备文件映射到系统内存中,用户可以直接对设备文件访问从而绕过内核缓冲区,提高了信息读取速度。内存映射方式的具体操作为:①先使用ioctl(gqfd,VIDIOCGMBUF,&gq_buf)函数得到摄像头缓冲区的帧信息。
②然后修改video_mmap中的设置,即
gqvd.width=320;
gqvd.high=240;
gqvd.format=VIDEO_PALETTE_YUV420P;
③将设备文件的内容映射到内存区,通过unsignedchar*gq_data=mmap (0,gq_buf.size,PROT_READ|PORT_WRITE,MAP_SHARED,gqfd,0)来操作实现。
④通过调用 ioctl(gqfd,VIDIECMCAPTURE,&gq_data)实现对内存映射区图像数据的单帧采集。
⑤调用 ioctl(gqfd, VIDIOCSYNC, &gq_data)实现连续帧的采集,若调用该函数成功,侧说明前一帧采集完毕,否则结束程序。
本设计采用的无线网卡为TP-Link的TL-MN321G,并且已经有了在linux下针对此网卡的驱动代码。下载驱动程序代码 usb-kits-mini2440-linux-2.6.32.2.tar.gz,使用 #tar xvzf解压。
代码包中还包括了3个工具命令行程序:用scan-wifi可扫描附近无线网络,用star-wifi可连接无线网络,用stop-wifi可停止当前网络连接。
当接收到USB摄像头传来的数据后,为了能够使其成功的传输并且显示在终端上,还需要建立一个WEB视频服务器完成这一步工作。
WEB服务器与终端之间使用TCP/IP协议完成通信,linux中使用套接字socket进行网络通信,socket是网络通信应用程序之间的接口。实现网络传输的过程中,要完成套接字的创建、绑定、初始化服务器IP、监听套接字等工作。
Web服务器启动后,客户端便可使用了。用户只需要通过局域网内的计算机使用浏览器即可访问视频服务器,观看视频图像。
本设计控制系统以S3C2440处理器为核心,操作系统选用嵌入式linux系统,系统通过连接摄像头模块,获取图像信息,实现图像数据的采集;然后通过CPU对图像的处理,经过无线网卡上传至局域网,局域网内的计算机机可通过浏览器的访问服务器。本系统具有成本低、便于安装、可移动性强等优点,方便远端进行实时监控,有良好的发展前景。
图3 通信流程图Fig.3 Communication flow chart
[1]马资道,张正炳.基于ARM-Linux的网络视频监控终端的软件设计[J].软件工程技术,2011,19(2):456-458.
MA Zi-dao,ZHANG Zheng-bing,Software design of network video monitoring terminal based on the ARM-Linux[J].Software engineering technology,2011,19(2):456-458.
[2]王娜.基于WiFi的无线远程视频监控系统[J].安防科技,2010(1):16-18.
WANG Na.Wireless remote video monitoring system based on WiFi[J].Security Science and Technology,2010(1):16-18.
[3]Schimek M H,Verkuil H,Rubli M.Video for Linux Two API Specification Revision[E B/OL].[2010-1-15].http://v4l2spec.bytesex.org/spec/book1.htm.
[4]邹意然,王永威,赵龙.嵌入式系统中USB摄像头的图像采集[J].微计算机信息,2010(12):24-28.
ZOU Yi-ran,WANG Yong-wei,ZHAO Long.USB camera image acquisition in embedded systems[J].Micro computer information,2010(12):24-28.
[5]淦克亮.基于ARM嵌入式的图像采集与显示系统设计[J].工业控制计算机,2011(12):10-12.
GAN Ke-liang.Image acquisition and display system design based on the ARM embedded system[J].Industrial control computer,2011(12):10-12.
[6]高美娟,李凯,田景文.基于ARM的网络远程家居视频监控系统[J].微计算机信息,2008:86-88.
GAO Mei-juan,LI Kai,TIAN Jing-wen.Network remote video monitoring system of household based on the ARM[J].Micro computer information,2008:86-88.