APP下载

基于嵌入式的实时无线视频监控系统的设计与实现

2010-01-12李述良谢兆鸿

武汉轻工大学学报 2010年4期
关键词:网卡内核无线

李述良,陈 超,谢兆鸿

(武汉工业学院电气信息工程系,湖北武汉 430023)

随着通信和计算机技术的飞速发展,人们已经不再满足于通过有线途径传输图像数据,更期望能在无线的条件下实现图像传输。如在城市交通监控、安全生产监控、森林安防监控等场所,无线视频监控显得很有必要。传统的视频监控系统主要是通过大量布线来采集视频信号,既需要大量布线,又不易实现远距离和灵活的监控。本文提出了一种基于嵌入式的低功耗大规模模块化集成电路的无线视频监控系统,解决了传统视频监控系统成本高、体积大、传输距离有限、功耗大、安装不方便等问题。该系统的实现在安防、远程教育、视频会议、医疗系统等无线视频领域具有广阔的应用前景。

1 监控摄像系统硬件整体设计

无线视频传输系统是具有无线发射和接收图像的收发机,它以自由空间为传输介质、通过无线传输的方式实现视频通信[1]。典型的无线视频传输系统总体构成如图1所示。其中,发射机为系统发端,接收机为系统收端,在发端和收端之间建立正确的无线通信连接,即实现了整个视频传输系统。

无线视频传输发射端的主要功能是:视频图象的采集、压缩编码、分段送入 TCP/IP协议栈处理,最后发送至无线网卡;接收端的主要功能是:数据接收,TCP/IP协议栈处理,数据段拼接,最后解码显示图象,即完成了无线视频传输系统的构建。

图1 典型的无线传输系统总体构成

由无线视频传输系统的总体框图及其各模块的功能,可以得出无线视频监控发射端应该包括处理控制模块、存储模块、调试升级接口、云台控制模块、无线通信模块、图像数据采集模块以及电源时钟等模块组成。系统无线视频发射端的硬件总体结构图和总体结构原理图如图2所示。

图2 监控系统的组成原理图

其中,处理控制模块的 CPU采用 Samsung公司的ARM920T内核嵌入式处理器 S3C2440A,主要用于图像数据的处理以及打包发送至无线网卡,同时还用于控制系统各模块间协调工作;图像数据采集模块使用 OV9650图像传感器,该图像传感器具有130万像素,分辨率可达 1280×1024,具有 10 bit数据接口和标准的 SCCB接口,采用 CSP-28封装,体积小,内部集成了时序电路、模拟信号处理电路和数字信号处理电路;无线数据传输模块采用 USB无线网卡,一方面使得系统结构简单,同时,Linux内核集成了众多的 USB无线网卡驱动,方便移植和调试;另一方面可以根据环境需要对软硬件系统进行升级。

1.1 主控制器

S3C2440A是一个高性价比、低功耗的微处理器,主频可达 533MHz,具备 16 KB数据 Cache和 16 KB指令 Cache,带外部存储控制器,兼容 SD、MMC接口协议,2个 USB Host控制器,支持最大 4096×4096相机接口,并支持普通、慢速、空闲和掉电四种工作模式。这些功能特性可以很好地满足本系统对现场环境的控制,特别是可用于大量实时数据的处理和记录[2]。

1.2 图像采集模块

OV9650是 Omni Vision公司的一款高集成度彩色 CMOS图像传感器芯片,该图像传感器具有 130万像素并且具有 10位数据接口和标准的 SCCB接口 (Serial Camera Control Bus),可支持 SXVGA,VGA,QVGA,QQVGA,CIF,QCIF,QQCIF模式,同时,它还支持三种数据输出格式:RGB(4:2:2),YUV(4:2:2),YCrCb(4:2:2),内置从 0x00到 0x8A的138个设备控制寄存器,通过 SCCB接口,可以方便的设置传感器视窗大小、增益、白平衡校正、曝光控制、饱和度、色调等参数。

