本公開涉及物聯(lián)網(wǎng),尤其是涉及一種物聯(lián)網(wǎng)固件升級處理方法及其裝置。
背景技術:
1、目前,物聯(lián)網(wǎng)市場正在蓬勃發(fā)展,越來越多的嵌入式設備被開發(fā)和使用。一般而言,設備商為了占領市場會選擇將具備基礎功能的產(chǎn)品快速投入生產(chǎn)和發(fā)布,然后在后續(xù)的固件版本中再補齊和豐富各種功能。也即是,固件升級屬于操作系統(tǒng)的基礎能力,相應于此,對應于物聯(lián)網(wǎng)設備的操作系統(tǒng),由于設備功能會不斷演進,通過固件升級便可以快速進行功能迭代和問題修復。
2、通常,這類產(chǎn)品都需要預留升級能力,而差分升級往往是一個最優(yōu)選擇,一方面可以節(jié)省下載流量和存儲空間占用,另一方面其具備的校驗機制可以保證升級流程可控并且無“變磚”風險。
3、在對已有的物聯(lián)網(wǎng)設備固件升級方案進行分析后,本公開認為以往升級處理過程是對編譯后的二進制系統(tǒng)文件進行差分,即使是少量源碼的改動也會導致編譯后的二進制系統(tǒng)文件較大差異,例如,在源碼中添加幾行代碼,之后的代碼就需要騰出新指令的空間從而會向后移動。而對此問題有所改進的其他固件升級措施也存在下述弊端:差分過程改為對新舊二進制文件進行反匯編,因此在還原階段需集成反匯編和匯編能力,使得boot增大;此外,現(xiàn)有的其他升級方案不僅會占用差分包空間,而且為了保證斷電后能繼續(xù)升級,需要持久化保存反匯編生成的op和addr信息,從而要消耗較大的flash空間,也會導致還原時間延長。
技術實現(xiàn)思路
1、鑒于上述問題而提出了本公開。本公開提供了一種物聯(lián)網(wǎng)固件升級處理方法及其裝置,并相應地還提供了一種計算機可讀存儲介質(zhì)。
2、根據(jù)本公開的一個方面,提供了一種用于生成升級補丁的物聯(lián)網(wǎng)固件升級處理方法,包括:
3、分別對新固件文件以及舊固件文件進行跳轉(zhuǎn)指令識別;
4、利用舊固件的跳轉(zhuǎn)指令識別結果以及預設的函數(shù)映射表,生成重點函數(shù)映射表;
5、將重點函數(shù)映射表分別與新固件及舊固件的跳轉(zhuǎn)指令識別結果進行結合,得到對應的新轉(zhuǎn)換固件以及舊轉(zhuǎn)換固件;
6、利用新轉(zhuǎn)換固件以及舊轉(zhuǎn)換固件,制作差分包;
7、將差分包與重點函數(shù)映射表一并打包得到固件升級補丁。
8、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)固件升級處理方法,所述生成重點函數(shù)映射表包括:
9、構建新固件與舊固件各自的映射文件,所述映射文件包括函數(shù)名和對應的函數(shù)地址;
10、按照函數(shù)名合并新固件與舊固件各自的映射文件,得到所述函數(shù)映射表;
11、在所述函數(shù)映射表中查找舊固件的跳轉(zhuǎn)指令的函數(shù)地址,并統(tǒng)計使用次數(shù);
12、基于使用次數(shù)進行跳轉(zhuǎn)指令篩選,并以篩選出的跳轉(zhuǎn)指令構建所述重點函數(shù)映射表。
13、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)固件升級處理方法,所述得到對應的新轉(zhuǎn)換固件以及舊轉(zhuǎn)換固件包括:
14、分別遍歷新固件及舊固件各自跳轉(zhuǎn)指令的函數(shù)地址;
15、在識別到重點函數(shù)映射表內(nèi)存在匹配的舊函數(shù)地址后,使用重點函數(shù)映射表中與該舊函數(shù)地址對應的新函數(shù)地址替換固件中對應的跳轉(zhuǎn)指令的原機器碼,分別得到與舊固件對應的舊轉(zhuǎn)換固件以及與新固件對應的新轉(zhuǎn)換固件。
16、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)固件升級處理方法,所述制作差分包包括:
17、對新轉(zhuǎn)換固件以及舊轉(zhuǎn)換固件進行差分處理,得到初級差分包,所述初級差分包至少包含控制數(shù)據(jù)、擴展數(shù)據(jù);
18、從初級差分包的控制數(shù)據(jù)中遍歷擴展數(shù)據(jù)的地址信息,重新從新固件文件中取出每一段地址范圍的數(shù)據(jù)重建擴展數(shù)據(jù),得到最終的差分包。
19、根據(jù)本公開另一個方面,提供了一種用于生成新固件的物聯(lián)網(wǎng)固件升級處理方法,包括:
20、對固件升級補丁進行解析,得到差分包中的數(shù)據(jù)以及重點函數(shù)映射表;
21、對原固件文件進行跳轉(zhuǎn)指令識別,并與重點函數(shù)映射表結合,生成還原階段的舊轉(zhuǎn)換固件和舊跳轉(zhuǎn)位置信息;
22、利用從差分包解析出的數(shù)據(jù)以及舊跳轉(zhuǎn)位置信息,生成新跳轉(zhuǎn)位置信息;
23、利用從差分包解析出的數(shù)據(jù)以及還原階段的舊轉(zhuǎn)換固件,生成新轉(zhuǎn)換固件;
24、利用新跳轉(zhuǎn)位置信息以及新轉(zhuǎn)換固件生成新固件。
25、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)固件升級處理方法,所述生成還原階段的舊轉(zhuǎn)換固件和舊跳轉(zhuǎn)位置信息包括:
26、對原固件進行跳轉(zhuǎn)指令識別并解析函數(shù)地址;
27、從重點函數(shù)映射表中查找新地址;
28、若匹配到解析出的函數(shù)地址,則將原跳轉(zhuǎn)指令的機器碼替換為新地址,生成舊轉(zhuǎn)換固件;
29、將所有替換過的跳轉(zhuǎn)指令位置進行記錄,作為舊跳轉(zhuǎn)位置信息。
30、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)固件升級處理方法,所述生成新跳轉(zhuǎn)位置信息包括:
31、通過差分包中的控制數(shù)據(jù)計算出新舊固件的差異數(shù)據(jù)范圍的偏移差,通過偏移差和舊跳轉(zhuǎn)位置信息計算得到新跳轉(zhuǎn)位置信息。
32、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)固件升級處理方法,所述生成新固件包括:
33、遍歷新跳轉(zhuǎn)位置信息,在新轉(zhuǎn)換固件中匹配到對應的位置并取出新函數(shù)地址;
34、生成新轉(zhuǎn)換固件中跳轉(zhuǎn)指令的機器碼,并利用取出的新函數(shù)地址進行替換,得到新固件。
35、根據(jù)本公開另一個方面,提供了一種物聯(lián)網(wǎng)平臺,所述物聯(lián)網(wǎng)平臺配置有:
36、指令檢測模塊,用于分別對新固件文件以及舊固件文件進行跳轉(zhuǎn)指令識別;
37、重點函數(shù)映射表生成模塊,用于利用舊固件的跳轉(zhuǎn)指令識別結果以及預設的函數(shù)映射表,生成重點函數(shù)映射表;
38、新舊轉(zhuǎn)換固件生成模塊,用于將重點函數(shù)映射表分別與新固件及舊固件的跳轉(zhuǎn)指令識別結果進行結合,得到對應的新轉(zhuǎn)換固件以及舊轉(zhuǎn)換固件;
39、差分包制作模塊,用于利用新轉(zhuǎn)換固件以及舊轉(zhuǎn)換固件,制作差分包;
40、升級補丁打包模塊,用于將差分包與重點函數(shù)映射表一并打包得到固件升級補丁。
41、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)平臺,所述重點函數(shù)映射表生成模塊包括:
42、映射文件預建單元,用于構建新固件與舊固件各自的映射文件,所述映射文件包括函數(shù)名和對應的函數(shù)地址;
43、函數(shù)映射表構建單元,用于按照函數(shù)名合并新固件與舊固件各自的映射文件,得到所述函數(shù)映射表;
44、跳轉(zhuǎn)指令查找及統(tǒng)計單元,用于在所述函數(shù)映射表中查找舊固件的跳轉(zhuǎn)指令的函數(shù)地址,并統(tǒng)計使用次數(shù);
45、重點函數(shù)映射表構建單元,用于基于使用次數(shù)進行跳轉(zhuǎn)指令篩選,并以篩選出的跳轉(zhuǎn)指令構建所述重點函數(shù)映射表。
46、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)平臺,所述新舊轉(zhuǎn)換固件生成模塊包括:
47、函數(shù)地址遍歷單元,用于分別遍歷新固件及舊固件各自跳轉(zhuǎn)指令的函數(shù)地址;
48、新舊轉(zhuǎn)換固件生成單元,用于在識別到重點函數(shù)映射表內(nèi)存在匹配的舊函數(shù)地址后,使用重點函數(shù)映射表中與該舊函數(shù)地址對應的新函數(shù)地址替換固件中對應的跳轉(zhuǎn)指令的原機器碼,分別得到與舊固件對應的舊轉(zhuǎn)換固件以及與新固件對應的新轉(zhuǎn)換固件。
49、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)平臺,所述差分包制作模塊包括:
50、初級差分包制作單元,用于對新轉(zhuǎn)換固件以及舊轉(zhuǎn)換固件進行差分處理,得到初級差分包,所述初級差分包至少包含控制數(shù)據(jù)、擴展數(shù)據(jù);
51、差分包重構單元,用于從初級差分包的控制數(shù)據(jù)中遍歷擴展數(shù)據(jù)的地址信息,重新從新固件文件中取出每一段地址范圍的數(shù)據(jù)重建擴展數(shù)據(jù),得到最終的差分包。
52、根據(jù)本公開另一個方面,提供了一種物聯(lián)網(wǎng)設備,所述物聯(lián)網(wǎng)設備配置有:
53、升級補丁解析模塊,用于對固件升級補丁進行解析,得到差分包中的數(shù)據(jù)以及重點函數(shù)映射表;
54、舊轉(zhuǎn)換固件和舊跳轉(zhuǎn)位置生成模塊,用于對原固件文件進行跳轉(zhuǎn)指令識別,并與重點函數(shù)映射表結合,生成還原階段的舊轉(zhuǎn)換固件和舊跳轉(zhuǎn)位置信息;
55、新跳轉(zhuǎn)位置生成模塊,用于利用從差分包解析出的數(shù)據(jù)以及舊跳轉(zhuǎn)位置信息,生成新跳轉(zhuǎn)位置信息;
56、新轉(zhuǎn)換固件生成模塊,用于利用從差分包解析出的數(shù)據(jù)以及還原階段的舊轉(zhuǎn)換固件,生成新轉(zhuǎn)換固件;
57、新固件生成模塊,用于利用新跳轉(zhuǎn)位置信息以及新轉(zhuǎn)換固件生成新固件。
58、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)設備,所述舊轉(zhuǎn)換固件和舊跳轉(zhuǎn)位置生成模塊包括:
59、指令識別解析單元,用于對原固件進行跳轉(zhuǎn)指令識別并解析函數(shù)地址;
60、地址匹配單元,用于從重點函數(shù)映射表中查找新地址;
61、舊轉(zhuǎn)換固件生成單元,用于若匹配到解析出的函數(shù)地址,則將原跳轉(zhuǎn)指令的機器碼替換為新地址,生成舊轉(zhuǎn)換固件;
62、舊跳轉(zhuǎn)位置記錄單元,用于將所有替換過的跳轉(zhuǎn)指令位置進行記錄,作為舊跳轉(zhuǎn)位置信息。
63、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)設備,所述新跳轉(zhuǎn)位置生成模塊被配置為:通過差分包中的控制數(shù)據(jù)計算出新舊固件的差異數(shù)據(jù)范圍的偏移差,通過偏移差和舊跳轉(zhuǎn)位置信息計算得到新跳轉(zhuǎn)位置信息。
64、此外,根據(jù)本公開一個方面的物聯(lián)網(wǎng)設備,所述新固件生成模塊包括:
65、新地址提取單元,用于遍歷新跳轉(zhuǎn)位置信息,在新轉(zhuǎn)換固件中匹配到對應的位置并取出新函數(shù)地址;
66、新固件生成單元,用于生成新轉(zhuǎn)換固件中跳轉(zhuǎn)指令的機器碼,并利用取出的新函數(shù)地址進行替換,得到新固件。
67、根據(jù)本公開又一個方面,提供了一種非瞬時性計算機可讀存儲介質(zhì),用于存儲計算機可讀指令,當計算機可讀指令由處理器執(zhí)行時,使得處理器執(zhí)行如上任一種所述的物聯(lián)網(wǎng)固件升級處理方法。
68、如以下將詳細描述的,根據(jù)本公開實施例的物聯(lián)網(wǎng)固件升級處理方法及其裝置,主要構思在于,站位于物聯(lián)網(wǎng)設備特性角度,分別從升級補丁包的生成及對該補丁包的還原兩方面入手,通過在新老固件中遍歷檢索跳轉(zhuǎn)指令并結合預設的函數(shù)映射表實現(xiàn)新舊轉(zhuǎn)換固件的生成,由此制作包含更多相似數(shù)據(jù)塊的差分包并與映射表打包為待使用的升級補??;此外,在還原時通過對舊固件跳轉(zhuǎn)指令的識別,再與上述補丁解析結果進行融合,生成舊轉(zhuǎn)換固件及舊跳轉(zhuǎn)位置,然后結合新舊固件的差異數(shù)據(jù)范圍及差分包中的數(shù)據(jù)生成新跳轉(zhuǎn)位置及新轉(zhuǎn)換固件,最后由二者生成新固件??梢岳斫獾兀竟_方案的技術路線是對轉(zhuǎn)換固件進行差分,而不是對反匯編文件進行差分,無論是補丁包制作還是補丁解析還原,均不涉及直接進行反匯編和匯編操作,此方式的主要優(yōu)勢在于差分包不用打包op信息,還原階段也無需將op信息持久化到flash,從而達到減少flash空間占用并且提升升級處理效率的目的。
69、本公開方案既適用于二進制固件,也適配基于操作系統(tǒng)的可執(zhí)行文件,并且一方面由于物聯(lián)網(wǎng)設備的flash空間受限較大,因此本公開對于縮減差分包的升級方案則具有更為針對的優(yōu)勢,另一方面本公開方案能夠顯著減少升級過程時間,所以無論是在小資源嵌入式設備上或是大資源設備上,均可以加以應用、改進,從而提升升級處理的效率。
70、要理解的是,前面的一般描述和下面的詳細描述兩者都是示例性的,并且意圖在于提供要求保護的技術的進一步說明。