一種基于代碼相似度保持的嵌入式軟件更新方法
【專利摘要】本發(fā)明公開了一種基于代碼相似度保持的嵌入式軟件更新方法,包括:通過新版本代碼的地址空間生成位圖段,并且,或者以所述位圖段中的“1”表示新版本代碼中的對應地址的指令包含引用且以位圖段中的“0”表示新版本代碼中的對應地址的指令不包含引用,或者以所述位圖段中的“0”表示新版本代碼中的對應地址的指令包含引用且以位圖段中的“1”表示新版本代碼中的對應地址的指令不包含引用;將新版本代碼中所有的引用目標地址生成一個新版本定位表,每個引用目標地址在所述新版本定位表中各有一個唯一的索引,然后將新版本代碼中的各個引用目標地址分別替換成該引用目標地址在所述新版本定位表中的對應索引,生成代碼段。
【專利說明】一種基于代碼相似度保持的嵌入式軟件更新方法
【技術領域】
[0001]本發(fā)明屬于無線自組織網(wǎng)絡與資源受限的傳感網(wǎng)絡領域,涉及一種嵌入式軟件更新方法,用于實時對無線傳感器網(wǎng)絡中的程序進行更新。
【背景技術】
[0002]隨著通信、傳感器制造、嵌入式計算的日益成熟,大規(guī)模無線傳感網(wǎng)絡技術迅速發(fā)展并被廣泛應用到環(huán)境、國防、救災搶險、城市管理等諸多領域。典型的無線傳感器網(wǎng)絡由大量微型傳感器節(jié)點組成,它們能夠在惡劣及危險環(huán)境中迅速展開,并通過無線自組成網(wǎng),不受現(xiàn)有有線網(wǎng)絡基礎設施的限制。感知數(shù)據(jù)通過無線通信以多跳中繼方式匯集到數(shù)據(jù)處理中心。無線傳感器網(wǎng)絡使人們在任何時間、地點和環(huán)境條件下實時獲取大量詳實而可靠的信息,體現(xiàn)“計算無處不在”理念。
[0003]目前已經(jīng)有大量研究工作致力于如何對大規(guī)模無線傳感網(wǎng)絡進行程序更新。然而當前的軟件更新技術并不令人滿意。串行更新方法由于需要將所有的部署的節(jié)點回收,逐個寫入新版本程序然后重新部署,其低下的效率使得這種代碼更新方法不能應用到大規(guī)模的無線傳感網(wǎng)絡中去。因此提出了無線重編程技術來使得節(jié)點可以通過無線通信來自動進行程序更新。但是已有的一些方法由于向無線網(wǎng)絡發(fā)送的數(shù)據(jù)過多,造成無線傳輸能耗過大而不適用于資源受限的無線傳感網(wǎng)絡。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種基于代碼相似度保持的嵌入式軟件更新方法,讓新版本代碼和舊版本代碼之間的相似度更高,使得生成的新版本代碼相對于舊版本代碼的增量描述文件更小。
[0005]為實現(xiàn)上述目的,本發(fā)明基于代碼相似度保持的嵌入式軟件更新方法包括:
通過新版本代碼的地址空間生成位圖段,并且,或者以所述位圖段中的“I”表示新版本
代碼中的對應地址的指令包含引用且以位圖段中的“O”表示新版本代碼中的對應地址的指令不包含引用,或者以所述位圖段中的“O”表示新版本代碼中的對應地址的指令包含引用且以位圖段中的“I”表示新版本代碼中的對應地址的指令不包含引用;
將新版本代碼中所有的引用目標地址生成一個新版本定位表,每個引用目標地址在所述新版本定位表中各有一個唯一的索引,然后將新版本代碼中的各個引用目標地址分別替換成該引用目標地址在所述新版本定位表中的對應索引,生成代碼段。
[0006]優(yōu)選地,本發(fā)明所述“將新版本代碼中所有的引用目標地址生成一個新版本定位表”的方法如下:
第一步,新建一個空的舊版本代碼的定位表作為舊版本定位表,從舊版本代碼的起始地址處按照地址遞增的方向遍歷舊版本代碼的每一條指令的地址,判斷每一條指令的地址是否是舊版本代碼中的一個引用目標地址:如果是,則將相應指令的地址按遍歷的先后順序逐個添加到舊版本定位表中,如果不是,則不添加; 第二步,新建一個空的新版本代碼的定位表作為所述新版本定位表,然后從新版本代碼的起始地址處按照地址遞增的方向逐個檢查新版本代碼的每一條指令的地址是否為新版本代碼中的一個引用目標地址:
如果新版本代碼的被檢查的指令的地址是新版本代碼中的一個引用目標地址,則判斷在舊版本代碼中是否存在與所述被檢查的指令相同的指令,若存在,則根據(jù)該指令在舊版本代碼中的地址找到其在舊版本定位表中的索引,然后在新版本定位表的相同索引位置處插入新版本代碼的被檢查的指令的地址;若不存在,則將新版本代碼的被檢查的指令的地址插入到新版本定位表的第一個空位置。
[0007]與現(xiàn)有技術相比,本發(fā)明的有益效果是:分別將新版本代碼和舊版本代碼中所有的引用目標地址生成新版本定位表和舊版本定位表,在新版本定位表的生成過程中參考了已生成的舊版本定位表,使得新舊版本代碼中相同的引用目標地址在新舊版本定位表中的索引相同;然后分別將新版本和舊版本代碼中所有的引用目標地址替換成該引用目標地址分別在新版本和舊版本定位表中的索引,分別生成新舊版本代碼的代碼段,通過本發(fā)明,使得新版本和舊版本代碼的代碼段的相同部分最多,也就使得最后生成的增量描述文件比現(xiàn)有技術更小。
【專利附圖】
【附圖說明】
[0008]圖1是本發(fā)明的一種舊版本代碼及其結(jié)構的示意圖;其中,圖1(a)為舊版本代碼及對應反編譯出的匯編指令,圖1(b)表示舊版本代碼的結(jié)構,分為代碼段、位圖段和定位表;
圖2是本發(fā)明的一種新版本代碼及其結(jié)構的示意圖,其中,圖2(a)為新版本代碼及對應反編譯出的匯編指令,圖2 (b)表示新版本代碼的結(jié)構,分為代碼段、位圖段和定位表。
[0009]【具體實施方式】
為了使本發(fā)明所解決的技術問題及有益效果更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0010]以下結(jié)合圖1、2,以具體的實施例詳細說明本發(fā)明。
[0011]代碼相似度保護技術主要是為了消除因為代碼更新引起的引用地址偏移而造成的代碼相似度的降低,增加新版本和舊版本代碼的相似度,使得差分算法能找到更多的公共代碼段,生成更小的增量文件。
[0012]通過新版本代碼的地址空間生成位圖段,位圖段中每一位表示2字節(jié)(即16位)的地址,此實施例中約定,以位圖段中的“I”表示新版本代碼中的對應地址的指令包含引用且以位圖段中的“O”表示新版本代碼中的對應地址的指令不包含引用。
[0013]如圖1所示,圖2(a)為新版本代碼及對應反編譯出的匯編指令,圖2(b)表示其結(jié)構,分別為代碼段、位圖段和定位表。位圖段標記引用的指令的地址,定位表則保存引用目標地址。圖2 (a)中,新版本代碼的地址空間為“Of 93 b0 12 76 4e b0 12 e6 4d”,下劃線標記的“76 4e”和“e6 4d”表示包含引用的指令,對應的反匯編指令分別為“call#0x4e76 ”和“ cal I #0x4de6 ”,這也表明了數(shù)值是按小端格式存儲的,即內(nèi)存中存儲的“ 764e”,對應的十六進制數(shù)值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]第二步,新建一個空的新版本代碼的定位表作為所述新版本定位表。然后從新版本代碼的起始地址處按照地址遞增的方向逐個檢查新版本代碼中的每一條指令的地址是否為新版本代碼中的一個引用目標地址。如果被檢查的指令的地址是新版本代碼中的一個引用目標地址,則判斷在舊版本代碼中是否存在與所述被檢查的指令相同的指令,若存在,則根據(jù)該指令在舊版本代碼中的地址找到其在舊版本定位表中的索引,然后在新版本定位表的相同索引位置插入新版本代碼的被檢查的指令的地址;若不存在,則將新版本代碼的被檢查的指令的地址插入到新版本定位表中的第一個空位置中。
[0017]如圖2 (a)所示,新版本代碼的起始地址為4a00,也包含3條指令,按地址遞增的方向依次遍歷的地址為4a00、4a02和4a06。位于地址4a00處的指令為“Of 93”,不包含引用,所以不處理。而位于地址4a04處的“40 53”和地址4a08處的“e6 4d”都包含引用指令,首先,判斷在舊版本代碼中是否存在“76 4e”,結(jié)果為不存在,則把“76 4e”插入到新版本定位表中的第一個空位置(即索引O的位置),然后再判斷“e6 4d”是否存在于舊版本代碼中,結(jié)果為存在,則根據(jù)“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]最后,使用已有字節(jié)匹配差分方法,比較新版本和舊版本代碼的代碼段,生成增量描述文件。增量描述文件中包含兩個指令,分別為:ADD 指令:ADD1(Ii)2(ByterHByten)n COPY 指令!COPY^r^ZolcLaddress^
指令中的下標表示組成指令的各部分所占用的字節(jié)數(shù),ADD指令表示新版本代碼中的字節(jié)不在舊版本代碼中,需要額外插入,ADD1表示指令的操作碼占一個字節(jié),<n>2表示要插入的字節(jié)數(shù),占2個字節(jié),后面的<Byte「-Byten>n表示要插入的字節(jié)序列,故這個指令的大小為3+n。COPY指令表示,新版本中的字節(jié)存在于舊版本代碼中,只需要從舊版本代碼拷貝即可,COPY1表示指令的操作碼占一個字節(jié),<n>2表示要拷貝的字節(jié)數(shù),占2個字節(jié),<old_address>2表示要拷貝的字節(jié)在舊版本代碼中的起始地址,所以COPY指令共占5字節(jié)。
[0021]本發(fā)明中的方法,如上所述,生成的新版本代碼和舊版本代碼完全一樣,所以生成的增量描述文件只有一條COPY指令(COPY 10 4a00),表示從舊版本代碼的4a00地址處拷貝10個字節(jié),指令共占5個字節(jié)。
[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字節(jié); ADD 2 76 4e,表示直接插入“76 4e”,占3+2=5字節(jié);
COPY 4 4a06,表示從舊版本代碼的4a06地址開始拷貝“b0 12 e6 4d”,占5字節(jié);【背景技術】總共需要5+5+5=15字節(jié),而本發(fā)明所描述的方法只需要5字節(jié),所以本發(fā)明所描述的方法,能夠增加要比較的新版本和舊版本代碼之間的相同部分,提高了代碼間的相似度,生成了更小的增量描述文件。
【權利要求】
1.一種基于代碼相似度保持的嵌入式軟件更新方法,其特征在于,包括: 通過新版本代碼的地址空間生成位圖段,并且,或者以所述位圖段中的“I”表示新版本代碼中的對應地址的指令包含引用且以位圖段中的“O”表示新版本代碼中的對應地址的指令不包含引用,或者以所述位圖段中的“O”表示新版本代碼中的對應地址的指令包含引用且以位圖段中的“I”表示新版本代碼中的對應地址的指令不包含引用; 將新版本代碼中所有的引用目標地址生成一個新版本定位表,每個引用目標地址在所述新版本定位表中各有一個唯一的索引,然后將新版本代碼中的各個引用目標地址分別替換成該引用目標地址在所述新版本定位表中的對應索引,生成代碼段。
2.根據(jù)權利要求1所述的嵌入式軟件更新方法,其特征在于,所述“將新版本代碼中所有的引用目標地址生成一個新版本定位表”的方法如下: 第一步,新建一個空的舊版本代碼的定位表作為舊版本定位表,從舊版本代碼的起始地址處按照地址遞增的方向遍歷舊版本代碼的每一條指令的地址,判斷每一條指令的地址是否是舊版本代碼中的一個引用目標地址:如果是,則將相應指令的地址按遍歷的先后順序逐個添加到舊版本定位表中,如果不是,則不添加; 第二步,新建一個空的新版本代碼的定位表作為所述新版本定位表,然后從新版本代碼的起始地址處按照地址遞增的方向逐個檢查新版本代碼的每一條指令的地址是否為新版本代碼中的一個引用目標地址: 如果新版本代碼的被檢查的指令的地址是新版本代碼中的一個引用目標地址,則判斷在舊版本代碼中是否存在與所述被檢查的指令相同的指令,若存在,則根據(jù)該指令在舊版本代碼中的地址找到其在舊版本定位表中的索引,然后在新版本定位表的相同索引位置處插入新版本代碼的被檢查的指令的地址;若不存在,則將新版本代碼的被檢查的指令的地址插入到新版本定位表的第一個空位置。
【文檔編號】G06F9/445GK103777948SQ201410015803
【公開日】2014年5月7日 申請日期:2014年1月14日 優(yōu)先權日:2014年1月14日
【發(fā)明者】董瑋, 卜佳俊, 陳純, 王永剛, 莫璧源 申請人:浙江大學