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