远程视频监控系统软件平台的构建
2014-10-21王建华郭敬慧
王建华 郭敬慧
【摘 要】随着图像压缩编码技术以及无线通讯技术的发展,视频监控系统逐步迈入移动化,在特定场合下,如自然灾害地质查询,边防空中监控等,需要突破物理上的二维限制,借助小型无人飞行器和无线数字视频监控系统在低空进行远程实时监控。本文构建了基于Linux系统的软件开发平台,完成了基于无人飞行器的远程视频监控系统实现的初步工作。
【关键字】视频监控系统 嵌入式系统 Linux 软件开发平台
一、 嵌入式系统的定义及特点
嵌入式系统是以应用为中心,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统[1,2]。
嵌入式系统的特点可从功能和性能两个层面来衡量。
首先,在功能上,它是以应用为中心的专用系统,区别于个人计算机等通用计算机系统。嵌入式系统面向的是行业中的某项应用,因此嵌入式产品的个性化很强,软硬件结合非常紧密,软件开发过程中需要针对硬件做出移植或者优化。例如,本系统隶属于无线视频数字监控产品,并且以无人飞行器为载体,完成特定场合下的视频采集与实时传输等功能。在搭建本系统的软件平台时,需要根据需求选取合适的操作系统,并根据硬件方案进行驱动的移植和开发。开发应用程序时,需要考虑到底层硬件的性能和实际运行情况,如根据无线网络传输情况,动态调整视频压缩质量等。
其次,在性能上,嵌入式系统资源受限,软硬件必须是可裁剪的,另外嵌入式产品结构紧凑,用途固定,因此在成本、体积、功耗以及可靠性上也必须严格考究。以本系统为例,整个系统以小型的无人飞行器为载体,在硬件设计上须采用核心加扩展的方式,核心板的体积要做到尽可能的小,以安放在飞行器内部,而摄像头以及CDMA模块则通过扩展的方式,结合飞行器本身来进行整合。另外,虽然资源的受限使得核心板上自身所拥有的内存和Flash芯片容量不会太大,但可采用基于扩展的设计,如通过外接SD卡的方式来转储相关的数据(如用作存证的视频数据等)。在软件层面上,需要对移植的Linux内核做出剪裁,根据系统本身的需求量身配置,以使最后编译产品的内核映像体积最小。应用程序开发,如视频采集与编码模块,也需注意保证程序运行的稳定性,尽可能避免因为软件因素带来的断线,内存溢出,死循环等错误。
二、 嵌入式Linux系统的软件组成
一个嵌入式 Linux 系统从软件层次的角度看通常可以分为四个层次[3]:1. 引导加载程序:即Boot Loader程序。2. Linux 内核:特定于嵌入式开发板的定制内核以及内核的启动参数。3. 文件系统:包括根文件系统和建立于 Flash 内存设备之上的文件系统。4. 用户应用程序:特定于用户的应用程序。
典型的嵌入式Linux系统存储设备的空间分配如图1所示。
在本系统中,选用一块32MB的NOR Flash存储芯片,用于存放引导加载程序,Linux内核和包含应用程序的文件系统。其中,引导加载程序和内核的占用空间分别规划为256KB和2MB。下面各小节详细阐述了嵌入式视频服务器上软件平台的构建过程,这个基本的软件运行平台是系统开发和应用的基础。
三、 嵌入式视频服务器软件平台的构建
1 系统开发模型
嵌入式系统开发的两大特点是分布式开发以及交叉编译。鉴于嵌入式系统资源受限的特点,不能在嵌入式产品上直接进行开发,而是选择硬件和软件资源丰富的宿主机进行分布式开发,通常是PC机,而嵌入式产品作为目标机。由于两者的硬件体系结构一般不相同(如本系统,宿主机基于x86,而目标机基于ARM),因此在宿主机上开发的程序需要经由交叉工具链进行编译和链接,最后通过通信手段送至目标机上运行。本系统的开发模型如图2所示。
在本系统开发中,宿主机和目标机有三种通信手段:
1. 串口通信。用于两机的信息交互,在经过波特率等属性协商后,目标机上的信息经由串口输出到宿主机的串口客户端进行显示,反馈给用户,同时用户也可通过串口客户端输入相关的控制命令到目标机上,用以操纵目标机上的软件参数及流程。
2. JTAG通信。用于裸机上的程序烧写,宿主机可通过Multi-ICE仿真器与目标机上的JTAG调试接口相接,通过调试代理,将制作生成的引导加载程序映像串行烧写至目标机Flash芯片中;
3. 网络通信。制作好的内核以及文件系统映像一般体积较大,可先通过网络下载到目标机内存中,再通过已做好的烧写程序和驱动进行脱机烧写,这样可大举提高烧写速率。
因此,基于本系统的开发模型,在宿主机上需要首先搭建好开发环境。
2 主机环境的搭建
本系统开发中,宿主机上选用的开发环境为Fedora 19。主机环境搭建主要包括了三个方面的内容[4]:交叉工具链的安装,TFTP服务器的配置以及NFS服务器的配置。
1. 交叉工具链的安装。
嵌入式交叉工具链由一套用于编译、汇编、链接、二进制工具及库的组件组成。主要包括了编译器arm-linux-gcc,汇编器arm-linux-as,连接器arm-linux-ld,二进制工具如arm-linux-nm, arm-linux-strip等,基于交叉编译的库glibc等。
交叉工具链的选择上,一般需要根据编译目标的版本,选择既有的成熟工具链。工具链和被编译对象的版本匹配很重要,否則容易引起因为兼容性导致的编译问题。在本系统中,使用Freescale公司提供的成熟工具链,用于对3.10.1版本的内核进行编译。其中,编译器版本为4.1.1,GNUC库glibc版本为2.9。安装过程如下:
(1)建立工作目录
[root@localhost ~]#mkdir /root/MX27project/
(2)将交叉工具链压缩包拷贝至工作目录并解压
[root@localhost MX27project]#tar xjvf gcc-4.1.1-glibc-2.4.tar.bz2
(3)导入环境变量使工具对shell可见
在/root下的.bash_profile最后,加上:
export PATH=/root/MX27project/gcc/arm-linux/bin:$PATH
2. TFTP服务器的配置
TFTP协议基于传输层UDP协议,是用来下载远程文件的最简单的网络协议,在开发过程中主要用于获取内核映像及文件系统映像。通常在目标机上运行的引导加载程序中,包含有TFTP的客户端,因此需要在宿主机上配置和开启TFP服务器。TFTP服务器的核心配置过程如下:
建立TFTP服务器根目录
[root@localhost MX27project]mkdir /tftpboot
修改TFTP配置文件
主要对/etc/xinetd.d/tftp做出修改,在service tftp中,将disable设置成no,将server_args设置成-s /tftpboot
打开TFTP服务器
[root@localhost MX27project]chkconfig tftp on
[root@localhost MX27project] /etc/init.d/xinetd restart
3. NFS服务器的配置
通过NFS可以在宿主机和目标板之间共享文件,目标板通过挂载NFS文件系统能直接运行位于宿主机上的用户程序,省去了Flash烧写的过程。因此,NFS文件系统是开发态使用的根文件系统。在宿主机上配置和开启NFS服务器的主要过程如下:
(1)配置NFS服务器
配置文件是/etc/exports,设置内容如下:
/nfsroot 192.168.1.*(rw,sync,no_root_squash)
其中,/nfsroot为NFS服务器的根目录,192.168.1.* 为允许挂载该NFS服务器的IP,rw,sync,no_root_squash表示服务器访问限制。
(2)启动NFS服务器
[root@localhost MX27project]service nfs start
3 RedBoot的移植
移植的总体思路为:先添加硬件开发平台相关硬件的驱动代码支持(已提供),然后在配置文件中添加目标平台,指定包配置,进行代码树的构建和编译,最后将生成的redboot映像烧写进系统Flash芯片中。
4 Linux内核的移植
就嵌入式Linux系统而言,有各种体系结构的处理器和硬件平台,用户根据自己的需要定制硬件平台并做一些移植工作。由于Linux内核具备可移植性的特点,并且已经支持了很多种目标板,可以从中找到跟自己硬件平台类似的目标板,参考内核已经支持的目标板来进行移植工作。这里选用的Linux内核是针对Freescale i.MX27参考开发平台的Linux Platform Support for i.MX27,内核版本号是Linux 3.10.1。
内核剪裁,配置和移植的主要步骤如下:
解压内核,修改顶层Makefile。
修改或添加相关代码到内核源码树中。
配置内核。
在内核源码根目录下,键入make menuconfig命令,出现内核配置界面,通过图形化的方式进行内核的剪裁配置。
编译内核。
配置完毕后,保存退出,在内核源码根目录下,键入make zImage命令进行内核的编译。编译成功后,在arch/arm/boot目錄下会生成zImage内核压缩映像。将zImage放置在前面配置好的TFTP服务器根目录下。
烧写内核到Flash芯片中。
启动嵌入式视频服务器系统,进入RedBoot命令模式,设置系统及宿主机IP地址为同一个网段:
ip_address –l 192.168.1.2 –h 192.168.1.1
首先,从宿主机上下载内核压缩映像到系统内存中:
load –r –b 0x00100000 zImage
然后,将内核映像烧写到NOR Flash芯片中:
fis create –b 0x100000 –l 0x200000 –f 0xC0040000 kernel
其中,规划内核占据的Flash芯片偏移起址为0x40000,大小为2MB。
5 文件系统的制作
为建立根文件系统,首先需要遵照Linux文件系统的架构,建立必备的空目录树,如bin及sbin目录用于存放二进制执行文件,etc目录用于存放配置脚本,lib目录用于存放程序运行所需要的动态库,dev目录用于存放设备文件等等。然后在相应的空目录下填充内容,如编写启动脚本rcS放置于etc目录中,将交叉工具链中提供的库拷贝到lib目录中,建立必备的设备文件放置于dev目录中,而对于二进制执行文件,如果是用户自行添加的应用程序,可直接放入bin目录中(或sbin目录中),如果是内置命令,则可借助开源的第三方软件生成,本软件开发平台利用开源软件BusyBox。
四、结束语
本文介绍了基于无人飞行器视频监控系统基本软件平台的搭建过程。首先分析了典型的嵌入式系统的特点,结合Linux操作系统的优点,为系统选择基于嵌入式Linux操作系统的解决方案。然后讨论了嵌入式Linux系统的软件组成,并针对组成成分进行无线监控设备软件平台的构建,包括了主机环境的搭建,RedBoot的移植,Linux内核的移植和文件系统的制作等,为后续无人飞行器的远程视频监控系统功能的实现提供了一个基本的软件平台。
参考文献:
[1] 杨宗德, 嵌入式ARM系统原理与实例开发, 北京大学出版社, 2007.
[2] Dejan Milojicic, Embedded Systems, IEEE Concurrency, 2000, Vol.8.
[3] 詹荣开, 嵌入式BootLoader技术内幕, IBM DW, 2003.
[4] 韦东山,嵌入式Linux应用开发完全手册,人民邮电出版社,2008.
作者简介:王建华,男,成都理工大学工程技术学院(614007),讲师,主要研究方向:计算机网络,空间数据库管理,E-mail:344516913@qq.com;郭敬慧,女,成都理工大学工程技术学院(614007),硕士,主要研究方向:计算机应用技术。