一种基于代码相似度保持的嵌入式软件更新方法

文档序号:6535681阅读:230来源:国知局
一种基于代码相似度保持的嵌入式软件更新方法
【专利摘要】本发明公开了一种基于代码相似度保持的嵌入式软件更新方法,包括:通过新版本代码的地址空间生成位图段,并且,或者以所述位图段中的“1”表示新版本代码中的对应地址的指令包含引用且以位图段中的“0”表示新版本代码中的对应地址的指令不包含引用,或者以所述位图段中的“0”表示新版本代码中的对应地址的指令包含引用且以位图段中的“1”表示新版本代码中的对应地址的指令不包含引用;将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,然后将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段。
【专利说明】一种基于代码相似度保持的嵌入式软件更新方法
【技术领域】
[0001]本发明属于无线自组织网络与资源受限的传感网络领域,涉及一种嵌入式软件更新方法,用于实时对无线传感器网络中的程序进行更新。
【背景技术】
[0002]随着通信、传感器制造、嵌入式计算的日益成熟,大规模无线传感网络技术迅速发展并被广泛应用到环境、国防、救灾抢险、城市管理等诸多领域。典型的无线传感器网络由大量微型传感器节点组成,它们能够在恶劣及危险环境中迅速展开,并通过无线自组成网,不受现有有线网络基础设施的限制。感知数据通过无线通信以多跳中继方式汇集到数据处理中心。无线传感器网络使人们在任何时间、地点和环境条件下实时获取大量详实而可靠的信息,体现“计算无处不在”理念。
[0003]目前已经有大量研究工作致力于如何对大规模无线传感网络进行程序更新。然而当前的软件更新技术并不令人满意。串行更新方法由于需要将所有的部署的节点回收,逐个写入新版本程序然后重新部署,其低下的效率使得这种代码更新方法不能应用到大规模的无线传感网络中去。因此提出了无线重编程技术来使得节点可以通过无线通信来自动进行程序更新。但是已有的一些方法由于向无线网络发送的数据过多,造成无线传输能耗过大而不适用于资源受限的无线传感网络。

【发明内容】

[0004]本发明的目的是提供一种基于代码相似度保持的嵌入式软件更新方法,让新版本代码和旧版本代码之间的相似度更高,使得生成的新版本代码相对于旧版本代码的增量描述文件更小。
[0005]为实现上述目的,本发明基于代码相似度保持的嵌入式软件更新方法包括:
通过新版本代码的地址空间生成位图段,并且,或者以所述位图段中的“I”表示新版本
代码中的对应地址的指令包含引用且以位图段中的“O”表示新版本代码中的对应地址的指令不包含引用,或者以所述位图段中的“O”表示新版本代码中的对应地址的指令包含引用且以位图段中的“I”表示新版本代码中的对应地址的指令不包含引用;
将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,然后将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段。
[0006]优选地,本发明所述“将新版本代码中所有的引用目标地址生成一个新版本定位表”的方法如下:
第一步,新建一个空的旧版本代码的定位表作为旧版本定位表,从旧版本代码的起始地址处按照地址递增的方向遍历旧版本代码的每一条指令的地址,判断每一条指令的地址是否是旧版本代码中的一个引用目标地址:如果是,则将相应指令的地址按遍历的先后顺序逐个添加到旧版本定位表中,如果不是,则不添加; 第二步,新建一个空的新版本代码的定位表作为所述新版本定位表,然后从新版本代码的起始地址处按照地址递增的方向逐个检查新版本代码的每一条指令的地址是否为新版本代码中的一个引用目标地址:
如果新版本代码的被检查的指令的地址是新版本代码中的一个引用目标地址,则判断在旧版本代码中是否存在与所述被检查的指令相同的指令,若存在,则根据该指令在旧版本代码中的地址找到其在旧版本定位表中的索引,然后在新版本定位表的相同索引位置处插入新版本代码的被检查的指令的地址;若不存在,则将新版本代码的被检查的指令的地址插入到新版本定位表的第一个空位置。
[0007]与现有技术相比,本发明的有益效果是:分别将新版本代码和旧版本代码中所有的引用目标地址生成新版本定位表和旧版本定位表,在新版本定位表的生成过程中参考了已生成的旧版本定位表,使得新旧版本代码中相同的引用目标地址在新旧版本定位表中的索引相同;然后分别将新版本和旧版本代码中所有的引用目标地址替换成该引用目标地址分别在新版本和旧版本定位表中的索引,分别生成新旧版本代码的代码段,通过本发明,使得新版本和旧版本代码的代码段的相同部分最多,也就使得最后生成的增量描述文件比现有技术更小。
【专利附图】

