專利名稱:一種嵌入式系統(tǒng)升級(jí)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式系統(tǒng)技術(shù)領(lǐng)域,特別是指一種嵌入式系統(tǒng)升級(jí)的方法。
背景技術(shù):
在嵌入式系統(tǒng)中,由系統(tǒng)的運(yùn)行環(huán)境和產(chǎn)品的功能等特點(diǎn)決定了嵌入式系統(tǒng)的非開放式的運(yùn)行模式。在這種情況中,對(duì)嵌入式系統(tǒng)進(jìn)行自動(dòng)升級(jí)不但使產(chǎn)品延長(zhǎng)壽命,而且保護(hù)了使用者的投資,即在不增加新投入的情況下增加了產(chǎn)品的新功能或修補(bǔ)了現(xiàn)有產(chǎn)品存在的缺陷。所以,對(duì)于一個(gè)含有嵌入式系統(tǒng)的產(chǎn)品而言,設(shè)計(jì)良好且功能強(qiáng)大的升級(jí)方案能為該產(chǎn)品帶來較強(qiáng)的競(jìng)爭(zhēng)力。
現(xiàn)有嵌入式系統(tǒng)的升級(jí)方案通常為將升級(jí)文件做成鏡像文件,并將嵌入式系統(tǒng)中的非易失性存儲(chǔ)器上原有的數(shù)據(jù)全部擦除后,再將鏡像文件寫到非易失性存儲(chǔ)器上,以達(dá)到刷新升級(jí)的目的。
上述方案的缺陷在于對(duì)于以非易失性存儲(chǔ)器為永久存儲(chǔ)介質(zhì)的嵌入式系統(tǒng)而言,升級(jí)過程中一旦發(fā)生意外斷電等異常情況時(shí),系統(tǒng)將變得不可用,此時(shí)只能使用特殊的設(shè)備對(duì)該系統(tǒng)的非易失性存儲(chǔ)器進(jìn)行完整的刷新后,才能使該系統(tǒng)繼續(xù)使用。該方案即不安全又使升級(jí)失敗后重新恢復(fù)系統(tǒng)的工作變得費(fèi)時(shí)費(fèi)力,甚至在某些條件下根本無法實(shí)現(xiàn)系統(tǒng)的恢復(fù)。而且,上述升級(jí)方案必須對(duì)非易失性存儲(chǔ)器的全部進(jìn)行刷新升級(jí),而不能對(duì)非易失性存儲(chǔ)器中指定的某一個(gè)或幾個(gè)部分的數(shù)據(jù)進(jìn)行刷新升級(jí)操作,不便于管理。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種嵌入式系統(tǒng)升級(jí)的方法,即使系統(tǒng)在升級(jí)過程中意外中斷,也能很方便的再次啟動(dòng)該系統(tǒng)。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種嵌入式系統(tǒng)升級(jí)的方法,該方法包括以下步驟a、為嵌入式系統(tǒng)的非易失性存儲(chǔ)器上劃分邏輯區(qū)域,并指定一個(gè)區(qū)域用于保存升級(jí)操作前的待升級(jí)部分的數(shù)據(jù);b、當(dāng)該系統(tǒng)需要升級(jí)時(shí),下載所需的升級(jí)文件,并將非易失性存儲(chǔ)器上原有的待升級(jí)部分復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,應(yīng)用所下載的數(shù)據(jù)文件對(duì)該待升級(jí)部分進(jìn)行升級(jí)操作;c、該系統(tǒng)下一次啟動(dòng)時(shí),判斷上次升級(jí)過程是否正常結(jié)束,如果是,則正常啟動(dòng)該嵌入式系統(tǒng),否則將上次升級(jí)前復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域數(shù)據(jù)恢復(fù)到原來的位置后,啟動(dòng)該嵌入式系統(tǒng)。
較佳地,步驟a所述邏輯區(qū)域包括啟動(dòng)代碼區(qū)、操作系統(tǒng)區(qū)、文件系統(tǒng)區(qū)、用于保存升級(jí)操作前的待升級(jí)部分?jǐn)?shù)據(jù)的容錯(cuò)區(qū)和系統(tǒng)升級(jí)過程標(biāo)志區(qū)。
較佳地,所述系統(tǒng)升級(jí)過程標(biāo)志區(qū)中至少包括升級(jí)成功標(biāo)志、升級(jí)內(nèi)容標(biāo)志和升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù)。
較佳地,所述步驟b進(jìn)一步包括應(yīng)用所下載的數(shù)據(jù)文件對(duì)該待升級(jí)部分升級(jí)完畢后,再判斷非易失性存儲(chǔ)器邏輯區(qū)域中是否還有區(qū)域需要升級(jí),如果是,則重復(fù)執(zhí)行步驟b,否則,正常啟動(dòng)該嵌入式系統(tǒng)。
較佳地,所述步驟b進(jìn)一步包括嵌入式系統(tǒng)引導(dǎo)程序通過外部連接方式與升級(jí)服務(wù)器進(jìn)行連接,并根據(jù)從升級(jí)服務(wù)器下載的升級(jí)配置文件判斷該系統(tǒng)是否需要升級(jí)。
較佳地,所述外部連接方式包括網(wǎng)絡(luò)連接,串口連接、并口連接和USB連接。
較佳地,所述步驟b進(jìn)一步包括
將非易失性存儲(chǔ)器上原有的待升級(jí)部分復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為否;當(dāng)升級(jí)操作完畢后,再將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為成功;步驟c所述上次升級(jí)過程是否正常結(jié)束是根據(jù)系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志來判斷的。
較佳地,所述步驟c為如果上次升級(jí)過程是非正常結(jié)束,該系統(tǒng)再次與升級(jí)服務(wù)器進(jìn)行連接,并判斷是否連接成功,如果是,則執(zhí)行升級(jí)操作,否則,將上次升級(jí)前復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域數(shù)據(jù)恢復(fù)到原來的位置后,啟動(dòng)該嵌入式系統(tǒng)。
較佳地,所述步驟c進(jìn)一步包括將上次升級(jí)前復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域數(shù)據(jù)恢復(fù)到原來的位置后,重新執(zhí)行升級(jí)操作。
較佳地,所述步驟b進(jìn)一步包括將非易失性存儲(chǔ)器上原有的待升級(jí)部分復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,根據(jù)所復(fù)制數(shù)據(jù)的內(nèi)容以及大小設(shè)置系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志和升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù);所述步驟c是根據(jù)系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志,獲得上次升級(jí)非正常結(jié)束前最后進(jìn)行升級(jí)操作的對(duì)象,根據(jù)系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù),獲得上次升級(jí)非正常結(jié)束前最后進(jìn)行升級(jí)操作的數(shù)據(jù)長(zhǎng)度后,從非易失性存儲(chǔ)器的指定區(qū)域復(fù)制的相應(yīng)長(zhǎng)度的數(shù)據(jù)重新寫入到原來的位置。
較佳地,所述系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志為非易失性存儲(chǔ)器中不同待升級(jí)邏輯區(qū)域共用的一個(gè)標(biāo)志位,或不同待升級(jí)邏輯區(qū)域分別應(yīng)用不同的標(biāo)志位。
較佳地,所述非易失性存儲(chǔ)器上原有的待升級(jí)部分為待升級(jí)部分的全部數(shù)據(jù)或待升級(jí)部分的部分?jǐn)?shù)據(jù)。
應(yīng)用本發(fā)明,通過為非易失性存儲(chǔ)器劃分邏輯區(qū)域,并將非易失性存儲(chǔ)器上原有待升級(jí)的數(shù)據(jù)復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,再對(duì)該非易失性存儲(chǔ)器的某一部分進(jìn)行升級(jí)操作,使得即使系統(tǒng)在升級(jí)過程中出現(xiàn)意外中斷的情況,也能將非易失性存儲(chǔ)器指定區(qū)域的數(shù)據(jù)恢復(fù)到原來的相應(yīng)位置后,很方便的再次啟動(dòng)該系統(tǒng)。因此,本發(fā)明使得嵌入式系統(tǒng)在升級(jí)過程出現(xiàn)意外中斷的情況下,具有一定的自我修復(fù)能力,即能夠保證系統(tǒng)再次正常啟動(dòng)或自動(dòng)重新進(jìn)行升級(jí)。同時(shí),由于應(yīng)用本發(fā)明是對(duì)非易失性存儲(chǔ)器的部分區(qū)域進(jìn)行升級(jí),因此,實(shí)現(xiàn)了對(duì)升級(jí)過程的靈活管理。應(yīng)用本發(fā)明,不需要增加任何控制硬件,也不依賴于特定的操作系統(tǒng),對(duì)于要求系統(tǒng)高可用性且又存在對(duì)系統(tǒng)升級(jí)需求的應(yīng)用提供了一種低價(jià)可靠的解決方案。
圖1為應(yīng)用本發(fā)明的對(duì)非易失性存儲(chǔ)器進(jìn)行邏輯劃分后的示意圖;圖2為本發(fā)明升級(jí)方法一較佳實(shí)施例的流程圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。
本發(fā)明的思路是為嵌入式系統(tǒng)的非易失性存儲(chǔ)器上劃分邏輯區(qū)域,并指定一個(gè)區(qū)域用于保存升級(jí)操作前的待升級(jí)部分的數(shù)據(jù);當(dāng)該系統(tǒng)需要升級(jí)時(shí),下載所需的升級(jí)文件,并將待升級(jí)部分復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,應(yīng)用所下載的數(shù)據(jù)文件對(duì)該待升級(jí)部分進(jìn)行升級(jí)操作;該系統(tǒng)下一次啟動(dòng)時(shí),判斷上次升級(jí)過程是否正常結(jié)束,如果是,則正常啟動(dòng)該嵌入式系統(tǒng),如果系統(tǒng)在上次升級(jí)過程中發(fā)生意外斷電等情況而導(dǎo)致升級(jí)過程中斷,則將上次升級(jí)前復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域數(shù)據(jù)恢復(fù)到原來的位置后,啟動(dòng)該嵌入式系統(tǒng)。這樣,保證嵌入式系統(tǒng)總是可用。
圖1所示為應(yīng)用本發(fā)明的對(duì)非易失性存儲(chǔ)器進(jìn)行邏輯劃分后的示意圖。由于通常情況下,系統(tǒng)的非易失性存儲(chǔ)器不會(huì)全部被占用,總會(huì)留有一些剩余空間,因此,將余下的空間用于容錯(cuò)區(qū)和系統(tǒng)升級(jí)過程標(biāo)志區(qū)。這樣,將系統(tǒng)的非易失性存儲(chǔ)器在邏輯上劃分為啟動(dòng)代碼區(qū)101、操作系統(tǒng)區(qū)102、文件系統(tǒng)區(qū)103、容錯(cuò)區(qū)104和系統(tǒng)升級(jí)過程標(biāo)志區(qū)105五個(gè)區(qū)域。其中,啟動(dòng)代碼區(qū)101保存用于系統(tǒng)啟動(dòng)的基本初始化和引導(dǎo)代碼,即通常意義上的bootloader,由于bootloader的主要功能是實(shí)現(xiàn)硬件系統(tǒng)的基本初始化和操作系統(tǒng)的加載,因此,為了保證系統(tǒng)在任何情況下都可用,不允許對(duì)bootlaoder進(jìn)行重新刷寫的操作;操作系統(tǒng)區(qū)102保存該嵌入式操作系統(tǒng)的內(nèi)核代碼;文件系統(tǒng)區(qū)103保存該嵌入式系統(tǒng)的文件系統(tǒng);容錯(cuò)區(qū)104用于保存系統(tǒng)升級(jí)前的待升級(jí)部分的數(shù)據(jù),即用于系統(tǒng)容錯(cuò)恢復(fù)時(shí)所用的數(shù)據(jù),以防止由于升級(jí)過程意外中斷,而導(dǎo)致系統(tǒng)下次無法正常啟動(dòng)的情況;系統(tǒng)升級(jí)過程標(biāo)志區(qū)105用于保存系統(tǒng)升級(jí)過程中的狀態(tài),其包括升級(jí)成功標(biāo)志、升級(jí)內(nèi)容標(biāo)志、升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù)以及廠商標(biāo)志等等。每個(gè)區(qū)域的大小根據(jù)不同的實(shí)現(xiàn)系統(tǒng)進(jìn)行不同的劃分。
圖2所示為本發(fā)明升級(jí)方法一較佳實(shí)施例的流程圖。通過修改bootlaoder的流程,使嵌入式系統(tǒng)實(shí)現(xiàn)了帶有容錯(cuò)機(jī)制的自動(dòng)升級(jí)。
步驟201,系統(tǒng)啟動(dòng)時(shí),bootloader通過外部的連接方式與升級(jí)服務(wù)器進(jìn)行連接,并判斷該連接是否連接成功,如果是,則執(zhí)行步驟207,否則執(zhí)行步驟202;其中,外部連接方式包括網(wǎng)絡(luò)連接、串口連接、并口連接和USB連接等,bootloader將按照預(yù)先確定的順序分別嘗試通過以上的外部連接方式與服務(wù)器進(jìn)行連接;步驟202,檢查系統(tǒng)的升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志;步驟203,根據(jù)系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志判斷上次的升級(jí)過程是否正常結(jié)束,如果是,則執(zhí)行步驟212,否則執(zhí)行步驟204;步驟204,bootloader再次嘗試能否與升級(jí)服務(wù)器進(jìn)行連接,并判斷是否連接成功,如果是,則執(zhí)行步驟207,否則執(zhí)行步驟205;步驟205,bootloader讀取升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志來確定上次非正常結(jié)束前最后進(jìn)行升級(jí)操作的對(duì)象,并讀取升級(jí)過程標(biāo)志區(qū)中的升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù)來確定上次非正常結(jié)束前最后進(jìn)行升級(jí)操作的數(shù)據(jù)長(zhǎng)度;
步驟206,根據(jù)升級(jí)操作的數(shù)據(jù)長(zhǎng)度,從容錯(cuò)區(qū)中復(fù)制相應(yīng)長(zhǎng)度的數(shù)據(jù),并將該數(shù)據(jù)恢復(fù)到非易失性存儲(chǔ)器中原來的相應(yīng)位置后,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為成功后,執(zhí)行步驟212;步驟207,從服務(wù)器上下載升級(jí)配置文件,并根據(jù)升級(jí)配置文件中的標(biāo)識(shí)字段判斷該系統(tǒng)是否需要升級(jí),如果是,則執(zhí)行步驟208,否則直接執(zhí)行步驟212;該升級(jí)配置文件由服務(wù)器升級(jí)管理程序根據(jù)用戶的升級(jí)要求生成并放置在確定的目錄下,且具有約定的格式,bootloader通過分析該配置文件,獲取用戶希望升級(jí)的區(qū)域,即操作系統(tǒng)區(qū),或文件系統(tǒng)區(qū),或操作系統(tǒng)區(qū)和文件系統(tǒng)區(qū);步驟208,bootlaoder向服務(wù)器申請(qǐng)下載操作系統(tǒng)區(qū)或文件系統(tǒng)區(qū)所需的升級(jí)文件,下載完畢后,執(zhí)行步驟209;操作系統(tǒng)區(qū)的升級(jí)文件和文件系統(tǒng)區(qū)的升級(jí)文件分別由不同的文件名表示,且文件名由升級(jí)配置文件指定,且每次只能下載一種類型的文件;步驟209,根據(jù)容錯(cuò)區(qū)的大小將當(dāng)前待升級(jí)的文件復(fù)制到容錯(cuò)區(qū),并將所復(fù)制數(shù)據(jù)的長(zhǎng)度記錄在系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù)中;步驟210,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為否,并將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志標(biāo)記為當(dāng)前即將升級(jí)部分的標(biāo)志后,利用下載的升級(jí)文件對(duì)相應(yīng)區(qū)域,即操作系統(tǒng)區(qū)或文件系統(tǒng)區(qū),進(jìn)行升級(jí);步驟211,判斷嵌入式系統(tǒng)中是否還有其它部分需要升級(jí),如果是,則返回步驟208,否則將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為成功后,執(zhí)行步驟212;步驟212,進(jìn)行系統(tǒng)初始化以及加載操作,正常啟動(dòng)系統(tǒng)。上述方案中系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志可以是操作系統(tǒng)區(qū)與文件系統(tǒng)區(qū)共用一個(gè)標(biāo)志位,也可以是操作系統(tǒng)區(qū)與文件系統(tǒng)區(qū)分別用不同的標(biāo)志位。
下面以一嵌入式Linux系統(tǒng)為例,具體說明本發(fā)明的實(shí)現(xiàn)過程。
假設(shè)該嵌入式Linux系統(tǒng)中的閃存(flash)為4M,對(duì)該flash進(jìn)行邏輯區(qū)域劃分的結(jié)果為啟動(dòng)代碼區(qū)存放bootloader,并占用flash的前32K,操作系統(tǒng)區(qū)存放壓縮后的操作系統(tǒng),并占用其后的700K,文件系統(tǒng)區(qū)存放壓縮后的文件系統(tǒng),并占用隨后的1500K,升級(jí)過程標(biāo)志區(qū)存放狀態(tài)標(biāo)志,并占用flash的最后32K,文件系統(tǒng)區(qū)之后到系統(tǒng)升級(jí)標(biāo)志區(qū)之前為容錯(cuò)區(qū),該容錯(cuò)區(qū)大小為4000-32-700-1500-32,即約為1700K。
系統(tǒng)啟動(dòng)時(shí),bootlaoder通過網(wǎng)絡(luò)與服務(wù)器連接,并得到服務(wù)器端生成的升級(jí)配置文件,該配置文件要求嵌入式Linux系統(tǒng)用服務(wù)器端c盤下的os.bin文件對(duì)flash上的操作系統(tǒng)進(jìn)行升級(jí),用服務(wù)器端c盤下的filesystem目錄中的myfs.bin文件對(duì)flash上的文件系統(tǒng)進(jìn)行升級(jí)。
bootlaoder通過網(wǎng)絡(luò)首先下載os.bin文件,并將flash上原有的操作系統(tǒng)區(qū)中已壓縮的操作系統(tǒng)數(shù)據(jù)復(fù)制到flash上的容錯(cuò)區(qū)中,之后,將所復(fù)制數(shù)據(jù)的長(zhǎng)度記錄在系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù)中,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為否,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志置為1(假設(shè)1代表升級(jí)操作系統(tǒng),2代表升級(jí)文件系統(tǒng)),然后用已下載的os.bin文件對(duì)flash上的操作系統(tǒng)區(qū)中的操作系統(tǒng)數(shù)據(jù)進(jìn)行刷新。對(duì)操作系統(tǒng)的升級(jí)完成后,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為成功。此時(shí),bootloader再從服務(wù)器下載myfs.bin文件,并將flash上原有的文件系統(tǒng)區(qū)中已壓縮的文件系統(tǒng)數(shù)據(jù)復(fù)制到flash上的容錯(cuò)區(qū),覆蓋容錯(cuò)區(qū)中的現(xiàn)有文件后,并將所復(fù)制數(shù)據(jù)的長(zhǎng)度記錄在系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù)中,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為否,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志置為2,然后用已下載的myfs.bin文件對(duì)flash上的文件系統(tǒng)區(qū)中的文件系統(tǒng)數(shù)據(jù)進(jìn)行刷新。
如果在對(duì)文件系統(tǒng)進(jìn)行升級(jí)的過程中發(fā)生了系統(tǒng)掉電等意外情況,而使升級(jí)過程中斷,則當(dāng)該嵌入式系統(tǒng)重新上電后,由于bootloader并未損壞,因此,bootloader仍可以正常運(yùn)行。其具體過程如下
該嵌入式Linux系統(tǒng)重新上電后,bootloader首先與升級(jí)服務(wù)器嘗試連接,如果連接成功,則重新下載配置文件并按照其要求進(jìn)行升級(jí)操作;否則,bootlaoder檢查系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志,如果該標(biāo)志為成功,則進(jìn)行正常的系統(tǒng)初始化以及加載操作,啟動(dòng)該系統(tǒng),但由于該系統(tǒng)上次升級(jí)時(shí)出現(xiàn)意外斷電,因此系統(tǒng)的升級(jí)成功標(biāo)志肯定為否,此時(shí),bootloader再次嘗試與升級(jí)服務(wù)器連接,如果連接成功,則重新下載配置文件并按照其要求進(jìn)行升級(jí)操作;否則,bootlaoder檢查系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志,由于上次中斷時(shí)的升級(jí)操作是針對(duì)文件系統(tǒng)區(qū),因此,該標(biāo)志為2,于是bootloader讀取系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù),獲取上次升級(jí)前的文件系統(tǒng)大小為1500K,然后bootloader從容錯(cuò)區(qū)復(fù)制1500K的數(shù)據(jù)以覆蓋現(xiàn)在文件系統(tǒng)區(qū)中的數(shù)據(jù),并將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為成功后,進(jìn)行正常的系統(tǒng)初始化以及加載操作,以啟動(dòng)該系統(tǒng)。由此可見,即使系統(tǒng)在升級(jí)時(shí)發(fā)生意外中斷的情況,系統(tǒng)依然是可啟動(dòng),并且是可用的。
容錯(cuò)區(qū)的大小根據(jù)系統(tǒng)的非易失性存儲(chǔ)介質(zhì)的大小以及對(duì)系統(tǒng)安全性和成本的綜合考慮來決定。如果系統(tǒng)對(duì)安全性要求較高,則建議采用容量較大的非易失性存儲(chǔ)介質(zhì),以保證容錯(cuò)區(qū)的大小與壓縮后的操作系統(tǒng)和壓縮后的文件系統(tǒng)所占空間的最大值相同或稍大,這樣才能使經(jīng)容錯(cuò)恢復(fù)后的系統(tǒng)正常啟動(dòng)。如果系統(tǒng)對(duì)安全性要求不高,也可采用容量較小的非易失性存儲(chǔ)介質(zhì),以節(jié)約成本。如果容錯(cuò)區(qū)的大小比壓縮后的操作系統(tǒng)和壓縮后的文件系統(tǒng)所占空間的最大值小,則在刷新相應(yīng)的區(qū)域時(shí),容錯(cuò)區(qū)有多大,就復(fù)制相應(yīng)長(zhǎng)度的數(shù)據(jù)放入容錯(cuò)區(qū)。在這種情況下,當(dāng)容錯(cuò)區(qū)中的數(shù)據(jù)被恢復(fù)回去后,并不能保證系統(tǒng)能夠進(jìn)入可使用狀態(tài)。但由于系統(tǒng)的bootloader總是可用的,即使發(fā)生了由于容錯(cuò)區(qū)太小而使恢復(fù)回去的數(shù)據(jù)不可用的情況,系統(tǒng)至少能夠通過bootloader與升級(jí)服務(wù)器的交互來進(jìn)行一次新的升級(jí)過程,這樣使系統(tǒng)避免了由于升級(jí)失敗而必須要使用特殊的設(shè)備來刷新該系統(tǒng)的情況。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種嵌入式系統(tǒng)升級(jí)的方法,其特征在于,該方法包括以下步驟a、為嵌入式系統(tǒng)的非易失性存儲(chǔ)器上劃分邏輯區(qū)域,并指定一個(gè)區(qū)域用于保存升級(jí)操作前的待升級(jí)部分的數(shù)據(jù);b、當(dāng)該系統(tǒng)需要升級(jí)時(shí),下載所需的升級(jí)文件,并將非易失性存儲(chǔ)器上原有的待升級(jí)部分復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,應(yīng)用所下載的數(shù)據(jù)文件對(duì)該待升級(jí)部分進(jìn)行升級(jí)操作;c、該系統(tǒng)下一次啟動(dòng)時(shí),判斷上次升級(jí)過程是否正常結(jié)束,如果是,則正常啟動(dòng)該嵌入式系統(tǒng),否則將上次升級(jí)前復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域數(shù)據(jù)恢復(fù)到原來的位置后,啟動(dòng)該嵌入式系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟a所述邏輯區(qū)域包括啟動(dòng)代碼區(qū)、操作系統(tǒng)區(qū)、文件系統(tǒng)區(qū)、用于保存升級(jí)操作前的待升級(jí)部分?jǐn)?shù)據(jù)的容錯(cuò)區(qū)和系統(tǒng)升級(jí)過程標(biāo)志區(qū)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述系統(tǒng)升級(jí)過程標(biāo)志區(qū)中至少包括升級(jí)成功標(biāo)志、升級(jí)內(nèi)容標(biāo)志和升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟b進(jìn)一步包括應(yīng)用所下載的數(shù)據(jù)文件對(duì)該待升級(jí)部分升級(jí)完畢后,再判斷非易失性存儲(chǔ)器邏輯區(qū)域中是否還有區(qū)域需要升級(jí),如果是,則重復(fù)執(zhí)行步驟b,否則,正常啟動(dòng)該嵌入式系統(tǒng)。
5.根據(jù)權(quán)利要求1或4所述的方法,其特征在于,所述步驟b進(jìn)一步包括嵌入式系統(tǒng)引導(dǎo)程序通過外部連接方式與升級(jí)服務(wù)器進(jìn)行連接,并根據(jù)從升級(jí)服務(wù)器下載的升級(jí)配置文件判斷該系統(tǒng)是否需要升級(jí)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述外部連接方式包括網(wǎng)絡(luò)連接,串口連接、并口連接和USB連接。
7.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟b進(jìn)一步包括將非易失性存儲(chǔ)器上原有的待升級(jí)部分復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為否;當(dāng)升級(jí)操作完畢后,再將系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志置為成功;步驟c所述上次升級(jí)過程是否正常結(jié)束是根據(jù)系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志來判斷的。
8.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟c為如果上次升級(jí)過程是非正常結(jié)束,該系統(tǒng)再次與升級(jí)服務(wù)器進(jìn)行連接,并判斷是否連接成功,如果是,則執(zhí)行升級(jí)操作,否則,將上次升級(jí)前復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域數(shù)據(jù)恢復(fù)到原來的位置后,啟動(dòng)該嵌入式系統(tǒng)。
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟c進(jìn)一步包括將上次升級(jí)前復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域數(shù)據(jù)恢復(fù)到原來的位置后,重新執(zhí)行升級(jí)操作。
10.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟b進(jìn)一步包括將非易失性存儲(chǔ)器上原有的待升級(jí)部分復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,根據(jù)所復(fù)制數(shù)據(jù)的內(nèi)容以及大小設(shè)置系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志和升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù);所述步驟c是根據(jù)系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)內(nèi)容標(biāo)志,獲得上次升級(jí)非正常結(jié)束前最后進(jìn)行升級(jí)操作的對(duì)象,根據(jù)系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)數(shù)據(jù)長(zhǎng)度參數(shù),獲得上次升級(jí)非正常結(jié)束前最后進(jìn)行升級(jí)操作的數(shù)據(jù)長(zhǎng)度后,從非易失性存儲(chǔ)器的指定區(qū)域復(fù)制的相應(yīng)長(zhǎng)度的數(shù)據(jù)重新寫入到原來的位置。
11.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述系統(tǒng)升級(jí)過程標(biāo)志區(qū)中的升級(jí)成功標(biāo)志為非易失性存儲(chǔ)器中不同待升級(jí)邏輯區(qū)域共用的一個(gè)標(biāo)志位,或不同待升級(jí)邏輯區(qū)域分別應(yīng)用不同的標(biāo)志位。
12.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述非易失性存儲(chǔ)器上原有的待升級(jí)部分為待升級(jí)部分的全部數(shù)據(jù)或待升級(jí)部分的部分?jǐn)?shù)據(jù)。
全文摘要
本發(fā)明提供了一種嵌入式系統(tǒng)升級(jí)的方法,通過為非易失性存儲(chǔ)器劃分邏輯區(qū)域,并將非易失性存儲(chǔ)器上原有待升級(jí)的數(shù)據(jù)復(fù)制到非易失性存儲(chǔ)器的指定區(qū)域后,再對(duì)該非易失性存儲(chǔ)器的某一部分進(jìn)行升級(jí)操作,使系統(tǒng)在升級(jí)過程中出現(xiàn)意外中斷的情況,能將非易失性存儲(chǔ)器指定區(qū)域的數(shù)據(jù)恢復(fù)到原來的相應(yīng)位置后,能夠再次啟動(dòng)或自動(dòng)重新進(jìn)行升級(jí)。因此,本發(fā)明使嵌入式系統(tǒng)具有一定的自我修復(fù)能力,同時(shí),由于應(yīng)用本發(fā)明是對(duì)非易失性存儲(chǔ)器的部分區(qū)域進(jìn)行升級(jí),因此,實(shí)現(xiàn)了對(duì)升級(jí)過程的靈活管理。應(yīng)用本發(fā)明,不需要增加任何硬件,也不依賴于特定的操作系統(tǒng),對(duì)于要求系統(tǒng)高可用性且又存在對(duì)系統(tǒng)升級(jí)需求的應(yīng)用提供了一種低價(jià)可靠的解決方案。
文檔編號(hào)G06F12/06GK1581101SQ0315338
公開日2005年2月16日 申請(qǐng)日期2003年8月12日 優(yōu)先權(quán)日2003年8月12日
發(fā)明者張鵬, 劉旸 申請(qǐng)人:聯(lián)想(北京)有限公司