S3C2440有一个专用的摄像头接口,CPU可以直接和 CMOS图像传感器连接,当 OV9650输出数据格式为 8位的 YUV时,要用到数据线 D2—D9(D9为MSB位,D2为 LSB位);当输出的数据格式为 10位 RGB,用数据线 D0—D9(D9为 MSB位,D0为LSB位),OV9650输出的数据及控制信号包括像素时钟 (PCLK)、水平参考 (HREF)、帧同步(VSYNC)和数据总线 (D0—D9)、分别和主处理器的相应信号引脚相连。

1.3 无线通信模块

IEEE802.11标准定义了单一的MAC层和多样的物理层,已有 IEEE802.11d/g/n等多种协议,支持这些协议的网卡也有 PCI、PCMC IA和 USB三种[3]。为简化接口设计,本系统使用基于 ZyDAS ZD1211系列芯片组的 TP-L INK WN322G+型 USB无线网卡,该网卡支持 802.1lb/g协议,速率可达 54 Mbps,工作于 2.4—2.4835 GHz频段,与主流 AP有良好的兼容性。根据实际情况,覆盖范围、监控点数量多少来决定所需 AP数量,若监控点数量较多或物理距离远,可使用多个 AP并进行桥接。如果监控区内已布有无线网络则可直接接入现有AP中。

2 驱动程序移植[3]

本系统采用 2.6.30.4版本的 Linux系统。Linux因其优异的性能和技术开放性而被广泛用于嵌入式系统,Linux2.6版内核相对于其它版本更加稳定,并提供了丰富的网络和总线协议栈,能有效降低开发成本,缩短开发周期。本系统把包括 TCP/IP协议栈、USB协议栈、802.1lx协议栈、摄像头驱动及其它基本模块的 2.6版内核通过交叉编译移植到S3C2440A上。

2.1 Linux平台下 OV9650驱动的移植

OV9650图像传感器在 Linux中作为字符设备来描述,其驱动程序提供给应用程序一个流控制接口。若要将系统调用和设备驱动程序关联起来,需用到 struct file_operations这个关键数据结构。因此,编写设备驱动的主要工作就是编写数据结构中定义的子函数,并填充 file_operations的各个域,摄像头 file_operations的数据结构如下。

static struct file_operations csi_fops=

{

open:csi_open,

read:csi_read,

ioctl:csi_ioctl,

write:csi_write,

release:csi_release,

};

函数 csi_read通过系统调用 copy_to_user(buf,csi_data_buf,size)把内核空间的缓存数据复制到用户空间进行处理。

在 OV9650驱动中,函数 csi_write不具体地实现写操作功能,对设备发送控制指令由 csi_ioctl函数来实现。Static int csi_ioctl(struct inode*inode,struct file*file,unsigned int cmd,unsigned long arg)是用户进程向 OV9650设备进行 I/O控制的方法。

成员函数设计完成后,需要编写 module_init()和 module_exit()函数。其中,module_init()是驱动程序的入口,包括以下步骤:

(1)初始化 OV9650 Camera设备,通过 i2c_write写 0x00到 0x8A控制寄存器来配置模块工作模式和各种参数。

(2)通过系统调用 ioctl_get_free_pages(GGP_KERNEI,8)来分配 512K系统连续内存空间。

(3)调用 devfs_register_chrdev(“csi2c”,&csi_fops)来注册自字符设备。

(4)调用 request_irq(31,csi_intr_handler,“csi”,null)来向系统注册中断处理函数 csi_intr_handler。当 S3C2440捕捉到 VSYNC信号时触发中断,将一帧图像数据拷贝到用户空间。重复上述过程,则将视频数据拷贝到 SDRAM中。

module_exit()函数在 r mmod卸载模块时调用,其功能为释放内存空间和中断,注销设备文件。

Linux内核的编译是通过内核源码中根目录和各子目录中的Makefile分级管理的,驱动也是内核中的一部分。OV9650驱动编译加载的一般步骤如下。

