佘 东
(安徽工业经济职业技术学院,合肥230051)
在地质矿山开采和隧道施工等环境中,作业面距地面监控中心较远,生产环境非常恶劣。极易发生火灾、水灾、塌方等安全事故,工人的人身安全和健康受到威胁,安全生产也受到很大的影响。采用基于ARM和Ubuntu的地质矿山监控系统能够将井下、隧道等作业面的情况实时地传送到地面的控制中心,便于发现问题,安全防患于未然,为科学调度、决策提供了直观、可靠的方法。
本项目采用Samsung S3C2440作为嵌入式微处理器,它主频400MHz,最高533MHz。拥有独立的16kB指令Cache、16kB数据Cache以及存储器管理单元,具有更高的指令和数据处理能力,能够运行完整的Linux操作系统。同时它集成了USB控制器、以太网控制、RTC、SPI、I2C等丰富的外围设备,非常适合本系统[1],系统采用的硬件平台的总体结构如图1所示。
图1 总体结构图
可以在S3C2440运行的嵌入式操作系统有很多,如Linux、VxWorks、Windows CE、uC/OS-Ⅱ等,本项目采用Ubuntu系统作为嵌入式系统平台。Ubuntu是Linux操作系统的一种,本项目采用的版本为10.04LTS,其开发代号为Lucid Lynx,于2010年4月发布,目前Ubuntu最新版本是11.10,开发代号:Oneiric Ocelot。使用Ubuntu系统,主要因为其强大的功能,对硬件、网络的良好支持,并且免费使用、文档资料丰富、代码开源。
在进行嵌入式开发之前,首先要建立一个交叉编译环境,交叉编译工具主要由binutils、gcc和glibc几个部分组成(有时用别的c库来代替glibc,例如uClibc、dietlibc和newlib)。在ARM平台上移植ubuntu,Host是一台一般的PC机,它通过串口或网络接口与Target通信[2]。安装时需要以下文件:arm-linux-gcc-3.4.1.tar.gz、glibc-2.3.3.tar.gz、linux-2.6.8.tar.gz、crosstool-0.43.tar.gz、binutils-2.15.tar.gz、glibc-linuxthreads-2.3.3.tar.gz、binutils-2.18.tar.gz。方法如下:
(1)先安装binutils的2.18版本
sudo apt-get install bison flex build-essen-tial patch libncurses5-dev。
(2)安装4.1的GCC,并建立快捷方式
#sudo apt-get install gcc-4.1
#sudo ln-s/usr/bin/gcc-4.1/usr/bin/gcc。
(3)修改sh版本。
(4)解压crosstool-0.43源码包,并修改配置文件。
(5)将linux-2.6.8源码包目录下的/script/kconfig/mconf.c中的91行static struct menu*current_menu;改为struct menu*current_menu;这是为了解决"*current_menu"相关的错误。
(6)执行sh arm-softfloat.sh,约需1h。
(7)修改环境变量,添加如下内容:
PATH = MYMPATH:/home/linux/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloatlinux-gnu/bin,并执行$source.bashrc。
(8)执行命令$arm-softfloat-linux-gnugcc-v直至交叉编译环境创建成功。
(9)恢复修改的gcc及dash系统配置。
系统首先通过分布在矿山、隧道等环境中的摄像头设备获取原始的视频信号(即RGB信号),其次通过压缩JPEG算法把RGB信号转换成可接收的JPEG视频流数据,然后把JPEG视频流数据封装成为可传输RTP格式,最后通过网络接口传输。在部署网线的地方可利用以太网接口直接传输,无法部署网线的可利用GPRS无线传输模块实时传送到计算机网络上[3]。地面人员在相应的监控中心负责实时监控的客户端,可通过监控软件获得JPEG视频数据流,并利用通用流媒体播放器实时解压JPEG视频数据在显示器上显示出来。通过上述措施,在地质矿山开采和隧道施工等环境中,一旦监控人员发现作业面出现异常,可实时通知作业人员紧急处理或立即撤离,从而保证工人的人身安全和安全生产的顺利进行。
Ubuntu环境下的视频采集程序主要是对一个称为Video4Linux的程序模块进行编程。Video4Linux可对各种摄像头驱动进行统一管理,并为用户对摄像头的操作提供了一系列的编程接口,如open()、close()、ioctl()以及I/O控制和内存映射等函数,使用它可不必直接对USB摄像头驱动程序操作,而直接对Video4Linux模块操作即可,方便了程序的编写[4]。方法如下:
(1)视频设备打开,使用open()函数,int open(struct video_device*,int mode);
(2)摄像头信息读取,主要是读取video_capability结构体的数据,使用函数:ioctl(vd->fd,VIDIOCGCAP,&(vd->capability)来完成。
(3)进行视频采集,本项目主要是采用将摄像头缓冲区的图像帧映射到内存,然后再读取的方式,可以提高视频采集的效率。要用到的两个结构体为:video_mmap和video_mbuf,其中video_mmap结构体用于设置要映射到内存的图片帧数、格式和图片属性,而video_mbuf结构体实际存储摄像头缓冲区的图像帧信息。第一步先设置video_mmap结构体,对实际要映射到内存区的图片帧进行设置,第二步使用函数:ioctl(vd->fd,VIDIOCGMBUF,&(vd->mbuf)来提取实际摄像头缓冲区图片帧的信息。最后就是将这些帧信息映射到内存中,利用函数:mmap(0,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,0)来完成,并把映射到内存的地址通过函数返回。
(4)完成对这些映射到内存的图片帧的读取,使用函数:ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->vmmap)可进行图片帧的读取,使用函数:ioctl(vd->fd,VIDIOCSYNC,&vd->vmmap.frame)可进行图片帧是否读取完毕的检测。
通过测试表明,在有线网络中该系统能很好地实现地质矿山信息的监控。在无线网络中,该系统也能较好地实现视频监控,随着坑道或隧道的深入,无线传输会出现些许的偏差,此时需要通过架设基站(无线电收发信电台)的方法,提供AccessPoint(即无线访问接入点),当移动信号充足时,即可通过GPRS无线传输监控视频,为地质矿山开采和隧道施工等环境提供安全保障。
[1]纪波.基于嵌入式Linux的视频监控系统的实现[J].电脑知识与技术,2011(8):1918-1919.
[2]吴平.基于X264的嵌入式视频监控系统设计[J].电视技术,2011(7):108-110.
[3]孙继平.矿井安全监控系统[M].北京:煤炭工业出版社,2006:89-92.
[4]杨水清,张剑,施云飞.ARM嵌入式Linux系统开发技术详解[M].北京:电子工业出版社,2008:152-154.