面向分布式地震仪的应用升级更新软件设计
2019-09-10李怀良牟雪娇
蔺 晨,李怀良,牟雪娇
(西南科技大学核废物与环境保护国防重点学科实验室,四川绵阳 621010)
0 引言
分布式地震数据采集系统通常由各类资源(如计算、内存及传输带宽等)受限的嵌入式节点系统构成,需要长期野外作业,存在应用维护(漏洞修复)、需求更新(功能升级)等实际需求[1]。但是,目前快速的应用升级更新技术在地震仪器的应用升级方面应用远少于通用电子产品领域。
目前,嵌入式节点系统的程序更新方式主要分为单节点下载器烧写和基于各类网络服务挂载的更新方法两类。前者主要利用外界媒质(如紫外线、高压电、低压电等)、专用烧写工具和软件[2],但是在分布式系统规模较大时该方法存在耗时耗力、生产效率低的问题,因此人工采用下载器烧录的方式不能满足实际需求[3];后者主要利用宿主机和目标机(采集站)上的各类网络服务实现各采集站的程序升级更新[4],如NFS、TFTP、TCP/UDP、SAMBA和SSH等,但是该方法要求操作人员具备嵌入式软件开发能力,仅适用于设备研发和调试阶段。
上述两种方式均存在重复人工操作、耗时耗力等问题,不适用于已投入生产的仪器,且开发人员和用户角色分离的实际对应用升级方式提出更加便捷、高效的要求[1-3]。因此,本文提出一种基于UDP和FTP协议的分布式地震仪的应用升级方法,整合了基于网络方式的应用升级步骤,开发了一套用于固件程序更新和命令消息发送的软件,主要分为Windows PC上的C#程序和采集站上的嵌入式Linux C应用程序,利用各节点嵌入式系统来批量完成各类重复操作,方便快捷、提高效率。该方法的研究与测试主要在课题组研制的复杂山地多波宽频带分布式地震数据采集系统[5]上进行。
1 总体方案设计
1.1 应用升级方法总体方案
图1所示为分布式地震数据采集系统的结构框图。该方法所依附的系统架构如图2所示,主要由同一局域网内的若干搭载嵌入式Linux系统的采集站、中央服务器和用户控制台Windows PC机(运行地震数据处理软件)构成,实现地震数据采集、数据回收、数据可视化以及固件在线升级[6]。而Linux PC机主要用于开发者进行仪器功能程序开发,提供待更新的固件程序,可通过U盘、SAMBA等网络服务的方式将固件包下载到Windows PC上。
图1 分布式地震数据采集系统的结构框图
图2 在线更新方法依赖的系统架构图
用户控制台负责准备待更新的固件数据包,并发送相应的更新消息、控制命令。中央服务器负责对用户控制台发送的固件数据包、指令消息进行转发。采集站对中央服务器传来的更新消息或命令消息进行解析,执行相关指令。
1.2 固件包上传的两级目录机制
固件包主要包括可执行程序文件、采集站配置参数文件等,要求更新机制具有很强的可靠性。对于采集站固件更新,系统中采用双目录将固件执行与固件存储分离,若当前升级失败,在系统未损坏条件下重启后还可回到上一稳定版本。具体过程:首先,将固件包上传更新目录,再由采集站解析软件包从更新目录拷贝到执行目录。其次,需在嵌入式Linux系统内核中开启FTP服务并设置开机启动相关进程,而Windows PC主要根据待升级节点IP列表建立FTP连接,初始化连接参数(FTP连接个数、被动模式、端口等),再获取待更新固件包的绝对路径,将文件上传到指定目录。最后,在嵌入式Linux系统新建目录/var/ftp/update.iso/作为固件包的存储目录,在本软件更新操作执行完成后,固件程序将被存入采集站功能程序的执行目录/home/station/。这种两级目录更新机制,可以有效避免采集站在更新过程中由于异常(如:突然断电)造成重启时系统崩溃的问题。
1.3 自定义格式消息包发送
消息包主要包括程序更新消息和命令控制消息两类,格式简单,数据量小。因此选择传输延迟小、效率高的UDP协议进行传输[7],用于告知采集节点执行相应的消息命令或进行程序升级操作。本方法自定义的消息包格式说明如表1所示。
表1 自定义消息包格式说明
注:固件更新消息内容的前缀为固件名称,后缀是以时间命名的版本号;程序固件以课题组研发的分布式地震数据采集系统中的程序命名。
2 程序升级更新软件实现
2.1 Windows PC端的固件及消息发送软件
本文以降低仪器设备维护难度、便于用户使用为目标,开发了与地震数据处理软件共用同一主机的固件更新软件。该软件流程如图3所示,主要功能是选择采集网络拓扑中的若干采集节点,建立FTP连接上传固件包、建立UDP连接发送消息命令等。
图3 Windows PC端C#.NET发送软件流程图
本发送软件主要采用C#在.NET框架下开发而成。首先,Windows PC发送软件打包固件包和消息包,通过TcpClient对象连接中央服务器IP,通过3333端口的Netty服务以StartWrite方法将固件包和消息包发送至服务器,并且最终在服务器提供的Tomcat容器中获取分布式采集网络的拓扑信息。其次,中央服务器整理数据包格式,以自定义协议格式将数据包在Netty服务下转发至各个采集站。此外,服务器还提供了Jfinal Java Web服务,用于获取分布式地震数据网络的活动信息。最后,采集节点在21端口提供FTP服务,用于支持数据文件传输,在8000端口提供UDP服务,支持接收更新消息和命令控制消息。
2.2 Linux采集节点端的ANALYSIS消息解析软件
Linux采集节点端的消息解析软件主要实现固件包的接收、消息包的解析功能。解析软件主要是在Linux PC(宿主机)上通过Eclipse IDE工具,借助arm-linux-交叉编译工具链,采用C/C++语言进行交叉编译开发而成,再将其下载到嵌入式Linux采集站(目标机)上运行。
为了使新的固件程序能够在采集站程序更新后或系统重启后自动加载运行,需要修改嵌入式Linux系统的开机启动脚本文件/etc/init.d/rcS,以便重启自动运行新版本程序[8]。开机启动项设置如表2所示。
对于固件程序,需在节点系统Linux内核源码包编译成内核映像uImage时,需要在配置菜单项menuconfig过程中,配置“FTP protocol support->”相关服务使得节点系统支持FTP协议,并开启FTP相关服务,使系统支持远程中央服务器访问,接收服务器上传至采集站上的固件程序包。
表2 自开机启动项设置说明
对于消息包,主要通过ANALYSIS解析软件在8000端口接收服务器发送的UDP消息包。ANALYSIS解析软件根据程序功能主要分为4部分:建立连接、接收消息、提取消息和执行操作。首先,由中央服务器发来连接请求,通过握手机制建立连接。其次,采集站通过recvfrom()函数实现消息包的接收。然后,根据自定义消息格式提取“:”分隔符前的消息头并判别类型,若为命令消息则保存消息内容,若为固件更新消息则去除版本信息后保存消息内容。最后,执行命令或更新操作,若为固件更新消息则将程序拷贝至/home/station/下,并将程序名、版本名和当前的系统时间写入自建的更新日志/var/ftp/update.log中;若为命令消息则调用system()系统,创建子进程执行命令。图4所示为节点系统端指令解析软件程序流程图。
图4 节点系统端指令解析软件程序流程图
3 测试与分析
3.1 实验测试
在同一局域网下,测试发送软件和采集站端的解析软件工作情况。设置2组实验,对比2种程序升级方法的更新便捷性:A Linux PC-ARM采集站(宿主机-目标机)更新测试。B Windows PC-中央服务器-ARM采集站更新测试。各站点IP信息说明如表3所示。
表3 各测试站点IP信息说明
注:更新包以GPS为例。更新消息格式为“UpdateFirmware:GPS_20190101”。
实验A:4个步骤实现Linux PC-ARM采集站程序升级更新。默认事先已搭建好NFS服务、SSH服务等。
(1)利用puTTY工具SSH远程登录单个采集站;
(2)在采集站控制台输入“mount -t nfs -o nolock 192.168.1.102:/nfs_root /mnt”,实现nfs目录挂载,便于将Linux PC上的固件程序共享到采集站上/mnt目录下;
(3)将GPS可执行文件从宿主机交叉编译的工程目录/Debug/下拷贝至NFS共享目录/nfs_root;
(4)在SSH远程终端上将共享至/mnt目录下的GPS可执行文件拷贝至执行目录/home/station/,修改权限“chmod 777 /home/station/GPS”后重启系统,更新程序固件成功;
(5)重复(1)至(4)步实现A、B、C 3个采集站程序升级更新,共计12个步骤。采集站端命令行更新程序操作如图5所示。
图5 采集站A端命令行更新程序操作
实验B:三步实现Windows PC-中央服务器-ARM采集站的程序升级更新。默认事先已搭建好SAMBA服务、FTP服务等,且默认已配置好表2所示的各种开机启动项。更新软件拓扑获取界面及消息发送界面如图6所示。
(1)Windows PC机通过Samba服务将GPS可执行文件从Linux PC下载至本地;
(2)通过服务器的Tomcat容器获取在线采集站A、B、C的拓扑结构,检查在线站点;
(3)选中所有待更新的采集站,一次性上传GPS更新包,发送更新消息“UpdateFirmware:GPS_20190101”,输出反馈消息。
(4)测试命令行控制功能,结果如图7所示。测试将采集站A的home目录所有文件备份到新建/backup备份目录中。
图6 更新软件拓扑获取界面及消息发送界面
图7 更新软件命令行控制接口功能界面
3.2 对比分析
为了直观分析两类更新方式的特点,作表4所示的两类应用升级方式各项参数对比情况表。随着分布式系统的规模增大,基于网络挂载的应用升级方式,拖慢工作进度,降低地震勘探仪器的作业效率。而本文实现的在线更新软件进行程序升级仅需3步操作,用户点击待上传的固件文件,发送软件按固定格式打包,并发送固件更新消息,随后等待采集站端的反馈即可。
表4 两类应用升级方式各类参数对比情况
4 结束语
本文介绍了一种分布式地震仪的应用升级方法及其软件实现过程,并对发送软件和解析软件进行测试,分析了基于网络挂载的程序更新方式与本方法对应的软件批量更新程序的方式各自的适用情况。由此得到结论,传统方式由于交叉编译的程序开发方式,步骤繁多,对操作人员有很高的要求,仅适用于仪器开发和调试阶段。在仪器投入生产使用后,本软件操作简单,能够有效地实现程序批量升级,显著减少重复烧写、下载等操作,提高生产效率。此外,发送软件在用户控制台的Windows系统下采用C#开发与地震数据处理软件共用一台主机,能够方便用户批量更新仪器程序、配置文件等,无需开发者去现场维护,从而提高程序版本升级的效率,降低用户使用过程中仪器的维护难度。