1.本发明涉及模块升级技术领域,具体地涉及一种通信模块远程升级方法及一种通信模块远程升级系统。
背景技术:
2.随着能源互联网建设的持续深入,电网智能化水平大幅提升,用电服务质量要求不断提高,公司电网生产运行、企业经营管理、对外客户服务正经历历史性的变革,各级电网数据采集与控制,以及用户信息交互等数据需求呈爆发性增长态势。5g低时延、高带宽和大连接三大特性,以及网络切片和边缘计算等关键技术能够满足电力业务配电网各个环节安全性、可靠性和灵活性需求,可实现配网线路区段或设备的故障判断及精准定位,快速隔离故障区段或设备。
3.目前存在的通信模块的程序升级方法主要有基于jtag的程序升级方法、pc机通过usb口或者以太网连接升级、基于整包的无线升级方法等几种,但是无论是上述哪一种方法,均存在一定的弊端,并不能省时省力且准确的完成模块自动升级,目前传统的升级方法通常采用本地升级的方式,存在效率低、鲁棒性差等缺点,同时需要人工到现场点对点进行升级,工作量大,效率低下;另外传统的人工升级在升级失败时会造成原程序包破损,导致节点可能出现故障,存在一定的风险;而整包升级是整个固件的完整升级,升级数据量大,持续时间久,庞大的数据流量可能会引起网络拥塞,造成升级失败。基于上述问题,需要设计一种新的通信模块远程升级方法。
技术实现要素:
4.本发明实施方式的目的是提供一种通信模块远程升级方法及一种通信模块远程升级系统,以至少解决现有通信模块升级方法均不能省时省力且准确的完成模块自动升级的问题。
5.为了实现上述目的,本发明第一方面提供一种通信模块远程升级方法,所述方法包括:响应于升级指令,生成差分升级包;基于优化后的bsdiff算法,对差分升级包进行操作顺序重新排序;通过重新排序后的差分升级包对通信模块中的原始固件进行差分升级;完成差分升级后,判断升级结果,并在升级结果为升级成功后上报升级完成确认信号。
6.可选的,所述通过重新排序后的差分升级包对通信模块中的原始固件进行差分升级,包括:通过重新排序后的差分升级包对通信模块中的旧版本文件进行直接替换或插入。
7.可选的,所述差分升级包包括:头部区域、控制区域、差异数据区域和插入数据区域;所述头部区域为差分升级包的身份标识区域;所述控制区域为差分升级包的属性信息记录区域;所述差异数据区域为待升级的新版本文件区别于旧版本文件的差异数据区域;所述插入数据区域为待升级的新版本文件区别于旧版本文件的新增数据区域。
8.可选的,所述生成差分升级包,包括:基于bsdiff算法获得差分升级包,包括:读取升级前的旧版本文件的固件信息,对所述固件信息的后缀进行字典培训,获得后缀排序数
组;基于所述后缀排序数组遍历待升级的新版本文件,定位待升级的新版本文件与升级前的旧版本文件之间完全相同的序列;以所述完全相同的序列为基准,按固定区域范围向新版本文件中该基准的两端进行扩展,每识别到一个与旧版本文件完全不匹配的区域,便对应将该区域存入待升级文件的差分升级包,直至扩展遍历所有新版本文件,获得差分升级包。
9.可选的,所述优化后的bsdiff算法为:依据预设有向图和拓扑排序,对原始bsdiff算法中的操作顺序进行重新排序;所述重新排序的规则为:先排序无读写冲突的操作顺序,后排序存在读写冲突的操作顺序;对无读写冲突的操作顺序直接进行对应的操作处理;对存在读写冲突的操作顺序增设文件指针控制操作处理。
10.可选的,所述文件指针控制操作处理包括:确定当前文件指针的所指位置,从该所指位置开始拷贝预设数量的字节至内存中,并在旧版本文件的数据包前增加记录该所指位置的字段;基于拷贝的预设数量的字节和所述差分升级包在旧版本文件该所指位置进行相加或插入,完成一次新文件片段更新步骤,并根据文件指针偏移规则进行一次文件指针偏移步骤;重复所述新文件片段更新步骤和文件指针偏移步骤,直到所述文件指针遍历文件完成,完成差分升级包操作顺序更新。
11.可选的,所述判断升级结果,包括:获取旧版本文件的版本身份信息;在完成通信模块升级后,获取升级完成后的版本文件的身份信息;对比旧版本文件的身份信息和升级完成后的版本文件的身份信息,若二者不同,判断升级结果为升级成功。
12.可选的,所述判断升级结果,包括:在完成通信模块升级后,获取升级完成后的版本文件的身份信息;对比升级完成后的版本文件的身份信息与预设的新版本文件的身份信息,若二者相同,判断升级结果为升级成功。
13.可选的,所述方法还包括:当判断升级结果为升级失败时,重新执行差分升级操作;若重新经过预设次数的差分升级后,依旧判定为升级失败,则输出报警信息。
14.本发明第二方面提供一种通信模块远程升级系统,所述系统包括:生成单元,用于响应于升级指令,生成差分升级包;处理单元,用于基于优化后的bsdiff算法,对所述差分升级包进行操作顺序重新排序;更新单元,用于通过重新排序后的差分升级包对通信模块中的原始固件进行直接替换或插入,完成差分升级后,判断升级结果;传输单元,用于在升级结果为升级成功后上报升级完成确认信号。
15.可选的,所述生成差分升级包,包括:基于bsdiff算法获得差分升级包,包括:读取升级前的旧版本文件的固件信息,对所述固件信息的后缀进行字典培训,获得后缀排序数组;基于所述后缀排序数组遍历待升级的新版本文件,定位待升级的新版本文件与升级前的旧版本文件之前完全相同的序列;以所述完全相同的序列为基准,向新版本文件中该基准两端的文件按固定区域范围进行扩展,每识别到一个与旧版本文件完全不匹配的区域,便对应将该区域存入待升级文件的差分升级包,直至扩展遍历所有新版本文件,获得差分升级包。
16.可选的,所述判断升级结果,包括:获取旧版本文件的版本身份信息;在完成通信模块升级后,获取升级完成后的版本文件的身份信息;对比旧版本文件的身份信息和升级完成后的版本文件的身份信息,若二者不同,判断升级结果为升级成功。
17.可选的,所述判断升级结果,包括:在完成通信模块升级后,获取升级完成后的版
本文件的身份信息;对比升级完成后的版本文件的身份信息与预设的新版本文件的身份信息,若二者相同,判断升级结果为升级成功。
18.可选的,所述更新单元还用于:在判断升级结果为升级失败时,重新执行差分升级操作;若重新经过预设次数的差分升级后,依旧判定为升级失败,则生成报警信息。
19.可选的,所述系统还包括:报警单元,用于输出所述报警信息。
20.另一方面,本发明提供一种计算机可读储存介质,该计算机可读存储介质上储存有指令,其在计算机上运行时使得计算机执行上述的通信模块远程升级方法。
21.通过上述技术方案,采用差分升级的方式,将固件的新旧版本的程序数据文件做差异,形成升级需要的增量包,只需要升级新版本与旧版本的差异部分,而对于两个版本中相同部分则不需要作升级处理,通过传输更少的数据实现同样的升级效果,提高通信模块的升级效率,同时减小网络拥塞,提升升级成功率,确保远程通信的可靠性。
22.为了进一步节省嵌入式设备的内存资源开支,本发明方案还提出了优化的bsdiff算法,保证了嵌入式设备的可执行性,节省资源开支,进行模块升级的同时不会对用户使用造成干扰。
23.本发明实施方式的其它特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
24.附图是用来提供对本发明实施方式的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施方式,但并不构成对本发明实施方式的限制。在附图中:图1是本发明一种实施方式提供的通信模块远程升级方法的步骤流程图;图2是本发明一种实施方式提供的通信模块远程升级系统的系统结构图。
具体实施方式
25.以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
26.随着能源互联网建设的持续深入,电网智能化水平大幅提升,用电服务质量要求不断提高,公司电网生产运行、企业经营管理、对外客户服务正经历历史性的变革,各级电网数据采集与控制,以及用户信息交互等数据需求呈爆发性增长态势。5g低时延、高带宽和大连接三大特性,以及网络切片和边缘计算等关键技术能够满足电力业务配电网各个环节安全性、可靠性和灵活性需求,可实现配网线路区段或设备的故障判断及精准定位,快速隔离故障区段或设备。
27.在使用过程中,通信模块必定会经历多次的模块升级,目前通信模块的程序升级主要有以下几种:1)基于jtag的程序升级方法,该方法通过升级软件在本地将boot文件烧入存储芯片中。该方式下载速度慢,只适合厂内程序下载和调试,不适用远程升级。
28.2)pc机通过usb口或者以太网与采集终端连接,升级通信采集终端软件,缺点是只能通过人工到现场点对点进行升级,接线麻烦,工作量大,响应速度慢等。
29.3)基于整包的无线升级方法,整包升级需要将新版本的完整软件包进行打包,设
备接收完所有升级包,经过校验算法验证升级包的有效性和完整性后,替换旧版本的应用代码。
30.无论是上述哪一种方法,均存在一定的弊端,并不能省时省力且准确的完成模块自动升级,目前传统的升级方法通常采用本地升级的方式,存在效率低、鲁棒性差等缺点,同时需要人工到现场点对点进行升级,工作量大,效率低下;另外传统的人工升级在升级失败时会造成原程序包破损,导致节点可能出现故障,存在一定的风险;而整包升级是整个固件的完整升级,升级数据量大,持续时间久,庞大的数据流量可能会引起网络拥塞,造成升级失败。
31.基于上述问题,本发明方案提出了一种通信模块远程升级方法,采用差分升级的方式,将固件的新旧版本的程序数据文件做差异,形成升级需要的增量包,只需要升级新版本与旧版本的差异部分,而对于两个版本中相同部分则不需要作升级处理,通过传输更少的数据实现同样的升级效果,提高5g通信模块的升级效率,同时减小网络拥塞,提升升级成功率,确保远程通信的可靠性。同时,为了进一步节省嵌入式设备的内存资源开支,本发明方案还提出了优化的bsdiff算法,保证了嵌入式设备的可执行性,节省资源开支,进行模块升级的同时不会对用户使用造成干扰。
32.图2是本发明一种实施方式提供的通信模块远程升级系统的系统结构图。如图2所示,本发明实施方式提供一种通信模块远程升级系统,所述系统包括:生成单元,用于响应于升级指令,生成差分升级包;处理单元,用于基于优化后的bsdiff算法,对所述差分升级包进行操作顺序重新排序;更新单元,用于通过重新排序后的差分升级包对通信模块中的原始固件进行直接替换或插入,完成差分升级后,判断升级结果;传输单元,用于在升级结果为升级成功后上报升级完成确认信号。
33.优选的,所述更新单元还用于:在判断升级结果为升级失败时,重新执行差分升级操作;若重新经过预设次数的差分升级后,依旧判定为升级失败,则生成报警信息。
34.优选的,所述系统还包括:报警单元,用于输出所述报警信息。
35.图1是本发明一种实施方式提供的通信模块远程升级方法的方法流程图。如图1所示,本发明实施方式提供一种通信模块远程升级方法,所述方法包括:步骤s10:响应于升级指令,生成差分升级包。
36.具体的,进行模块升级时,因为往往需要对多个终端的模块进行升级,所以该步骤往往是一对多的进行同步升级,为了便于对多个终端进行升级管控,需要服务器统一产生升级指令,然后下发给终端,终端基于该升级指令进行对应的系统升级。基于用户的升级需求,服务器产生对应的升级指令,然后对应执行该升级指令。本发明方案利用的是差分升级,差分升级是一种通过传递增量文件来减少所传输代码大小的技术,通过查找不同版本程序中的相似性区域来生成差分文件,在进行数据同步时,只需传输差异文件即可,避免了传输大容量的完整文件。
37.所以,在进行升级前,首先需要生成对应的差分升级包。优选的,本发明方案利用bsdiff算法进行差分升级包生成,bsdiff算法是一种基于近似匹配理论的文件差分算法,并且该算法是与固件类型、平台无关的,所以可以做到通用化移植。首先,bsdiff算法读取旧版本固件文件,对该文件后缀进行字典排序,并利用后缀排序算法进行计算并产生后缀排序数组,然后利用该后缀排序数组,遍历新固件找到与旧固件完全相同的序列,根据新旧
固件之间的相似程度,将完全相同序列向两边扩展。完全相同序列扩展的方向为固件所在区域的前向区域与后向区域,通过相同代码的百分比以及不同代码的长度来评估新旧固件特定区域的相似程度。优选的,在bsdiff中,这些参数一般设置为50%以及8个字节,即,最终找到相似序列的完全匹配区域至少有8个字节与前一相似序列的前向拓展不匹配,且相似序列的前向与后向拓展必须满足一半以上的后缀不匹配条件。如果新固件中有一段代码与旧固件中任何区域都不匹配,那么将其作为差异数据,之后存入差分包。
38.优选的,差分升级包包括:头部区域、控制区域、diff区域(差异数据区域)、extract区域(插入数据区域);其中,所述头部区域为差分升级包的身份标识区域;所述控制区域为差分升级包的属性信息记录区域;所述差异数据区域为待升级的新版本文件区别于旧版本文件的差异数据区域;所述插入数据区域为待升级的新版本文件区别于旧版本文件的新增数据区域。
39.步骤s20:基于优化后的bsdiff算法,对所述差分升级包进行操作顺序重新排序。
40.具体的,bsdiff算法虽然适用于二进制固件文件的差分应用,但是该算法在实际使用中也存在一定的问题。如果需要稳定的运行差分还原操作(bspatch)的话,共需要准备四部分存储区:原固件存储区、从服务器接收到的差分包、差分还原后产生的新的版本固件以及设备的工作区间,这对于一些内存资源紧缺的嵌入式设备而言,是一笔不小的内存开销。固件升级过多的占用系统内存,不仅会影响其他应用程序的运行,还会降低整个系统的运行速度。
41.本发明方案需要解决这种固件升级对内存占用过多的问题,首先从问题本身出发,由文件差分算法输出的差分文件传送到嵌入式设备后,嵌入式系统利用该差分文件以及系统内的旧版固件,就可以恢复出新版固件。对于bsdiff算法,系统恢复新版固件的过程中,主要执行两类型操作。第一种是复制操作,即将由diff数据块同旧版对应区域相加生成的数据块复制到指定区域。第二类操作是插入操作,即将extract数据块插入到指定区域,也就是常规意义上的替换和插入。
42.举例说明,某旧固件存在三个区域,block a、block b、block c,该部分需求为待更新区域,对应的差分升级包为diff1、diff2、diff3,进行升级时,需要将旧版本的三个区域数据与差分升级包的三个数据进相加,得到新固件中的相似区域数据块new block a、new block b、new block c。因为这三个数据块的区域属于相似序列,所以他们的大小和长度都是相同的,相加以后复制到新固件中的地址是由差分升级包中的控制区域参数所决定的。在进行每一块区域的相加、复制操作以后,再进行插入操作,将新固件和旧固件中的差异序列extract插入到新产生的固件当中完成还原操作。因为数据体量原因和执行需求原因,旧版本固件中的数据块经过相加和复制操作后,还需要开辟一块新的存储空间用于存储新固件的数据块。通常差分文件要比新、旧版固件小很多,因此在生成新版固件的过程中,内存占用主要源于新、旧版固件。
43.基于上述问题,如果系统能够实现“原位更新”,即仅仅通过直接修改旧版固件内容来生成新版固件,那么系统就不需要单独为新版固件开辟一段内存空间,这种方式可以有效的降低内存开销。但是,想要实现“原位更新”,又会存在新的问题,即系统直接在旧版文件上进行差分还原时,可能会涉及到读写冲突问题,从而导致升级失败。
44.基于上述举例进行说明,按照bsdiff算法的还原操作,固件完成针对block b单元
的相加复制操作后,在插入extract1区域后,指针放在指定位置时会与block c区域数据冲突,导致针对block c的复制操作时会发生错误,因为block c的内容已经发生了改变。同样的,后续的block d和block e单元之间也会发生读写冲突问题。
45.进一步为了解决上述问题,本发明方案利用有向图和拓扑排序对bsdiff算法中的复制操作顺序进行重新排序,从而解决差分还原过程中的读写冲突问题。
46.具体的,首先,对所有复制操作建立一张有向图,其中顶点集,分别对应“相加并复制”或者“插入”操作,即上述还原过程中的所有block与extract都作为g中的一个节点。当且仅当与某一节点v对应的修改操作读取了由与节点u对应的复制修改操作写入的部分时,g才具有从u到v的弧度。为了解决读写冲突问题,可以对上述读写冲突有向图进行反向拓扑排序来解决,g中节点的反向拓扑顺序给出了还原更新操作的无读写冲突顺序。如果复制操作读取旧固件的存储空间与该操作写入的新固件的存储空间重叠,则需要对复制和相加操作进行特殊处理。
47.其中,对于复制和相加操作进行的特殊处理,便是增设文件指针控制操作处理。众所周知,旧固件一般存储在flash应用程序区rom中,在原bspatch算法中,旧固件所在的内存空间中有一个文件指针,该指针的移动根据控制模块中每一个三元组(x,y,z)中的参数z来进行向前移动,而根据其中的参数x可以获取到具体需要旧固件中的字节数目。基于该原理,本发明方案设计的还原操作会将从旧固件指针当前指向的位置起拷贝x字节至内存ram中,并在原有的数据包前增加一个记录文件指针的字段,记录读取的起始地址,然后在差分文件的diff数据中读取x字节的数据与读入内存ram的旧固件片段相加,再读取y字节的extract数据追加在尾部。每完成一个新文件片段的更新,将该片段写入到相应的地址,与读取旧固件时相同,利用增加的字段记录新文件片段追加写入的起始地址。每执行一次新文件片段生成,就按参数z偏移原始指针。这样不断地将旧固件片段换入内存,生成的新文件换出内存,可以大幅度地减少内存的占用。
48.在本发明实施例中,利用反向拓扑排序得到的线性路径是能够不产生读写冲突的复制操作顺序。bsdiff算法在打包差分文件时,需要按照这个顺序来放置近似匹配区域,同时将被转化的近似匹配区域以及其他所有完全不匹配区域放到最后。
49.步骤s30:通过重新排序后的差分升级包对通信模块中的原始固件进行直接替换或插入。
50.具体的,基于该重新排序,实现了系统的“原位更新”,且不会造成读写冲突的问题,保证模块稳定准确的升级。基于该操作顺序直接顺利完成模块升级便可,因为对内存的占用很小,所以模块升级过程中的故障概率也会很低。
51.步骤s40:完成差分升级包处理后,判断升级结果,并在升级成功后上报升级完成确认信号。
52.具体的,升级完成后,需要判断升级是否成功,以保证升级的有效进行。优选的,获取旧版本文件的版本身份信息;在完成模块升级后,获取升级完成后版本文件的身份信息;对比所述旧版本文件的版本身份信息和所述升级完成后的版本文件的身份信息,并在二者不同时判定为升级完成。
53.在另一种可能的实施方式中,在完成模块升级后,获取升级完成后的版本文件的
身份信息;对比所述升级完成后的版本文件的身份信息和预设的新版本文件的身份信息,并在二者相同时判定为升级完成。
54.优选的,当升级结果判定为失败时,系统将自动尝试进行第二次升级,按照上述相同的升级方法,进行第二次升级尝试,并在完成第二次升级后继续判断升级结果,若判定为升级成功,则完成模块升级。若依旧为错误,则继续第三次升级尝试,直到升级成功。但若因为模块本身原因导致的无论如何都不可能升级成功,而导致模块持续尝试升级,优选的,预设重新升级尝试次数,例如3次,在3次升级完成后依旧显示不成功时,停止进行升级尝试,而直接输出报警信息。
55.在本发明实施例中,本发明方案基于差分升级包方式升级,只需要升级新版本与旧版本的差异部分,而对于两个版本中相同部分则不需要作升级处理,通过传输更少的数据实现同样的升级效果,提高通信模块的升级效率,同时减小网络拥塞,提升升级成功率,确保远程通信的可靠性。且本发明方案利用有向图和反向拓扑排序对bsdiff算法中的复制操作顺序进行重新排序,并在原有的数据包前增加一个记录文件指针的字段,记录读取的起始地址,解决差分还原过程中的读写冲突问题,提高升级成功率。
56.实施例1步骤一:首先利用bsdiff差分算法,在服务器上得到所需的差分升级包;步骤二:服务器给终端下发升级指令,终端接收到升级指令后,读取当前模块的软件版本并进行记录;步骤三:终端响应服务器下发的升级指令,服务器开始下发升级包;升级包下载完成后,终端给服务器回复确认,确认下载完成;步骤四:终端给模块发送at命令,启动软件升级并告知模块升级包大小;步骤五:模块响应at命令,终端给模块传输升级包;步骤六:模块完成升级包接收后,利用优化后的bsdiff算法直接更新旧版本程序,当升级完成后自动重启;步骤七:模块重启完成后,向终端发送升级完成提示;终端查询模块当前版本信息并与升级前记录的版本信息做对比,如果信息不同则表示升级成功;步骤八:终端向服务器发送模块升级完成确认。
57.本发明实施方式还提供一种计算机可读储存介质,该计算机可读存储介质上储存有指令,其在计算机上运行时使得计算机执行上述的通信模块远程升级方法。
58.本领域技术人员可以理解实现上述实施方式的方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本发明各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
59.以上结合附图详细描述了本发明的可选实施方式,但是,本发明实施方式并不限于上述实施方式中的具体细节,在本发明实施方式的技术构思范围内,可以对本发明实施方式的技术方案进行多种简单变型,这些简单变型均属于本发明实施方式的保护范围。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施方式对各种可能
的组合方式不再另行说明。
60.此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施方式的思想,其同样应当视为本发明实施方式所公开的内容。