1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      基于Bootloader的可靠嵌入式軟件遠程更新機制

      更新時間: 2008-02-15 09:02:28來源: 粵嵌教育瀏覽量:629

           嵌入式軟件的遠程自動更新技術能夠顯著的降低嵌入式系統的維護成本,而更新過程的可靠性直接影響著遠程更新的質量。

        本文針對基于bootloader的嵌入式系統,提出了一種高可靠的嵌入式軟件遠程自動更新機制,并以采用ARM微處理器、嵌入式Linux操作系統和無線網絡接口的嵌入式平臺為例給出了更新機制的軟硬件實現方案。在實際系統中對更新機制的性能進行了測試。測試結果表明,本更新機制具有良好的抗干擾能力,能有效地提高嵌入式軟件遠程更新的可靠性。


        隨著嵌入式系統在各個領域的廣泛應用,嵌入式軟件的維護變得日益重要[1]。嵌入式系統投入實際環境中運行后,一部分在軟件開發過程中無法充分測試的錯誤便會暴露出來;在嵌入式系統的運行期內,用戶也往往會對嵌入式軟件提出新的功能要求和性能要求。因此,嵌入式軟件的更新逐漸成為嵌入式系統實際應用的一個重要問題。當嵌入式系統安裝數量較多,或安裝位置不方便的情況下,采用人工更新方式會花費較大的人力和物力。

        遠程自動更新則在嵌入式系統中設計一個有線或無線的通信接口,在異地采用遠程通信的方式實現嵌入式軟件的自動更新。該方式能有效地降低嵌入式軟件的更新和維護成本,因此受到了廣泛的關注。當前對嵌入式軟件遠程自更新技術的研究主要停留在更新方法的設計上,對如何確保更新過程的可靠性還沒有深入的研究。更新的可靠性主要受兩個方面的影響:一是更新數據遠程傳輸的可靠性;另一方面是系統更新后啟動的可靠性。在采用嵌入式Linux、Windows CE等較為復雜的操作系統時,一般設計一個獨立的bootloader程序[2][3],對系統進行初始化并引導嵌入式操作系統。這種結構的嵌入式系統的啟動與bootloader緊密相關。

        本文針對采用bootloader的嵌入式系統,提出了一種高可靠的嵌入式軟件遠程自動更新機制,并以基于ARM微處理器[4]、嵌入式Linux操作系統[5]和無線通信接口的嵌入式系統為例進行了軟硬件設計。然后將更新機制應用到實際系統中進行測試,給出了本文的結論。

      2 更新系統的總體結構

        本部分以ARM和嵌入式Linux操作系統為例,介紹遠程自更新系統的整體結構。支持遠程自更新的嵌入式系統可以劃分為前端運行模塊和后臺控制模塊兩部分。前端運行模塊采用基于ARM9核心的S3C2410微處理器,主頻可達200Mhz,配有8M的RAM和32M的FLASH存儲器,運行ARM-Linux嵌入式操作系統,具有獨立設計的bootloader程序。后臺控制模塊用于實現對前端運行模塊的遠程異地控制,是系統的控制核心。前端運行模塊通過無線模塊BCM860接入到CDMA2000-1X無線通信系統,繼而連接到Internet。CDMA2000-1X是第2.5代移動通信系統,支持較高速率的數據分組業務。后臺控制模塊采用有線方式直接與Internet相連接,與前臺運行模塊之間進行標準的基于TCP/IP協議的通信。狀態信息、控制信息和更新文件都在這一數據鏈路上進行傳輸。
                   



                                圖1 自更新系統的總體結構

      3 更新系統的軟件設計

      3.1 Flash存儲器的布局

        傳統的采用Linux的嵌入式系統的FLASH存儲器的布局如圖2(a)所示。為了敘述方便,我們將Linux內核和文件系統合并稱為Linux鏡像文件。系統進行軟件更新時,先把新鏡像文件下載到內存中,然后燒寫到FLASH的鏡像文件存儲區,覆蓋舊的鏡像文件。該方法沒有考慮更新過程中可能遇到的干擾。如果在更新中因為突發的干擾出現更新數據錯誤或燒寫錯誤,就可能導致軟件更新后bootloader無法啟動新的鏡像文件,前端模塊無法運行,并失去了與后臺控制中心的聯系,成為“孤立系統”。這種情況發生后只能到前端系統的安裝地點進行人工處理,從而導致花費較大的代價。
                           


                         圖2 (a) 傳統的FLASH布局 (b) 自更新系統的FLASH布局

        為了提高軟件更新的可靠性,本機制對FLASH存儲器的布局進行了重新設計,如圖2(b)所示。Bootloader存儲區后面設計了3個鏡像文件存儲區。其中一個存儲區用于存放當前要啟動的的鏡像文件,稱為當前區;另一個存儲區用于存放上一版本的鏡像文件,稱為前版本區;剩下一個存儲區用于存放初版本的鏡像文件,稱為初版本區。當前區和前版本區位于前兩個存儲區,隨著軟件的更新而動態交替變化。每次進行軟件更新,把新的鏡像文件寫入前版本區,這樣當前區就變成了前版本區,前版本區則變成了當前區。初版本區固定在第三個分區,所存放的鏡像文件是嵌入式系統投入運行時的初程序,每次的軟件更新都不更改該存儲區的內容。此外,在FLASH的高地址處設計一個參數存儲區,用于存放需要固化的系統配置參數。更新程序需要用到啟動點和更新位兩個配置參數。啟動點用來指示bootloader需要從哪個存儲區加載鏡像文件,更新位用來指示系統進行軟件更新的狀態。

      3.2 更新任務的設計

        在嵌入式Linux系統中,將更新該任務設計成一個阻塞在更新信號量上的進程。系統每次啟動后,更新進程首先向后臺控制模塊報告當前的軟件版本號,隨后檢查FLASH上的更新位,然后進入阻塞狀態。當系統收到控制模塊發來的更新指令后,釋放更新信號量,更新進程開始進行軟件更新。更新進程采用TCP協議接收控制模塊發來的新程序鏡像文件。

        考慮到無線數據傳輸的特點,為了增強傳輸可靠性,在應用層設計一套具有校驗、確認和重傳功能的收發協議,以保證新鏡像文件的數據能夠準確無誤的通過Internet和移動通信系統傳輸到前端模塊的內存中。當新鏡像文件下載完畢后,更新進程先判斷前版本區在FLASH上的位置,然后調用FLASH的讀寫函數將新鏡像文件寫入前版本存儲區中。寫完后將更新位置1,并更改啟動點。如果當前運行的程序版本為初版本,則將新鏡像文件同時寫入前兩個存儲區。更新進程的程序流程如圖3所示。
                   


                                 圖3 更新進程流程圖
                    


                                   圖4 異常處理流程圖

      3.3 更新后的啟動流程

        前端運行模塊具有獨立的bootloader,并固化在FLASH存儲器的低地址處,系統啟動后總是能夠進入bootloader。Bootloader通過讀取參數存儲區的啟動點參數來引導3個程序存儲區的某一個鏡像文件。在正常情況下,啟動點參數總是指向當前區。當軟件更新后,啟動點也隨之在存儲區1和存儲區2之間交替切換,指向新鏡像文件的存儲區。這樣,當更新進程重新啟動前端模塊后,bootloader便會引導新的鏡像文件。

        為了增強軟件更新后系統啟動的可靠性,本機制利用ARM體系的異常來處理啟動時的出錯情況。在ARM體系結構中有7種異常,與啟動過程密切相關的異常有未定義指令、指令預取中止和數據訪問中止3種。通過設計異常處理程序來加載備份存儲區的鏡像文件。當bootloader引導新鏡像文件失敗后,進入異常處理函數,在此函數中將啟動點更改為指向前版本區,并把更新位置為2,表示已經更改過兩次啟動點。重啟系統后bootloader便會恢復引導上一版本的程序鏡像文件。由于軟件更新時只是在相鄰的存儲區寫入了新鏡像文件,并未對上一版本程序的存儲區進行任何操作,而且上一版本程序是更新前已經正常啟動運行過的程序,所以一般情況下上一版本程序應該能夠正常引導成功。如果由于意外干擾導致上一版本程序仍然無法啟動成功,此時將再次進入異常處理程函數。

        在函數中先讀取更新位的值,如果更新位為2則將啟動點指向初版本區,并把更新位置為3。重啟系統后bootloader便會引導初版本的程序鏡像文件。初版本的鏡像文件在前端模塊安裝后從未更改過,并在安裝前進行過驗證測試,具有非常高的可靠性。當新版本程序和上一版本程序都無法啟動成功時,系統嘗試啟動初版本的鏡像文件,以保證系統基本功能的正常運行,并確保前端模塊與后臺控制模塊之間不會失去聯系。后臺控制模塊根據前端模塊啟動后報告的版本號來獲知軟件更新的信息并采取相應的措施。在異常處理函數中讀取啟動點值的時候,如果讀取值異常或讀取出錯,則對啟動點進行修復,異常處理函數的流程如圖4所示。通過利用啟動點、更新位和異常處理程序,當軟件更新過程中遇到了干擾和錯誤時,本機制能夠依次選擇啟動兩個備份的軟件版本,有效地提高了軟件更新的可靠性,防止了“孤立系統”的出現。

      4 測試結果

        在一個實際運行的無線遠程監控系統中應用本更新機制,以驗證和測試其性能。首先對更新進程的運行效果進行測試。結果表明,每次測試更新進程均能正確的啟動與控制模塊之間的數據傳輸,通過在應用層引入確認和重傳機制,新程序的鏡像文件均能通過Internet和無線網絡準確的傳輸至前端運行模塊。測試的重點是系統軟件更新完畢后新程序啟動的可靠性。對軟件更新過程中遇到的干擾和數據錯誤采取模擬的方式,以此測試bootloader能否正確的啟動備份程序。測試中模擬了3類情況:一類是FLASH上的程序鏡像文件隨機的在某些地址處出現數據錯誤,另一類是FLASH上的程序鏡像文件隨機的出現某些數據的地址錯位,第三類是啟動點的數值發生錯誤。將這3類情況分為6種具體方案進行測試,每個方案測試20次,查看系統能否按照期望的結果啟動程序鏡像。測試方案及結果如表1所示。

                               表1 啟動可靠性測試結果

       

      編號

      測試方案

      期望啟動

      次數

      實測結果

      成功率

      1

      當前區隨機數據錯誤,前版本區數據正確

      上一版本

      20

      均能正常啟動

      2

      當前區和前版本區均隨機的出現數據錯誤

      初版本

      20

      均能正常啟動

      3

      當前區隨機數據地址錯位,前版本區正確

      上一版本

      20

      19次正常啟動

      95%

      4

      當前區和前版本區均出現數據地址錯位

      初版本

      20

      16次正常啟動,

      80%

      5

      當前區數據地址錯位,前版本區數據錯誤

      初版本

      20

      17次正常啟動

      85%

      6

      配置區的啟動點參數值為非法值

      新版本

      20

      均能正常啟動



        從測試結果中可以看出,本更新機制對FLASH中的數據錯誤識別效果,每次啟動時均能正確地進入異常并啟動備份程序;對FLASH中的數據地址錯位的識別率也達到了80%以上。當程序的數據正確但存放地址錯位時,存在一定的概率會使得ARM處理器取出的指令是可以識別和執行的,從而使程序運行到未知狀態而導致系統無法啟動。此外,更新機制對配置區具有較強的修復能力,防止了因為配置區數據出現錯誤而導致無法啟動的情況的發生。實驗平臺的測試結果表明本更新機制能有效地提高嵌入式軟件更新后重新啟動的穩定性和可靠性,具有較強的自我恢復能力。

      5 結語

        本文以提高可靠性為設計目標,提出了一種基于bootloader的嵌入式軟件遠程自動更新機制。本更新機制由于同時保存了三個鏡像文件,因此需要更多的FLASH存儲空間,略微增加了嵌入式系統的硬件成本。但相對于更新機制的遠程化、自動化和可靠性所帶來的維護成本的巨大降低,這個代價是值得的。

        本文主要創新點:通過設置兩個備份程序存儲區,利用嵌入式處理器的異常機制,使嵌入式系統的更新具有了較強的自我恢復能力,較大的提升嵌入式軟件更新過程的可靠性,尤其能夠有效地防止嵌入式系統更新后出現的系統啟動失敗的情況,具有較高的實用價值。另外,通過CDMA系統實現遠程自動更新,可以擺脫地域限制,不受布線的束縛,提高了嵌入式系統遠程更新的便捷性。

      參考文獻

      [1] Shehabuddeen N, Hunt F, Probert D. Insights into embedded software sourcing decisions: practical concerns and business perspectives[A]. IEMC, 2002 IEEE International[C]. Volume 1, 2002. P328-333

      [2] 單承剛等. 基于ARM的嵌入式BootLoader設計與啟動過程. 微計算機信息[J]. 2006, 11-2: 139-142

      [3] 楊著, 郝丹. 嵌入式系統中BSP的作用及其相關聯環節的分析[J]. 通信學報. 2004.12

      [4] ARM Corp. ARM920T Technical Reference Manual[M]. www.arm.com

      [5] Karim Yaghmour. Building Embedded Linux Systems[M]. O'Reilly & Associates, U.S. 2003.4



      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 中文有码亚州AV | 亚洲午夜精品久久久久 | 最新精品国偷自产在线美女足 | 日韩精品一区二区亚洲AV观看 | 天啪天天久久久久久久久噜噜 | 欧美啊v手机在线观看 |