(1)编写 OV9650芯片的驱动并存放在系统内核源码的 drivers/char/目录下。

(2)OV9650摄像模块驱动程序编写好后,为了实现内核对 OV9650驱动的加载,使配置内核可自由裁减,需对 kbuild脚本进行配置,即修改内核源码中 drivers/char/目录下 Config和 Makefile文件。驱动模块编译加载后,便可像操作普通文件一样对摄像头进行数据读写操作。在 Kconfig文件中找到字符设备段 menu“Character devices”,在后面添加代码如下:

ConfigOV9650_Drivers

tristate“OV9650 Drivers for S3C2440 Board”

depends on ARCH_S3C2440

help

Drivers for S3C2440 Board OV9650.c

在Makefile文件中添加对驱动的编译指令如下:

Obj-$(CONFIG_OV9650_Drivers) +=OV9650_Cam.o

(3)最后在内核中可以找到第 (2)步中添加的驱动支持选项并配置如下:

Device Drivers→

Multimedia devices→

[* ]Video capture adapters→

—Video capture adapters

<M >OV9650 Drivers for S3C2440 Board

2.2 V4L在 Linux上移植的实现

V4L其全称是 Video4Linux(Video for Linux),是在 Linux内核中关于视频设备的 API接口,涉及开关视频设备、采集并处理视频图像信息等功能。它为 2层式架构,最上层为 V4L驱动程序,最下层则是影像设备驱动程序。

V4L视频采集模块是嵌入式网络摄像机的核心模块之一。它通过操作系统调用 V4L和影像设备驱动程序来完成视频捕获。在 Linux下摄像头设备的文件描述符为“/dev/video0”,采集程序调用 V4L API函数对设备文件 viedo0进行操作,即可实现视频数据采集。主要函数及其功能描述如下。

(1)Camera_open();开启视频设备文件,使用前需先声明一个 video device类型的设备文件。

(2)Camera_get_capability();通过调用 ioctl()函数取得设备文件的相关信息,并存放到 video capability结构里。

(3)Camera_get_picture();通过调用 ioctl()函数取得图像的想关信息,并存放到 video picture结构里。

多病因慢性心力衰竭高发人群为老年人,是一种复杂的临床综合征,主要为多种原因导致心脏功能受损,进而出现慢性心力衰竭,内分泌疾病、高血压等都会导致慢性心力衰竭的出现[3]。在临床上,很多心血管疾病患者最终发展成慢性心力衰竭,也成为患者死亡的主要原因。多病因慢性心力衰竭患者诊断较为困难,病情复杂且预后差,由此可见,及时诊断慢性心力衰竭患者在改善患者预后方面具有重要意义。

(4)Camera_grab_init();通过调用 ioctl()函数来初始化设备。

(5)Camera_grab_image();用来采集图像,采用mmap方式,直接将设备文件/dev/video0映射到内存,加速文件 I/O操作,还可以使多个线程共享数据。

(6)Camera_close();用来关闭设备文件。

采集到内存的视频数据信息量巨大,为便于网络数据传输,需对采集的视频数据进行压缩。因此,本设计采用高性能 ARM9处理器对采集到的数据进行 MJPEG压缩。MJPEG是 Motion JPEG(Joint Photographic Experts Group)的缩写,即动态 JPEG。它将动画播放与 JPEG结合,按照 25 f/s的速度使用 JPEG算法,完成动态视频的压缩。

2.3 USB无线网卡驱动的移植

在Linux-2.6.30.4内核中包含了很多款 USB无线网卡的驱动,本文中使用的 TP-L INKWN322G+型USB无线网卡驱动已加载到内核中。该无线网卡有两个版本,其芯片分别为 ZyDAS系列的Zd1211芯片和雷凌科技 rt系列的 rt73芯片。在linux内核中的配置如下所示。

Device Drivers→

[* ]Network device support→

