基于S3C2410嵌入式视频监控系统的研究
本系统采用模块化的结构设计思想,将设备分为主控模块和各个功能模块。主控模块和各功能模块之间有统一的或者特定的接口形式,用户可根据不同的需要选用不同的功能模块,各种类型的数据可以同时传输而不相互干扰,同时也可根据市场的需求继续扩展其它功能模块。远程无线视频监控系统是由以下几个模块组成:嵌入式 ARM2410 核心控制模块、自动报警模块一面使嵌入式模块上的蜂鸣器发出警报声,同时发送报警信号通过GPRS 网络及时的传回远端的监控管理中心,以便管理人员及时发现并处理火情、传感器数据处理模块、USB 摄像头视频图像采集处理模块、GPRS 无线数据传输模块、远程监控软件模块。
1 系统结构
1.1 USB摄像头驱动
USB核心在系统中起着重要的作用,它提供了一些专用的API供设备驱动层操作,而对主控制器的操作则由系统完成了,USB核心层对主控制器层的数据结构和操作进行了封装。在编写USB驱动时,只需要和USB核心层进行交互。对于具体设备的驱动编写主要也是设备层驱 动的编写。Linux系统中USB结构如图2所示:
在Linux内核中,设备驱动程序是一个个独立的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,设备驱动负责将这些调用映射到作用于实际硬件设备特有的操作上。在Linux系统中,设备驱动程序编译好后,有两种实现方法:一种是修改系统内核源码,把驱动静态编译进内核,使其成为内核的一部分;另一种则是编译成可以动态加载的模块,由管理员动态的加载。如果把驱动程序编译进内核,那么内核的大小会增加,内核的源文件也需要改变,并不能动态地释放,不利于系统的调试,所以在本系统中,为方便调试,把摄像头驱动程序编译成动态加载的模块。
1.2 视频采集
视频采集程序的流程如图3所示:
USB摄像头驱动成功后,需要编写视频采集的程序,这就需要了解Linux内核中关于视频设备的部分代码Video For Linux(简称V4L)。它为应用程序提供了一系列的接口函数,通过这些函数,可以执行打开、读写、关闭等基本的操作。设备驱动提供了read、write、open、dose等函数的具体实现,在内核中这些函数都可以调用。
1.3 GPRS无线数据传输
GPRS模块是具有登陆GPRS网络功能的芯片,只要外接SIM卡,通过串行协议与ARM处理器通信,将视频图像采集模块得到的JPEG数据以资料包的形式,先通过PPP和运营商的Internet接入服务器连接,然后把资料包发送到Internet上。GPRS无线数据传输模块软件结构设计总体可分为三个部分: 参数配置部分, 处理器将接收视频图像采集模块从串口输入的数据,同时对远程监控中心主机IP地址,串口通信参数等加以配置;连接远程监控中心主机, 在这一部分,系统将发起一个TCP或UDP连接;数据传输,首先处理器将判断接收的数据为远程配置数据,视频图像数据还是报警信号,如果是报警数据,则立刻停止视频图像数据的传输,将报警数据迅速发送出去。如果是JPEG图像数据,则GPRS模块将接收到的所有数据都发送出去。
2 系统软件设计
2.1 嵌入式Linux移植
本系统中,宿主机选择LINUX操作系统,并建立好交叉编译环境。目标机选定嵌入式LINUX作为操作系统,而目标系统的LINUX内核需要结合自己的硬件电路对内核代码进行移植修改才能够运行。本系统硬件系统为基于ARM9的S3C2410开发板,在内核的arch目录下有一个为”arm”的文件夹,正是存放的与ARM体系结构相关的代码。编译内核需要创建内核依赖关系、创建内核镜像文件和创建内核模块。首先执行makedep命令,读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;接着需要make clean完成删除前面步骤留下的文件,以避免出现一些错误;然后便可以生成所需要的内核文件了,用make zImage来实现得到可移植的内核。除了内核的移植,还需要在开发板上移植启动代码,即BootLoader,初始化硬件系统并加载移植的Linux内核,此外文件系统也不可缺少。在BootLoader,Linux内核和文件系统成功移植后,便可以在目标系统上进行程序开发了。不过针对本系统的具体要求,还需要在开发板中添加USB摄像头的驱动,这样以后,便将开发板带入到一个适合本系统应用程序的运行环境。
2.2 视频图像的编解码
JPEG标准中定义了三种编码系统:①基于DCT的有损编码基本系统,可以用于绝大多数的压缩应用场合;②用于高压缩比、高精度或渐进重建应用的扩展编码系统;③用于无失真应用场合的无损系统。最常用的是基于DCT变换的顺序模式,称为基本系统。解压过程与压缩编码过程正好是一个相反的过程,从压缩过程中可以知道,图像数据经过DCT变换再量化之后用huffman熵编码进一步压缩而得到了压缩数据。所以要对图像进行解码首先需要进行huffman解码,接着需要将墒解码的数据根据具体的量化表进行还原再进行IDCT变化可以得到原来的图像数据。
MJPEG(Motion JPEG,动态JPEG),是动态使用JPEG算法对视频信号进行压缩,其图像视频流的基本单元就是一帧一帧的JPEG图片。它的主要特点是基本不考虑视频流中不同帧之间的变化,只单独对某一帧进行压缩。MJPEG的优点是画质比较好,能产生高质量、全屏、全运动的视频、每帧可以任意存取,可以动态调整帧率、分辨率,而且其编码相对比较容易实现。
本系统分为两个大的部分,目标机服务器软件与宿主机客户端软件。目标机服务器是采集和视频发送程序,两个线程分别完成采集和视频发送的功能;客户端软件主要用于接受TCP服务器的视频数据,并解码显示。系统工作原理如图4所示: