嵌入式系統(tǒng)自更新機制的設(shè)計與應(yīng)用
2.3 更新后的啟動流程
通過以上更新流程,系統(tǒng)完成了一次軟件版本的升級。重新部署Flash后,客戶端具有相對獨立的bootloader,并固化在Flash的低地址處,能夠保證系統(tǒng)啟動后總是先進(jìn)入bootloader。bootloader通過讀取對比標(biāo)識存儲區(qū)的啟動地址參數(shù)來跳轉(zhuǎn)執(zhí)行代碼。在正常情況下,啟動地址總是指向RTOS。當(dāng)更新完成重新啟動客戶端后,bootloader便會引導(dǎo)新的鏡像文件。
為了確保軟件更新后系統(tǒng)啟動的穩(wěn)定性,通過設(shè)計異常處理程序來加載代碼備份存儲區(qū)的文件防止系統(tǒng)癱瘓。當(dāng)bootloader引導(dǎo)更新后的鏡像文件失敗后,系統(tǒng)進(jìn)入異常處理函數(shù),在此函數(shù)中將啟動地址指向代碼備份區(qū),并設(shè)置標(biāo)識位。代碼備份區(qū)保存的是設(shè)備出廠時最初版本的image文件,具有非常高的穩(wěn)定性,這樣就保證系統(tǒng)功能正常運行,并確保服務(wù)器端與客戶端正常通信。異常處理流程如圖4所示。
當(dāng)軟件更新過程中遇到致命異常時,通過異常處理程序,系統(tǒng)能夠重新啟動備份的軟件版本,有效地提高了嵌入式系統(tǒng)自更新機制的安全性,避免了系統(tǒng)徹底崩潰。
3 測 試
為了評估自更新機制的穩(wěn)定性和安全性,確保其適用于真實設(shè)備與網(wǎng)絡(luò),測試應(yīng)盡可能覆蓋現(xiàn)實情況中可能遇到的情況。用戶能看到的升級性能主要有更新包下載時間和自更新時間。設(shè)備廠商關(guān)注的是高穩(wěn)定性和安全性,以及更新包所占Flash的比例。測試中應(yīng)考慮到各種版本,制作測試矩陣,然后按順序測試,包括回退更新。
在一個實際運行的移動設(shè)備中驗證和測試更新機制的性能。首先測試更新進(jìn)程的通信狀況。結(jié)果表明,每次均能正確地與服務(wù)器端建立會話,并進(jìn)行數(shù)據(jù)傳輸;更新包均能通過無線網(wǎng)絡(luò)準(zhǔn)確下載并存儲至客戶端。測試的重點是系統(tǒng)更新結(jié)束后新程序啟動的穩(wěn)定性和安全性。對軟件更新過程進(jìn)行干擾,以測試bootloader能否正確啟動。測試中模擬了兩大類情況:一類是更新包隨機挑選版本的相互升級,另一類是人為設(shè)置導(dǎo)致更新包出現(xiàn)不能啟動錯誤的數(shù)據(jù),然后進(jìn)行升級。設(shè)計三種具體方案進(jìn)行測試,每個方案測試30次,查看系統(tǒng)能否按預(yù)期結(jié)果啟動程序。測試方案及結(jié)果如表1所列。
從測試結(jié)果看出,系統(tǒng)更新后,每次均能正確啟動程序;此外,更新機制對代碼區(qū)具有較強的修復(fù)能力,防止了由于數(shù)據(jù)異常而導(dǎo)致的無法啟動。本更新機制能有效地提高嵌入式軟件更新后重新啟動的穩(wěn)定性和可靠性。
結(jié) 語
本文提出了一種具有較高穩(wěn)定性和安全性、基于bootloader的嵌入式軟件自動更新機制。該更新機制同時保存了3個文件,需要較多的Flash存儲空間,但同時降低了維護(hù)成本。其創(chuàng)新點在于設(shè)置1個標(biāo)識區(qū)、3個程序存儲區(qū)并設(shè)計了異常機制,提高了嵌入式系統(tǒng)更新過程的穩(wěn)定性,尤其能夠有效地防止軟件更新后系統(tǒng)啟動失敗的情況,具有較高的實用價值。
評論