茅正冲,叶臻,黄芳
(江南大学 物联网学院,无锡214122)
茅正冲(副教授)、叶臻(硕士研究生),主要从事嵌入式软件构件技术方向的研究;黄芳(讲师),主要从事工业控制方向的研究。
引 言
为了确保气象数据的准确可靠,需要每隔一定距离架设一个自动气象站,与中心站形成一个自动气象站网。因此,自动气象站数量多、分布广,而且很多是架设在无人值守地区。由于业务上的需求,采集器时常需要进行应用程序更新。目前的程序更新方式比较传统:首先由开发人员修改源代码,编译生成单块式的应用程序,然后由维护人员带至现场进行更新。这样的更新方式需要耗费大量的人力物力,而且在一些环境、气候恶劣的情况下还难以进行。
本文提出的基于构件的远程更新方案如图1所示。
远程更新系统的硬件结构如图2所示。远程更新系统由客户端和服务器端两部分组成。客户端由采集器和GPRS模块两部分组成,安装在自动气象站采集箱内;上位机作为远程更新服务器,软件维护人员可通过上位机上的远程更新控制软件与采集器连接,进行程序更新。
图1 基于构件的远程更新方案
采 集 器 采 用ARM 处理器和嵌入式 Linux 操 作 系统。/mnt/data1/和/mnt/data2/目 录 采用的是yaffs文件系统,用于保存用户数据;其他目录采用的是ramdisk文件系统,用于保存系统文件,系统重启后,保存的内容消失,数据重新加载,可以防止系统文件被篡改。GPRS模块使用的是宏电公司的H7118GPRS DTU,用串行通信数据线将其与采集器的串行接口连接,即可使采集器通过其与上位机通信。上位机上的远程更新控制软件是基于宏电公司提供的数据中心开发包和微软的MFC类库开发的。
图2 远程更新系统硬件结构
在自动气象站嵌入式程序远程更新系统中,需要传输的是由Linux共享库文件、ARM 可执行文件、xml文件以及更新配置文件经压缩形成的压缩包文件,若传输的数据发生任何错误、丢包等现象,都有可能导致更新包失效,程序更新无法进行。由此可见,本应用对数据传输的可靠性要求很高,对传输速率的要求相对较低,因此应该选用TCP协议进行传输。
对TCP包的封包和解包都由DTU 和配套的数据中心开发包中的函数实现,所以只需设计基于串行接口的文件传输数据包格式,采集器和上位机根据约定的数据包格式进行文件的传输。
为了保证文件传输与数据采集可以同时进行,在此设计了一种与自动气象站通信协议兼容的文件传输数据包格式。
服务器端发送的数据包的基本格式为:
PU[……]↙
那么,什么是“创造力”?德国学者海纳特在《创造力》一书中指出:“创造力”一词来源于拉丁语,大意是创造、创建、生产、造成。它与“成长”词义相近。从词源上看,“创造力”指在原先一无所有的情况下,创造出新东西。青年时代是质疑、求索和发现的时代,是一个发展创造力和实现创造的阶段。“创造”本来就包含着“成长”的意思。每个青年在求学期间,既是在求知,也是在增强创造力,是知识和能力成长的时期。
“PU”为包头,“↙”表示换行符,“[……]”为数据包的具体内容。下面对不同类型数据包的格式做详细介绍。
文件名包:
PU[Nn……n[cc]]↙
“N”为文件名包的标识;“n……n”为文件名,长度不定,不超过64字节;“cc”为校验和,占两字节,计算方法是求出文件名中每个字符ASCII码之和,保留最低字节,再转换为十六进制数对应的两字节ASCII码。
校验包:
PU[Cm……mcc]↙
“C”为校验包的标识,“m……m”为md5信息摘要的字符串形式,占32字节;“cc”为校验和,占两字节,计算方法是求出32字节信息摘要之和,保留最低字节,再转换为十六进制数对应的两字节ASCII码。校验包的作用是保证文件内容的准确无误,这对提高远程更新的可靠性至关重要,会在后面的内容中详细阐述。
PU[Dnnd……dcc]↙
“D”为文件内容包的标识;“nn”为包号,占两字节,为一字节包号对应十六进制数的ASCII码。“d……d”为文件内容,占512字节,为256字节二进制数据对应十六进制数的ASCII码;“cc”为校验和,占两字节,计算方法是求出512字节数据之和,保留最低字节,再转换为十六进制数对应的两字节ASCII码。更新包中的内容就是通过此类数据包发送的。其他内容包消息略——编者注。
客户端在收到服务器端发送的其他消息后,会根据情况给服务器端回复ASCII码表中定义的ACK、NAK 或者CAN 信号。
文件传输流程如图3所示。上位机依次发送文件名包、校验包、文件内容包、文件内容包结束消息、传输结束消息,根据采集器回复的信号决定重发、发送下一个包或者终止发送。若收到NAK 信号或者超过设置的超时时间后还未收到信号,则会进行重发。重发超过设置的次数之后,将会终止发送。这样可以防止因为一些特殊情况导致不断重发、浪费流量的情况。
更新包为压缩文件,压缩文件中至少应包含ARM 可执行文件、Linux共享库文件、xml文件中的一种,更新配置文件必不可少。更新配置文件记录更新包中的文件名称以及对应的类型,采集器接收到更新包后,解压更新包,然后根据更新配置文件中的配置信息进行相应的操作。
构件式的数据采集程序由框架构件、功能构件、解析器和配置构件4个部分组成,对应更新包中的ARM 可执行文件、Linux共享库文件和xml文件。
为了防止GPRS信号不稳定造成通信链路中断、更新包传输失败,从而导致整个更新包重新传输、浪费通信流量、增加传输时间,设计了一种断点续传机制,下面详细介绍其实现方法。
在采集器中创建一个更新包信息记录文件来记录未接收完毕的更新包信息,如文件名、信息摘要、接收时间、断点位置等。在发送更新包之前,上位机会首先发送获取待续传文件信息消息给采集器,若采集器中有未接收完成的临时文件,则会返回待续传文件信息给上位机。上位机从接收到的断点位置开始发送文件,采集器在接收过程中,每收到一个正确的数据包,就会把新的断点位置同步到更新包信息记录文件中。若更新包接收成功,则会从更新包信息记录文件中删除对应的信息。这样,无论是什么原因导致的传输中断,在下一次传输时,都能保证采集器从断点处开始接收更新包。
图3 文件传输流程
为了确保更新包的内容在传输过程中没有发生改变,使用了md5算法来验证服务器端发送的更新包与客户端接收到的更新包的一致性。
md5算法是一种不可逆的字符串变换算法,经过它计算得到的md5信息摘要是唯一的,不管字符串发生了什么变化,计算得出的md5信息摘要都是不一样的。通过这种机制,既保证了更新包内容的正确性,又大大提高了更新成功的几率。
应用程序目录结构如图4 所 示。在/mnt/data1/目 录 下 有data、info、program_a、program_b、program_download 几 个子目录以及采集程序、更新控制程序和启动脚本。data目录用于存放采集进程生成的气象数据文件;info目录用于存放应用程序的配置文件;program_a与program_b目录用于存放两个版本的应用采集程序,以确保更新的可靠性;program_download用于保存接收到的更新包;更新程序、采集程序和启动脚本的作用将在下一节详细介绍。
图4 应用程序目录结构
采集器启动后首先会运行启动脚本,启动脚本根据加载位置配置文件,从program_a或program_b目录加载采集程序,然后加载更新控制程序。启动脚本执行完毕后,采集控制程序和更新进程就同时存在于内存之中了。
上位机发送更新包时,采集进程会根据2.2节规定的数据包格式解析数据包,进行数据包的校验、文件信息的存储、文件内容的存储以及应答信号的发送。更新包接收完毕并确保正确后,若用户发送“更新程序消息”,采集进程则会通过消息队列发送消息给更新进程,通知更新控制进程进行采集程序的更新。
更新控制程序流程图如图5所示。采集进程启动后,会进入阻塞状态,直至被消息队列传来更新控制程序请求唤醒。接着更新进程会终止当前正在运行的采集进程,解压更新包,根据更新配置文件中的配置信息将可执行程序、共享库文件或xml文件移动到相应的目录,覆盖旧版的文件。
然后更新控制进程清空消息队列,启动新版采集程序。若新版采集程序运行成功,则会向消息队列发送新版采集进程信息,在一定时间内,若更新进程从消息队列中接收到新版采集进程信息,则更新成功,否则更新失败。若更新成功,则修改加载位置配置文件,使加载位置指向新版采集程序的目录;若更新失败,则启动旧版采集程序。
通过此种机制,提高了更新的可靠性,即使更新包存在问题、导致新版采集程序运行失败,也可以运行旧版采集程序,保证数据采集的连续性。由于自动气象站需要不间断地进行数据采集,因此这种保证是至关重要的。
图5 更新控制程序流程图
图6为根据此套方案开发的自动气象站嵌入式程序远程更新系统服务器,使用此程序与配套的客户端程序进行了多次远程更新测试。测试结果表明,此套方案可以成功地实现采集程序的远程更新。采集程序维护人员首先通过服务器设置配置IP地址和端口号,DTU 模块会自动进行连接。连接成功后即可选择更新包发送,发送成功后单击“更新程序”按钮即可控制采集器自动进行程序更新。
图6 自动气象站嵌入式程序远程更新服务器
本方案最大的优点是基于构件,更新时,只需发送由若干构件组成的更新包,与传统的单块式嵌入式应用程序相比,大大节省了传输的流量,提高了更新的效率。构件化前后的文件大小表略——编者注。
构件化之后,虽然文件的总大小191.4KB略大于构件化之前的大小175.6KB,但是最大构件只有31.8KB,远小于单块式采集程序的大小171.1KB。而在更新时,更新包中往往只有一个或几个构件,因此绝大多数情况下,构件化采集程序更新时需要耗费的流量远小于单块式采集程序,更新成本更低,效率更高。
结 语
本文基于嵌入式Linux操作系统以及嵌入式文件系统,设计了自动气象站采集程序远程更新方案,创新点是以构件的形式进行更新,更加节省流量。实验表明,该方案取得了良好的效果。下一步的工作目标是优化文件传输协议和压缩算法,进一步提高更新包传输的效率、减少流量的消耗。
编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。
[1]朱伟斌,张涛,顾海涛,等.基于网络的嵌入式设备远程升级系统[J].电子技术与应用,2014(2):135-138.
[2]李铁男.基于嵌入式Linux的无线文件传输系统的实现[J].计算机工程与设计,2011,32(6):1979-1986.
[3]刘明,方娇莉,尹业华,等.嵌入式监控系统中断点续传的设计与实现,[J].计算机技术与发展,2012,22(2):192-197.
[4]朱孟江,聂云杰.嵌入式终端IAP 断点续传的研究与实现,[J].单片机与嵌入式系统应用,2014,14(1):7-9.
[5]赵炯,贾培源,李中山,林旺城.嵌入式设备远程在线升级技术[J].计算机工程,2012,36(12):262-264.
[6]李俊,王金海.基于TFTP 协议的ARM 软件远程更新系统[J].工矿自动化,2010,36(7):22-25.
[7]王江波,杨仁刚.基于GPRS的配变监控终端远程更新和管理维护的研究[J].电测与仪表,2009,46(11):9-12.
[8]李桂新,蒋敏玉,黄军.基于现场总线实现远程在线更新程序的技术[J].信息化研究,2009,35(6):11-14.
[9]徐立松,郭晓金.嵌入式Linux中安全文件传输系统的设计与实现[J].数字通信,2009,36(6):78-81.
[10]刘生华,何鹏举,鄢化彪.基于TCP/IP 的单片机软件远程升级[J].单片机与嵌入式系统应用,2007(12):21-23.
[11]王恒,王颋,王泉,等.基于Bootloader的可靠嵌入式软件远程更新机制[J].微计算机信息,2007(20):57-59.
[12]王恒,王颋,李敏,等.一种高可靠的嵌入式软件远程自更新机制的研究与实现[J].工业控制计算机,2007,20(9):39-40.