嵌入式設備的系統及嵌入式設備遠程升級的方法
【技術領域】
[0001]本發(fā)明涉及網絡通信技術領域,尤其涉及一種嵌入式設備的系統及嵌入式設備遠程升級的方法。
【背景技術】
[0002]嵌入式設備廣泛應用于各行各業(yè),嵌入式設備主要是用于解決行業(yè)的特定問題,因此嵌入式設備的硬件與軟件需要高度定制。通常,嵌入式設備的軟件由u-boot(全稱Universal Boot Loader)、普通Linux內核、根文件系統以及應用程序構成,在嵌入式設備的生命周期中,普通Linux內核、根文件系統以及應用程序經常需要更新升級以便適應新的需求或者解決自身存在的漏洞(bug),而u-boot—般不會更新升級。在嵌入式設備異常時,通常采用升級的方式為應用系統提供升級程序來更新普通Linux內核、根文件系統以及應用系統本身,這種升級方式存在一個問題,即當應用系統出現異常時,則無法通過這種方式升級,只能在u-boot中進行升級,此時升級可以通過串口或者網口,但是必須進行現場升級,無法遠程升級,因為u-boot本質是一個簡單的無0S特征(井發(fā)性、共享性、虛擬性和異步性)的裸機程序,不具有強大的網絡功能,因此無法通過網絡遠程進行升級,對于運行在山頂、沙漠等自然環(huán)境不好的嵌入式設備來說,去現場升級尤為不方便。雖然,在普通u-boot上進行大量代碼開發(fā),可以實現遠程升級,但需要開發(fā)維護兩套升級應用程序,一套在u-boot中使用,一套在應用系統中使用,開發(fā)成本高,應用系統中的升級應用程序與u-boot中的升級程序嚴重不統一后續(xù)代碼維護麻煩。
【發(fā)明內容】
[0003]針對現有的嵌入式設備出現異常后無法遠程升級的上述問題,現提供一種旨在實現嵌入式設備出現異常時可遠程升級,成本低,方便維護的嵌入式設備的系統及嵌入式設備遠程升級的方法。
[0004]具體技術方案如下:
[0005]一種嵌入式設備的系統,包括:
[0006]—第一啟動單元,用以正常啟動程序,并控制應用程序運行;
[0007]—第二啟動單元,用以遠程獲取所述第一啟動單元最新軟件版本的鏡像,并將所述第一啟動單元最新軟件版本的鏡像寫入所述第一啟動單元,以形成新的正常啟動程序;
[0008]—標記單元,分別連接所述第一啟動單元和所述第二啟動單元,對當前運行的啟動單元進行標記,并生成下次重啟的啟動單元的標記;
[0009]—存儲單元,連接所述標記單元,用以存儲當前啟動單元的標記,及下次重啟的啟動單元的標記;
[0010]—選擇單元,分別連接所述存儲單元、所述第一啟動單元和所述第二啟動單元,用以根據所述存儲單元中存儲的標記,選擇所述第一啟動單元或所述第二啟動單元運行。
[0011]優(yōu)選的,所述第二啟動單元包括一遠程接收模塊,所述遠程接收模塊用以遠程接收所述第一啟動單元最新軟件版本的鏡像。
[0012]優(yōu)選的,所述遠程接收模塊采用tftp控制模塊。
[0013]優(yōu)選的,所述標記單元包括:
[0014]—標記模塊,用以對當前運行的所述第一啟動單元或所述第二啟動單元進行標記;
[0015]—監(jiān)測模塊,用以監(jiān)測當前運行的所述第一啟動單元是否正常啟動程序,并輸出監(jiān)測結果;
[0016]—處理模塊,分別連接所述標記模塊和所述監(jiān)測模塊,用以根據當前運行的所述第一啟動單元或所述第二啟動單元的標記、所述監(jiān)測結果及預設規(guī)則,生成下次重啟的啟動單元的標記。
[0017]優(yōu)選的,所述預設規(guī)則為:
[0018]若當前運行的啟動單元為所述第二啟動單元,則標記下次重啟的所述啟動單元為所述第一啟動單元。
[0019]優(yōu)選的,所述預設規(guī)則為:
[0020]當所述監(jiān)測結果為當前運行的所述第一啟動單元,且所述第一啟動單元為異常啟動程序,則標記下次重啟的所述啟動單元為所述第二啟動單元。
[0021]優(yōu)選的,所述存儲單元采用Flash存儲器。
[0022]優(yōu)選的,還包括:
[0023]—接收單元,連接所述選擇單元,用以接收升級指令;
[0024]—重啟單元,連接所述接收單元,重新啟動所述嵌入式設備的系統;
[0025]重新啟動所述嵌入式設備的系統后,所述選擇單元選擇所述第二啟動單元運行。
[0026]一種嵌入式設備遠程升級的方法,應用如上述的嵌入式設備的系統,包括下述步驟:
[0027]S1.根據所述存儲單元中存儲的標記,選擇所述第一啟動單元或所述第二啟動單元運行,若選擇所述第一啟動單元運行,執(zhí)行步驟S2 ;若選擇所述第二啟動單元運行,執(zhí)行步驟S4 ;
[0028]S2.正常啟動程序,并控制應用程序運行;
[0029]S3.對當前運行的啟動單元進行標記,并生成下次重啟的啟動單元的標記,并存儲于所述存儲單元中,結束;
[0030]S4.遠程獲取所述第一啟動單元最新軟件版本的鏡像,并將所述第一啟動單元最新軟件版本的鏡像寫入所述第一啟動單元,以形成新的正常啟動程序,返回執(zhí)行所述步驟S3 ο
[0031]優(yōu)選的,在所述步驟S3中,若當前運行的啟動單元為所述第一啟動單元時,對當前運行的啟動單元進行標記,并監(jiān)測當前運行的所述第一啟動單元是否正常啟動程序,若否,則標記下次重啟的所述啟動單元為所述第二啟動單元。
[0032]優(yōu)選的,在所述步驟S3中,若當前運行的啟動單元為所述第二啟動單元時,對當前運行的啟動單元進行標記,并標記下次重啟的所述啟動單元為所述第一啟動單元。
[0033]優(yōu)選的,在所述步驟S2中,還包括:
[0034]S21.正常啟動程序,并控制應用程序運行;
[0035]S22.判斷是否接收到升級指令,若是,執(zhí)行步驟S23 ;若否,執(zhí)行所述步驟S3 ;
[0036]S23.標記下次重啟的所述啟動單元為所述第二啟動單元,重新啟動所述嵌入式設備的系統,返回執(zhí)行所述步驟S1。
[0037]上述技術方案的有益效果:
[0038]1)嵌入式設備的系統采用第二啟動單元可在系統異常時進行遠程升級,以在升級完成后正常啟動升級后的第一啟動單元控制應用程序的運行,方便維護,且成本低;
[0039]2)嵌入式設備遠程升級的方法可根據存儲單元存儲的標記啟動相應的啟動單元,從而實現在系統發(fā)生異常第一啟動單元無法自行升級時,選擇第二啟動程序進行遠程升級,以保證系統可以正常運行,且方便維護。
【附圖說明】
[0040]圖1為本發(fā)明所述的嵌入式設備的系統的一種實施例的模塊圖;
[0041]圖2為本發(fā)明所述的嵌入式設備遠程升級的方法的一種實施例的方法流程圖。
【具體實施方式】
[0042]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0043]需要說明的是,在不沖突的情況下,本發(fā)明中的實施例及實施例中的特征可以相互組合。
[0044]下面結合附圖和具體實施例對本發(fā)明作進一步說明,但不作為本發(fā)明的限定。
[0045]如圖1所示,一種嵌入式設備的系統,包括:
[0046]—第一啟動單元4,用以正常啟動程序,并控制應用程序運行;
[0047]—第二啟動單元5,用以遠程獲取第一啟動單元4最新軟件版本的鏡像,并將第一啟動單元4最新軟件版本的鏡像寫入第一啟動單元4,以形成新的正常啟動程序;
[0048]—標記單元7,分別連接第一啟動單元4和第二啟動單元5,對當前運行的啟動單元進行標記,并生成下次重啟的啟動單元的標記;
[0049]—存儲單元6,連接標記單元7,用以存儲當前啟動單元的標記,及下次重啟的啟動單元的標記;
[0050]—選擇單元1,分別連接存儲單元6、第一啟動單元4和第二啟動單元5,用以根據存儲單元6中存儲的標記,選擇第一啟動單元4或第二啟動單元5運行。
[0051]在本實施例中,采用第二啟動單元5可在系統異常時進行遠程升級,以在升級完成后正常啟動升級后的第一啟動單元4控制應用程序的運行,方便維護,且成本低。其中系統異常包括系統運行出現的異常,以及第一啟動單元4升級時出現的異常。
[0052]在優(yōu)選的實施例中,第二啟動單元5包括一遠程接收模塊,遠程接收模塊用以遠程接收第一啟動單元最新軟件版本的鏡像。
[0053]進一步地,遠程接收模塊采用tftp控制模塊。
[0054]在本實施例中,存儲單元6采用Flash存儲器;第二啟動單元5包括一升級Linux內核;第一啟動單元4包括一普通的普通Linux內核,定制u-boot通過選擇單元1選擇相應的啟動單元運行,當選擇單元1選擇第二啟動單元5時,可通過第二啟動單元5進行遠程升級,并在升級完成后重啟;當選擇單元1選擇第一啟動單元4時,可正常啟動程序。
[0055]普通Linux內核和升級Linux內核都是基于芯片廠商提供的Linux裁剪而來,為了最小化,升級Linux只保留Linux的基本網絡驅動與網絡協議棧、Flash驅動及文件系統、以及升級應用程序。同時,為了升級Linux的正常運行,第二啟動單元5還增加了一個最小的根文件系統。運行中升級Linux內核和普通Linux內核的升級程序代碼完全一樣。由于升級Linux內核具有強大的網絡功能,因此tftp控制模塊采用tftp命令進行Linux系統的升級。
[0056]定制u-boot在完成芯片以及外設的基本初始化(如cpu、ddr、串口、網口等)以后,不加裝運行廠商提供的基于U-boot的應用程序(如串口應用、網口應用、命令行應用等),而是通過相關接口獲取標記確定需要加裝的內核即普通Linux內核或升級Linux內核。定制u-boot應用只保留從Flash存儲器加裝內核的應用,移除其他應用(如串口應用、網口應用、命令行應用等)。通過選擇單元1確定了待加裝內核的內核后,定制u-boot通過定制的從Flash加裝內核的應用加裝并運行內核。
[0057]在優(yōu)選的實施例中,標記單元7包括:
[0058]—標記模塊71,用以對當前運行的第一啟動單元4或第二啟動單元5進行標記;
[0059]—監(jiān)測模塊72,用以監(jiān)測當前運行的第一啟動單元4是否正常啟動程序,并輸出監(jiān)測結果;
[0060]一處理模塊73,分別連接標記模塊71和監(jiān)測模塊72,用以根據當前運行的第一啟動單元4或第二啟動單元5的標記、監(jiān)測結果及預設規(guī)則,生成下次重啟的啟動單元的標記。
[0061]在本實施例中,采用監(jiān)測模塊