【附图说明】
[0008]图1是本发明的一种旧版本代码及其结构的示意图;其中,图1(a)为旧版本代码及对应反编译出的汇编指令,图1(b)表示旧版本代码的结构,分为代码段、位图段和定位表;
图2是本发明的一种新版本代码及其结构的示意图,其中,图2(a)为新版本代码及对应反编译出的汇编指令,图2 (b)表示新版本代码的结构,分为代码段、位图段和定位表。
[0009]【具体实施方式】
为了使本发明所解决的技术问题及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0010]以下结合图1、2,以具体的实施例详细说明本发明。
[0011]代码相似度保护技术主要是为了消除因为代码更新引起的引用地址偏移而造成的代码相似度的降低,增加新版本和旧版本代码的相似度,使得差分算法能找到更多的公共代码段,生成更小的增量文件。
[0012]通过新版本代码的地址空间生成位图段,位图段中每一位表示2字节(即16位)的地址,此实施例中约定,以位图段中的“I”表示新版本代码中的对应地址的指令包含引用且以位图段中的“O”表示新版本代码中的对应地址的指令不包含引用。
[0013]如图1所示,图2(a)为新版本代码及对应反编译出的汇编指令,图2(b)表示其结构,分别为代码段、位图段和定位表。位图段标记引用的指令的地址,定位表则保存引用目标地址。图2 (a)中,新版本代码的地址空间为“Of 93 b0 12 76 4e b0 12 e6 4d”,下划线标记的“76 4e”和“e6 4d”表示包含引用的指令,对应的反汇编指令分别为“call#0x4e76 ”和“ cal I #0x4de6 ”,这也表明了数值是按小端格式存储的,即内存中存储的“ 764e”,对应的十六进制数值0x4e76。指令“Of 93 b0 12”不包含引用,故在位图段中标记“00”,指令“76 4e”包含引用,故在位图段中标记为“1”,最后新版本代码的位图段为“00101”,如图2(b)所示。同理分析,旧版本代码的位图段为“00101”,如图1(b)所示。
[0014]将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,所述定位表的生成方法如下:
第一步,新建一个空的旧版本代码的定位表作为旧版本定位表,从旧版本代码的起始地址处按照地址递增的方向遍历旧版本代码的每一条指令的地址,判断每一条指令的地址是否是旧版本代码中的一个引用目标地址:如果是,则将相应指令的地址按遍历的先后顺序逐个添加到旧版本定位表中,即低地址比高地址先被遍历到,所以低地址处的相应指令的地址先被添加到旧版本定位表中,如果不是,则不添加。
[0015]如图1 (a)所示,旧版本代码的起始地址为4a00,总共包含3条指令,按地址递增的方向依次遍历的地址为4a00、4a02和4a06。位于地址4a00处的指令为“Of 93”,不包含引用,所以不添加。而位于地址4a04处的“40 53”和地址4a08处的“e6 4d”都包含引用指令,遍历时先遇到“40 53”,所以旧版本定位表中的索引O的位置存放“40 53”,随后遇到“e6 4d”,故索引I的位置存放“e6 4d”,最终的旧版本定位表如图1 (b)所示。
[0016]第二步,新建一个空的新版本代码的定位表作为所述新版本定位表。然后从新版本代码的起始地址处按照地址递增的方向逐个检查新版本代码中的每一条指令的地址是否为新版本代码中的一个引用目标地址。如果被检查的指令的地址是新版本代码中的一个引用目标地址,则判断在旧版本代码中是否存在与所述被检查的指令相同的指令,若存在,则根据该指令在旧版本代码中的地址找到其在旧版本定位表中的索引,然后在新版本定位表的相同索引位置插入新版本代码的被检查的指令的地址;若不存在,则将新版本代码的被检查的指令的地址插入到新版本定位表中的第一个空位置中。
[0017]如图2 (a)所示,新版本代码的起始地址为4a00,也包含3条指令,按地址递增的方向依次遍历的地址为4a00、4a02和4a06。位于地址4a00处的指令为“Of 93”,不包含引用,所以不处理。而位于地址4a04处的“40 53”和地址4a08处的“e6 4d”都包含引用指令,首先,判断在旧版本代码中是否存在“76 4e”,结果为不存在,则把“76 4e”插入到新版本定位表中的第一个空位置(即索引O的位置),然后再判断“e6 4d”是否存在于旧版本代码中,结果为存在,则根据“e6 4d”在旧版本代码中的地址找到其在旧版本定位表中的索引(即索引1,如图1(b)所示),然后在新版本定位表的索引I的位置插入“e6 4d”,最终的新版本定位表如图2(b)所示。
[0018]将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段。
[0019]如图2(a)所示,将新版本代码中所有的引用目标地址(即“76 4e”和“e6 4d”)分别替换成其在新版本定位表(如图2(b)所示)中的索引,分别为索引O、索引1,最终得到的新版本代码的代码段为“Of 93 b0 12 00 00 b0 12 01 00”,如图2(b)所示。注意在替换过程中要遵循小端存储格式,即替换成的索引I在代码段中的正确表示为“01 00”。同理,将旧版本代码中所有的引用目标地址分别替换成其在旧版本定位表中的所有,得到旧版本代码的代码段为“Of 93 b0 12 00 00 b0 12 01 00”,如图1(b)所示。
[0020]最后,使用已有字节匹配差分方法,比较新版本和旧版本代码的代码段,生成增量描述文件。增量描述文件中包含两个指令,分别为:ADD 指令:ADD1(Ii)2(ByterHByten)n COPY 指令!COPY^r^ZolcLaddress^
指令中的下标表示组成指令的各部分所占用的字节数,ADD指令表示新版本代码中的字节不在旧版本代码中,需要额外插入,ADD1表示指令的操作码占一个字节,<n>2表示要插入的字节数,占2个字节,后面的<Byte「-Byten>n表示要插入的字节序列,故这个指令的大小为3+n。COPY指令表示,新版本中的字节存在于旧版本代码中,只需要从旧版本代码拷贝即可,COPY1表示指令的操作码占一个字节,<n>2表示要拷贝的字节数,占2个字节,<old_address>2表示要拷贝的字节在旧版本代码中的起始地址,所以COPY指令共占5字节。
[0021]本发明中的方法,如上所述,生成的新版本代码和旧版本代码完全一样,所以生成的增量描述文件只有一条COPY指令(COPY 10 4a00),表示从旧版本代码的4a00地址处拷贝10个字节,指令共占5个字节。
[0022]而【背景技术】,比较的是旧版本代码“Of 93 b0 12 40 53 b0 12 e6 4d”和新版本代码“Of 93 b0 12 76 4e b0 12 e6 4d”,因此生成增量描述文件为:
COPY 4 4a00,表示从旧版本代码的4a00地址开始拷贝“Of 93 b0 12”,占5字节; ADD 2 76 4e,表示直接插入“76 4e”,占3+2=5字节;
COPY 4 4a06,表示从旧版本代码的4a06地址开始拷贝“b0 12 e6 4d”,占5字节;【背景技术】总共需要5+5+5=15字节,而本发明所描述的方法只需要5字节,所以本发明所描述的方法,能够增加要比较的新版本和旧版本代码之间的相同部分,提高了代码间的相似度,生成了更小的增量描述文件。
【权利要求】
1.一种基于代码相似度保持的嵌入式软件更新方法,其特征在于,包括: 通过新版本代码的地址空间生成位图段,并且,或者以所述位图段中的“I”表示新版本代码中的对应地址的指令包含引用且以位图段中的“O”表示新版本代码中的对应地址的指令不包含引用,或者以所述位图段中的“O”表示新版本代码中的对应地址的指令包含引用且以位图段中的“I”表示新版本代码中的对应地址的指令不包含引用; 将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,然后将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段。
2.根据权利要求1所述的嵌入式软件更新方法,其特征在于,所述“将新版本代码中所有的引用目标地址生成一个新版本定位表”的方法如下: 第一步,新建一个空的旧版本代码的定位表作为旧版本定位表,从旧版本代码的起始地址处按照地址递增的方向遍历旧版本代码的每一条指令的地址,判断每一条指令的地址是否是旧版本代码中的一个引用目标地址:如果是,则将相应指令的地址按遍历的先后顺序逐个添加到旧版本定位表中,如果不是,则不添加; 第二步,新建一个空的新版本代码的定位表作为所述新版本定位表,然后从新版本代码的起始地址处按照地址递增的方向逐个检查新版本代码的每一条指令的地址是否为新版本代码中的一个引用目标地址: 如果新版本代码的被检查的指令的地址是新版本代码中的一个引用目标地址,则判断在旧版本代码中是否存在与所述被检查的指令相同的指令,若存在,则根据该指令在旧版本代码中的地址找到其在旧版本定位表中的索引,然后在新版本定位表的相同索引位置处插入新版本代码的被检查的指令的地址;若不存在,则将新版本代码的被检查的指令的地址插入到新版本定位表的第一个空位置。
【文档编号】G06F9/445GK103777948SQ201410015803
【公开日】2014年5月7日 申请日期:2014年1月14日 优先权日:2014年1月14日
【发明者】董玮, 卜佳俊, 陈纯, 王永刚, 莫璧源 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1