[*]WirelessLAN(IEEE 802.11)

<M >ZyDAS ZD1211/ZD1211B

USB-wireless support

[*]ZyDAS Zd1211 debugging(NEW)

<M >Ralink driver support→

—Ralink driver support

<M >Ralink rt2501/rt73(USB)support

[*]Ralink debug output

2.4 PC监控端

PC监控端软件采用 VC++编写,其操作界面如图3所示。该软件可以通过网线连接局域网内制定 IP及开放端口号的设备,凭借 PC机的高速数据处理以及高性能的 S3C2440嵌入式系统,不难实现更多功能的软件,如具有自动报警、图像处理、云台控制、移动 PDA监控、Web监控等,通过 Internet网络、GPRS网络、3G网络还可以实现远程移动视频监控,或者将监控信息通过短信、彩信的方式发送出去。

图3 监控显示终端软件截图

3 测试结果与分析

在测试程序中,在控制台中通过指令设置OV9650输出为 YUV422格式,视频帧速为 60 f/s,分辨率为 960×720,系统使用指令对 OV9650设置后反馈回来的视频参数截图如图4所示。监控平台通过无线网卡收到的视频效果如上述图3所示。

图4 图像采集的视频截图

3.1 实验结果

通过实验得出的结果发现:①在 ARM体系中采用 CMOS图像传感器采集的图像画质色彩尚可,在画质要求不太高的场合充分体现了功耗和集成度的优势;②在 200 m范围内的空旷环境中,系统性能达到了 60 f/s,视频较为流畅,基本达到了实时传输,但是在有障碍的情况下,系统性能下降较快,同时出现了延时现象,这需要在以后进一步改善;③本系统已在 S3C2440A开发板上实现,监控效果理想,不会给已有的无线网络带来过大的流量压力,WLAN除监控之外的无线应用亦可满足。

3.2 实验结果分析及解决方法

在实验结果中,当有障碍存在时,系统性能下降较快的原因主要是因为无线信号变弱,使得接收的图像感觉有延迟。这个问题可以通过提高无线网卡的发射功率、给无线网卡增加高增益的天线或增加无线中继来解决。

另外,系统还存在功耗的问题,由于电池容量的限制,发射系统由 USB无线网卡、摄像头等多个集成模块器件构成,需要较大的功耗。如果能将无线网络模块和摄像头控制芯片进一步集成,不仅成本低功耗也能减少,这是下一步的工作。如果摄像点有市电,或者采用太阳能与蓄电池结合的供电方式,则电源问题可以解决。

4 结束语

本文介绍了一种将 S3C2440A与图像传感器OV9650和 USB无线网卡有效地整合,实现摄像及无线传输功能的方案,软件采用嵌入式 Linux操作系统,设计出了一种基于 V4L的无线低功耗监控摄像装置,并在 S3C2440A开发板上成功地进行了实验。

由于系统采用软件压缩和处理,因此具有结构简单、性能灵活、成本低、布线 (无数据线和电源线)方便等优点,而且监控范围广,还具备直接接入Internet进行远程监控的功能,在需要永久或临时现场视频实时监控的领域具有广阔的应用前景。

[1] 田淑强.基于WinCE与Web的无线视频传输系统的研究[D].大连:大连理工大学,2008.

[2] Samsung Electronics.S3C2440A Microprocessor User's Manual(Revision 1)[Z].Samsung Electronics,2008.

[3] 张金刚.基于ARM和WLAN的室内监控系统研究[J].长沙通信职业技术学院学报,2008,7(4):1-5.

[4] 张绮文,解书钢.ARM9嵌入式常用模块与综合系统设计实例精讲 (第 2版)[M].北京:电子工业出版社,2008.

猜你喜欢

网卡内核无线
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
《无线互联科技》征稿词(2021)
部署Linux虚拟机出现的网络故障
无线追踪3
Server 2016网卡组合模式
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于ARM的无线WiFi插排的设计
一种PP型无线供电系统的分析