專利名稱:多固件嵌入式系統(tǒng)及其固件更新方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種嵌入式系統(tǒng)及其固件更新的方法,特別是涉及一種包括多個(gè)系統(tǒng)固件可切換更新的嵌入式系統(tǒng)及其多個(gè)固件間的更新方法。
背景技術(shù):
電子產(chǎn)品所具備的功能,隨著技術(shù)的迅速發(fā)展而經(jīng)常更新或擴(kuò)充,特別是適用嵌入式系統(tǒng)的消費(fèi)性電子產(chǎn)品,更是經(jīng)常通過(guò)固件更新的方式,即以較新版本的固件取代電子產(chǎn)品原本所適用的固件,來(lái)修正電子產(chǎn)品功能上的缺陷,或增加和強(qiáng)化其所具備的功能, 以提升產(chǎn)品的使用效益。然而,用戶為嵌入式系統(tǒng)進(jìn)行固件更新最常遇到的困擾,就是更新流程中不慎發(fā)生操作錯(cuò)誤、或更新程序過(guò)于復(fù)雜不易理解,而導(dǎo)致固件更新的失敗。當(dāng)固件更新失敗后, 用戶不但無(wú)法享受提升產(chǎn)品使用效益的好處,甚至可能連原有的功能都因原本的固件在更新過(guò)程中損壞而失效。這樣的挫折不但讓用戶因電子產(chǎn)品無(wú)法正常運(yùn)作而產(chǎn)生許多維修成本,同時(shí)也讓制造者因維修產(chǎn)品而產(chǎn)生時(shí)間成本,阻礙了技術(shù)繼續(xù)進(jìn)步的速度。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是為了克服現(xiàn)有技術(shù)中無(wú)法確保嵌入式系統(tǒng)可加載更新后的系統(tǒng)固件和避免更新過(guò)程中發(fā)生錯(cuò)誤而使嵌入式系統(tǒng)崩潰的缺陷,提供一種具有復(fù)數(shù)個(gè)系統(tǒng)固件的嵌入式系統(tǒng),以及所述嵌入式系統(tǒng)的固件更新方法。本發(fā)明是通過(guò)下述技術(shù)方案來(lái)解決上述技術(shù)問(wèn)題的一種嵌入式系統(tǒng)固件更新方法,該嵌入式系統(tǒng)包括一處理單元、一主存儲(chǔ)單元,以及復(fù)數(shù)個(gè)系統(tǒng)固件,該些系統(tǒng)固件分別一對(duì)一存儲(chǔ)于一存儲(chǔ)單元的復(fù)數(shù)個(gè)存儲(chǔ)區(qū)塊,其特點(diǎn)是該方法包括該嵌入式系統(tǒng)在一用戶環(huán)境中接收包括有版本數(shù)據(jù)的一待更新固件;尋找該些存儲(chǔ)區(qū)塊的地址;辨識(shí)該些系統(tǒng)固件當(dāng)中的一使用中固件及一非使用中固件,每一系統(tǒng)固件分別包括相對(duì)應(yīng)的版本數(shù)據(jù);將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊,以取代該非使用中固件作為該嵌入式系統(tǒng)的其中一系統(tǒng)固件;比對(duì)該使用中固件及該待更新固件的版本數(shù)據(jù),以判斷該待更新固件是該使用中固件的一升級(jí)版本或一回溯版本;根據(jù)比對(duì)結(jié)果設(shè)置一更新參數(shù),該更新參數(shù)用以指示該升級(jí)版本或該回溯版本; 及重新啟動(dòng)該嵌入式系統(tǒng),并從該些存儲(chǔ)區(qū)塊選取版本數(shù)據(jù)相對(duì)應(yīng)于該更新參數(shù)的其中一系統(tǒng)固件。較佳的,接收該待更新固件的后,還包括
驗(yàn)證接收到的該待更新固件的完整性及合法性。較佳的,將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊之前,還包括比對(duì)該待更新固件與該些系統(tǒng)固件的版本數(shù)據(jù),以判斷該待更新固件是否與任一系統(tǒng)固件的版本數(shù)據(jù)相同;及當(dāng)該待更新固件與該些系統(tǒng)固件的版本數(shù)據(jù)都相異,則執(zhí)行寫(xiě)入該待更新固件的步驟。較佳的,比對(duì)該待更新固件與該些系統(tǒng)固件的版本數(shù)據(jù)的步驟中,當(dāng)該待更新固件與任一系統(tǒng)固件的版本數(shù)據(jù)相同,則終止更新該嵌入式系統(tǒng)的固件。較佳的,將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊之后,還包括驗(yàn)證存儲(chǔ)在該存儲(chǔ)區(qū)塊的該待更新固件的完整性及合法性。較佳的,將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊之后,還包括設(shè)置一計(jì)數(shù)值為一初始值;及設(shè)置該待更新固件的一驗(yàn)證參數(shù),該驗(yàn)證參數(shù)用以指示所對(duì)應(yīng)的該系統(tǒng)固件為正常或錯(cuò)誤。較佳的,重新啟動(dòng)該嵌入式系統(tǒng),并選取其中一系統(tǒng)固件的步驟中包括偵測(cè)該些存儲(chǔ)區(qū)塊分別存儲(chǔ)的該些系統(tǒng)固件;讀取該更新參數(shù);比對(duì)被偵測(cè)到的該些系統(tǒng)固件的版本數(shù)據(jù),以判斷被偵測(cè)到的該些系統(tǒng)固件的版本順序關(guān)系;及根據(jù)該些系統(tǒng)固件的版本順序關(guān)系,指定將版本數(shù)據(jù)與該更新參數(shù)相對(duì)應(yīng)的其中一系統(tǒng)固件掛載到該主存儲(chǔ)單元。較佳的,指定將與該更新參數(shù)相對(duì)應(yīng)的該系統(tǒng)固件掛載到該主存儲(chǔ)單元之后,還包括判斷掛載到該主存儲(chǔ)單元的該系統(tǒng)固件是否成功開(kāi)啟;當(dāng)成功開(kāi)啟時(shí),設(shè)置相對(duì)應(yīng)的該驗(yàn)證參數(shù)以指出被掛載的該系統(tǒng)固件為正常;及當(dāng)無(wú)法成功開(kāi)啟時(shí),設(shè)置相對(duì)應(yīng)的該驗(yàn)證參數(shù)以指出被掛載的該系統(tǒng)固件為錯(cuò)誤。較佳的,設(shè)置相對(duì)應(yīng)的該驗(yàn)證參數(shù)以指出被掛載的該系統(tǒng)固件為錯(cuò)誤之后,還包括返回重新啟動(dòng)該嵌入式系統(tǒng)的步驟執(zhí)行。較佳的,指定將與該更新參數(shù)相對(duì)應(yīng)的該系統(tǒng)固件掛載到該主存儲(chǔ)單元之后,還包括增加該計(jì)數(shù)值。較佳的,讀取該更新參數(shù)之前,還包括判斷該計(jì)數(shù)值是否已到達(dá)或超過(guò)一閾值;當(dāng)該計(jì)數(shù)值尚未到達(dá)該閾值,執(zhí)行讀取該更新參數(shù)的步驟;及
當(dāng)該計(jì)數(shù)值已到達(dá)或超過(guò)該閾值,則判斷該些系統(tǒng)固件所對(duì)應(yīng)的該些驗(yàn)證參數(shù)指示出相對(duì)應(yīng)的該些系統(tǒng)固件為正?;蝈e(cuò)誤,若該些驗(yàn)證參數(shù)指示出該些系統(tǒng)固件皆為正常,則執(zhí)行讀取該更新參數(shù)的步驟。較佳的,其特征在于,判斷該些驗(yàn)證參數(shù)指示出相對(duì)應(yīng)的該些系統(tǒng)固件為正?;蝈e(cuò)誤的步驟中,包括若該些驗(yàn)證參數(shù)指示出該些系統(tǒng)固件皆為錯(cuò)誤,則切換該更新參數(shù)及重設(shè)該計(jì)數(shù)值為該初始值;及執(zhí)行讀取該更新參數(shù)的步驟。較佳的,判斷該些驗(yàn)證參數(shù)指示出相對(duì)應(yīng)的該些系統(tǒng)固件為正?;蝈e(cuò)誤的步驟中,包括若該些驗(yàn)證參數(shù)指示出僅有其中一系統(tǒng)固件為正常,則指定將被指示為正常的該系統(tǒng)固件掛載到該主存儲(chǔ)單元;及執(zhí)行增加該計(jì)數(shù)值的步驟。較佳的,偵測(cè)該些存儲(chǔ)區(qū)塊分別存儲(chǔ)的該些系統(tǒng)固件之后,還包括判斷該存儲(chǔ)單元所存儲(chǔ)的有效系統(tǒng)固件的數(shù)量;若該存儲(chǔ)單元包括復(fù)數(shù)個(gè)有效的該些系統(tǒng)固件,則執(zhí)行讀取該更新參數(shù)的步驟; 及若該存儲(chǔ)單元僅包括一個(gè)有效的系統(tǒng)固件,則指定將有效的該系統(tǒng)固件掛載到該主存儲(chǔ)單元。以及一種多固件嵌入式系統(tǒng),其特點(diǎn)是包括一存儲(chǔ)單元,包括復(fù)數(shù)個(gè)存儲(chǔ)區(qū)塊,每一存儲(chǔ)區(qū)塊用以存儲(chǔ)一系統(tǒng)固件,每一系統(tǒng)固件包括相對(duì)應(yīng)的版本數(shù)據(jù);及一參數(shù)記錄區(qū)塊,記錄一更新參數(shù),該更新參數(shù)指示出一升級(jí)版本或一回溯版本;一主存儲(chǔ)單元,用以掛載該些存儲(chǔ)區(qū)塊所存儲(chǔ)的其中一系統(tǒng)固件為一使用中固件,使該嵌入式系統(tǒng)進(jìn)入一用戶環(huán)境;及—處理單元,接收包括有版本數(shù)據(jù)的一待更新固件,并將該待更新固件寫(xiě)入該些系統(tǒng)固件中的一非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊,以取代該非使用中固件,以及比對(duì)該使用中固件與該待更新固件的版本順序關(guān)系,以設(shè)置該更新參數(shù)。較佳的,該處理單元在該嵌入式系統(tǒng)啟動(dòng)時(shí),讀取及比對(duì)該些存儲(chǔ)區(qū)塊所存儲(chǔ)的該些系統(tǒng)固件的版本順序關(guān)系,以及根據(jù)該更新參數(shù)及版本順序關(guān)系,選取版本數(shù)據(jù)對(duì)應(yīng)于該更新參數(shù)的其中一系統(tǒng)固件,以掛載到該主存儲(chǔ)單元。較佳的,該存儲(chǔ)單元還包括一開(kāi)機(jī)管理模塊,包括一固件選取模塊,該處理單元根據(jù)該固件選取模塊的指令, 在該嵌入式系統(tǒng)啟動(dòng)時(shí),根據(jù)該更新參數(shù)及版本順序關(guān)系,選取其中一系統(tǒng)固件。較佳的,該參數(shù)記錄區(qū)塊還包括復(fù)數(shù)個(gè)驗(yàn)證參數(shù),分別用以一對(duì)一指示該些存儲(chǔ)區(qū)塊所存儲(chǔ)的該些系統(tǒng)固件,掛載到該主存儲(chǔ)單元后正常開(kāi)啟或發(fā)生錯(cuò)誤;CN 102339227 A
說(shuō)明書(shū)
4/9頁(yè) 一計(jì)數(shù)值,記錄該待更新固件寫(xiě)入其中一存儲(chǔ)區(qū)塊后,該嵌入式系統(tǒng)重新啟動(dòng)的次數(shù);其中,該處理單元根據(jù)該固件選取模塊的指令,在該計(jì)數(shù)值到達(dá)或超過(guò)一閾值時(shí), 檢驗(yàn)該些驗(yàn)證參數(shù),以決定應(yīng)掛載到該主存儲(chǔ)單元的其中一系統(tǒng)固件。較佳的,當(dāng)該計(jì)數(shù)值到達(dá)或超過(guò)該閾值,且該些驗(yàn)證參數(shù)皆指示出該些系統(tǒng)固件為錯(cuò)誤時(shí),該處理單元根據(jù)該固件選取模塊的指令,切換該更新參數(shù)的內(nèi)容,并重設(shè)該計(jì)數(shù)值為一初始值。較佳的,當(dāng)該計(jì)數(shù)值到達(dá)或超過(guò)該閾值,且該些驗(yàn)證參數(shù)指示出僅有其中一系統(tǒng)固件為正常時(shí),該處理單元指定掛載被指示為正常的該系統(tǒng)固件。本發(fā)明的積極進(jìn)步效果在于為用戶更新電子產(chǎn)品的固件提供了便利,使電子產(chǎn)品能以更新后的固件提供服務(wù),甚至在更新失敗后仍然能夠維持電子產(chǎn)品無(wú)礙的運(yùn)作。
圖1為本發(fā)明的嵌入式系統(tǒng)實(shí)施例的電路框圖。
圖2為本發(fā)明的嵌入式系統(tǒng)固件更新方法實(shí)施例的流程圖。
圖3為本發(fā)明的嵌入式系統(tǒng)固件更新方法實(shí)施例的流程圖。
主要組件符號(hào)說(shuō)明
1嵌入式系統(tǒng)
10存儲(chǔ)單元
100開(kāi)機(jī)管理模塊
1002固件選取模塊
102參數(shù)記錄區(qū)塊
104第一存儲(chǔ)區(qū)塊
106第二存儲(chǔ)區(qū)塊
12主存儲(chǔ)單元
14處理單元
16網(wǎng)絡(luò)控制單元
S201-S223流程步驟
S301-S3^流程步驟
具體實(shí)施例方式下面結(jié)合附圖給出本發(fā)明較佳實(shí)施例,以詳細(xì)說(shuō)明本發(fā)明的技術(shù)方案。圖1為本發(fā)明的嵌入式系統(tǒng)實(shí)施例的電路框圖。所述的嵌入式系統(tǒng)1包括有一存儲(chǔ)單元10、一主存儲(chǔ)單元12、一處理單元14及一網(wǎng)絡(luò)控制單元16。存儲(chǔ)單元10還包括具有一固件選取模塊1002的開(kāi)機(jī)管理模塊100、一參數(shù)記錄區(qū)塊102,以及復(fù)數(shù)個(gè)存儲(chǔ)區(qū)塊。每一個(gè)存儲(chǔ)區(qū)塊映像一系統(tǒng)固件;換言之,本實(shí)施例的嵌入式系統(tǒng)1包括有復(fù)數(shù)個(gè)系統(tǒng)固件。本實(shí)施例中所述的存儲(chǔ)單元10可為一閃存(Flash memory),所述存儲(chǔ)區(qū)塊則可為用來(lái)模擬區(qū)塊設(shè)備(block device)的內(nèi)存技術(shù)設(shè)備分區(qū)
8(memory technology deviceblock),系統(tǒng)固件可為根文件系統(tǒng)(root file system)。本實(shí)施例是以兩個(gè)存儲(chǔ)區(qū)塊第一存儲(chǔ)區(qū)塊104及第二存儲(chǔ)區(qū)塊106為例進(jìn)行說(shuō)明。其中,第一存儲(chǔ)區(qū)塊104映像第一固件,第二存儲(chǔ)區(qū)塊106映像第二固件。存儲(chǔ)區(qū)塊所映像的系統(tǒng)固件是一映像文件(image),當(dāng)嵌入式系統(tǒng)1每次啟動(dòng)后,處理單元14會(huì)根據(jù)開(kāi)機(jī)管理模塊100的控制,將其中一個(gè)系統(tǒng)固件的映像文件掛載(mount)到主存儲(chǔ)單元12,以提供用戶操作的用戶環(huán)境。每個(gè)系統(tǒng)固件的映像文件的標(biāo)頭(header)都記錄有所述映像文件的版本號(hào)碼, 可供識(shí)別不同系統(tǒng)固件被開(kāi)發(fā)或釋出(release)的先后順序。一般而言,版本號(hào)碼越大代表該固件程序釋出的時(shí)間越晚、程序內(nèi)容越新。在本實(shí)施例中,第一固件與第二固件的版本相異。圖2為本發(fā)明的嵌入式系統(tǒng)固件更新方法實(shí)施例的流程圖,請(qǐng)一并參考圖1所示的嵌入式系統(tǒng)實(shí)施例的電路框圖,以利于了解圖1所示的嵌入式系統(tǒng)實(shí)施例的電路框圖中各組件間的關(guān)聯(lián)及其用途,以及固件更新的流程。當(dāng)嵌入式系統(tǒng)1已掛載第一固件或第二固件到主存儲(chǔ)單元12,并進(jìn)入用戶環(huán)境后,用戶若有更新(update)系統(tǒng)固件的需求,可由處理單元14通過(guò)網(wǎng)絡(luò)控制單元16到固件供貨商的服務(wù)器或網(wǎng)站,下載及接收一份待更新固件(S201)。所述的待更新固件亦為兼容于嵌入式系統(tǒng)1的系統(tǒng)固件,處理單元14可先對(duì)所接收的待更新固件進(jìn)行數(shù)據(jù)完整性及合法性的驗(yàn)證(S203),例如通過(guò)待更新固件本身的類型標(biāo)識(shí)、魔數(shù)(Magic Number),或是利用循環(huán)冗余校驗(yàn)(如CRC3》算法進(jìn)行驗(yàn)證,以確保嵌入式系統(tǒng)1所接收到的待更新固件與供貨商所提供的固件相同。為了成功更新系統(tǒng)固件,同時(shí)確保嵌入式系統(tǒng)1不致因固件更新過(guò)程中產(chǎn)生的意外而無(wú)法再度啟動(dòng),本實(shí)施例是以待更新固件取代目前非使用中固件。因此,處理單元14 也必須知道目前嵌入式系統(tǒng)1正在使用中固件是第一固件或第二固件,以及系統(tǒng)固件所映像到的第一存儲(chǔ)區(qū)塊104及第二存儲(chǔ)區(qū)塊106的所在,以辨識(shí)出將要以待更新固件取代的系統(tǒng)固件(S205)。處理單元14根據(jù)主存儲(chǔ)單元12中的固件程序的名稱、版本號(hào)碼、或是對(duì)應(yīng)于存儲(chǔ)單元10的固件存放地址,與存儲(chǔ)單元10中所記錄的第一固件及第二固件的相對(duì)應(yīng)數(shù)據(jù)進(jìn)行比對(duì),即可判斷出目前使用中固件為何者;同時(shí),根據(jù)不同嵌入式系統(tǒng)1對(duì)存儲(chǔ)單元10的區(qū)塊設(shè)計(jì),可搜尋出各個(gè)系統(tǒng)固件在存儲(chǔ)單元10映像到的存儲(chǔ)區(qū)塊所在。判斷出目前使用中固件后,亦可得知非使用中固件及其所映像的存儲(chǔ)區(qū)塊(例如依序排列在開(kāi)機(jī)管理模塊 100和參數(shù)記錄區(qū)塊102之后)。例如,在Linux系統(tǒng)平臺(tái)中,將存儲(chǔ)單元10虛擬為區(qū)塊設(shè)備時(shí),第一個(gè)內(nèi)存技術(shù)設(shè)備分區(qū)可能放置的是其他區(qū)塊設(shè)備內(nèi)容的對(duì)照表,第二個(gè)內(nèi)存技術(shù)設(shè)備分區(qū)可能放置相關(guān)參數(shù),接下來(lái)的第三及第四個(gè)內(nèi)存技術(shù)設(shè)備分區(qū)就可能依序存放著第一及第二固件;當(dāng)然, 這些分區(qū)的位置和先后順序會(huì)隨著所使用的系統(tǒng)平臺(tái)不同而異。若使用中固件為第一固件,則非使用中固件即為第二固件。藉此,處理單元14即可決定將經(jīng)過(guò)驗(yàn)證的待更新固件寫(xiě)入第二固件所對(duì)應(yīng)的第二存儲(chǔ)區(qū)塊106,以取代原本的第二固件。本實(shí)施例更新非使用中系統(tǒng)固件的作法,其優(yōu)點(diǎn)在于即使固件更新的過(guò)程中遭遇到意外,例如斷電、或使用者操作不當(dāng),而使得待更新固件無(wú)法正確地被寫(xiě)入對(duì)應(yīng)的存儲(chǔ)區(qū)塊,第一固件仍然完整有效,可保障嵌入式系統(tǒng)1重新啟動(dòng)后至少還有第一固件可正常開(kāi)啟,提供用戶進(jìn)入用戶環(huán)境后,再度接收待更新固件及更新固件的機(jī)會(huì)。找出第一固件、第二固件,并找出要被取代的第二固件所映像的第二存儲(chǔ)區(qū)塊106 之后,在開(kāi)始更新之前,處理單元14還可先比對(duì)第一、第二固件與待更新固件之間的版本順序關(guān)系(S207),以判斷待更新固件是否與存儲(chǔ)單元10中原有的系統(tǒng)固件中任一者的版本相同(S209)。上述步驟S209的目的,系為了避免系統(tǒng)資源浪費(fèi),當(dāng)處理單元14以待更新固件的版本號(hào)碼比對(duì)第一及第二固件的版本號(hào)碼,發(fā)現(xiàn)與第一或第二固件的版本號(hào)碼相同時(shí),表示待更新固件與第一及第二固件其中之一是同一份固件映像文件,即無(wú)再次更新的必要。 此時(shí),處理單元14會(huì)終止更新固件的工作(S211),并可將此信息提示用戶。若待更新固件的版本與第一及第二固件的版本皆不相同,處理單元14則繼續(xù)將待更新固件寫(xiě)入第二存儲(chǔ)區(qū)塊106 (S213),完成置換第二固件的程序,使得置換完成后,第一存儲(chǔ)區(qū)塊104映像第一固件、及第二存儲(chǔ)區(qū)塊106映像待更新固件。一般而言,使用者多半在想升級(jí)(upgrade)嵌入式系統(tǒng)1時(shí)更新固件,也就是說(shuō), 待更新固件是一升級(jí)版本,用以提供第一或第二固件所未提供的功能、或是修正第一或第二固件程序中存在的錯(cuò)誤;然而,有時(shí)為了能兼容于舊型的設(shè)備,使用者可能需要回溯 (downgrade)嵌入式系統(tǒng)1到較早的版本,因此,下載或接收的待更新固件亦可能為一回溯版本。為此,處理單元14將待更新固件寫(xiě)入第二存儲(chǔ)區(qū)塊106時(shí),也會(huì)判斷待更新固件與未被更新的第一固件的版本號(hào)碼,并設(shè)置參數(shù)記錄區(qū)塊102中所記錄的一更新參數(shù) (S215),例如一旗標(biāo)(flag),以做為嵌入式系統(tǒng)1啟動(dòng)后選取系統(tǒng)固件的依據(jù)。在此例中, 更新參數(shù)即標(biāo)識(shí)出待更新固件的版本相較于使用中的第一固件是為升級(jí)版本或回溯版本。 例如待更新固件為升級(jí)版本時(shí),更新參數(shù)記錄為1 ;為回溯版本時(shí),更新參數(shù)則記錄為0。 同時(shí),處理單元14也會(huì)在待更新固件寫(xiě)入后,將參數(shù)記錄區(qū)塊102中的一計(jì)數(shù)值設(shè)置為一初始值,以利于后續(xù)重新啟動(dòng)嵌入式系統(tǒng)1的作業(yè)。所述的初始值可為0,計(jì)數(shù)值的相關(guān)說(shuō)明將于后闡述。當(dāng)固件更新完成后,嵌入式系統(tǒng)1被重新啟動(dòng)時(shí)(S217),開(kāi)機(jī)管理模塊100(例如 Linux系統(tǒng)的LIL0)即開(kāi)始準(zhǔn)備加載核心的系統(tǒng)固件。在本實(shí)施例中,開(kāi)機(jī)管理模塊100所包括的固件選取模塊1002負(fù)責(zé)搜尋出存儲(chǔ)單元10所存儲(chǔ)的數(shù)個(gè)系統(tǒng)固件(S219),并從搜尋到的系統(tǒng)固件當(dāng)中,擇一掛載到主存儲(chǔ)單元12。在上述的固件更新過(guò)程后,此時(shí)第一存儲(chǔ)區(qū)塊104和第二存儲(chǔ)區(qū)塊106中所存放的系統(tǒng)固件分別為第一固件及待更新固件。處理單元14根據(jù)固件選取模塊1002的指令讀取參數(shù)記錄區(qū)塊102所記錄的更新參數(shù)(S221),以識(shí)別所應(yīng)選取的系統(tǒng)固件的版本是升級(jí)版本或回溯版本,并據(jù)此選取對(duì)應(yīng)的系統(tǒng)固件,以供開(kāi)機(jī)管理模塊100將其掛載到主存儲(chǔ)單元12 (S223),完成嵌入式系統(tǒng)1的啟動(dòng)程序。若更新參數(shù)指出嵌入式系統(tǒng)1重啟前所寫(xiě)入的待更新固件是一升級(jí)版本,處理單元14即可讀取二個(gè)存儲(chǔ)區(qū)塊104、106中存放的系統(tǒng)固件映像文件的標(biāo)頭所記錄的版本數(shù)據(jù),查詢并比對(duì)出二個(gè)系統(tǒng)固件中何者版本較新,并決定將版本較新的系統(tǒng)固件設(shè)置為將掛載的固件,交由開(kāi)機(jī)管理模塊100掛載到主存儲(chǔ)單元12,開(kāi)始進(jìn)行各項(xiàng)系統(tǒng)設(shè)定的初始化作業(yè),完成啟動(dòng)嵌入式系統(tǒng)1的程序。若更新參數(shù)指出,寫(xiě)入嵌入式系統(tǒng)1的是一回溯版本,固件選取模塊1002則選出存儲(chǔ)單元10中版本較早的系統(tǒng)固件,交由開(kāi)機(jī)管理模塊100 加以掛載。圖3顯示了關(guān)于啟動(dòng)嵌入式系統(tǒng)時(shí),嵌入式系統(tǒng)選取用戶所更新的固件數(shù)據(jù)的方法實(shí)施例流程圖。請(qǐng)同時(shí)參閱圖1所示的嵌入式系統(tǒng)1的電路框圖。首先要說(shuō)明的是,參數(shù)記錄區(qū)塊102除了記錄更新參數(shù)及計(jì)數(shù)值之外,還包括系統(tǒng)固件在存儲(chǔ)單元10中的起始位置,例如第一存儲(chǔ)區(qū)塊104和第二存儲(chǔ)區(qū)塊106的起始地址,用以供開(kāi)機(jī)管理模塊100根據(jù)起始地址存取相對(duì)應(yīng)的系統(tǒng)固件。參數(shù)記錄區(qū)塊102 還分別記錄每一系統(tǒng)固件的驗(yàn)證參數(shù),用以指示出系統(tǒng)固件被驗(yàn)證后的結(jié)果。在嵌入式系統(tǒng)1尚未執(zhí)行過(guò)固件更新之前,更新參數(shù)可為一預(yù)設(shè)參數(shù)(如出廠默認(rèn)值),例如默認(rèn)為1,以指示嵌入式系統(tǒng)1選取第一固件和第二固件當(dāng)中較新的版本;而計(jì)數(shù)值亦可在嵌入式系統(tǒng)1出廠時(shí)預(yù)先設(shè)置為初始值。當(dāng)嵌入式系統(tǒng)1在用戶環(huán)境下更新過(guò)系統(tǒng)固件后,不論是將嵌入式系統(tǒng)1升級(jí)或是回溯,更新參數(shù)及計(jì)數(shù)值都會(huì)經(jīng)過(guò)修改而記錄在參數(shù)記錄區(qū)塊102。因此,當(dāng)嵌入式系統(tǒng)1啟動(dòng)時(shí)(S301),處理單元14開(kāi)始根據(jù)開(kāi)機(jī)管理模塊100的指令準(zhǔn)備進(jìn)行檢測(cè)、掛載系統(tǒng)固件等作業(yè)。掛載系統(tǒng)固件前,可根據(jù)固件選取模塊1002的指令及參數(shù)記錄區(qū)塊102中的系統(tǒng)固件起始地址,到存儲(chǔ)單元10中相對(duì)應(yīng)的地址偵測(cè)是否存在有復(fù)數(shù)系統(tǒng)固件(S303),在本例中為偵測(cè)是否有二個(gè)系統(tǒng)固件;并可檢測(cè)存在存儲(chǔ)單元10的系統(tǒng)固件的合法性和完整性。若偵測(cè)結(jié)果發(fā)現(xiàn)僅有一個(gè)系統(tǒng)固件,固件選取模塊 1002即直接指定掛載存儲(chǔ)單元10所存儲(chǔ)的唯一系統(tǒng)固件到主存儲(chǔ)單元12 (S305)?;蛘唠m偵測(cè)到二個(gè)系統(tǒng)固件,但僅其中一個(gè)系統(tǒng)固件通過(guò)合法性和完整性的檢驗(yàn),確認(rèn)為有效的系統(tǒng)固件時(shí),固件選取模塊1002即指定掛載該有效的系統(tǒng)固件到主存儲(chǔ)單元12。若偵測(cè)結(jié)果發(fā)現(xiàn)二個(gè)系統(tǒng)固件都存儲(chǔ)在存儲(chǔ)單元10且皆為有效的系統(tǒng)固件,則進(jìn)一步讀取計(jì)數(shù)值,判斷計(jì)數(shù)值是否已達(dá)到或超過(guò)一閾值(S307)。若尚未達(dá)到或超過(guò)閾值, 處理單元14繼續(xù)根據(jù)固件選取模塊1002的指令,讀取更新參數(shù)(S309),以判斷更新參數(shù)指示出一升級(jí)版本或一回溯版本。此外并根據(jù)二個(gè)系統(tǒng)固件映像文件的標(biāo)頭中所記錄的版本號(hào)碼,判斷出二個(gè)系統(tǒng)固件的版本順序關(guān)系(S319)。接著根據(jù)更新參數(shù)的指示以及系統(tǒng)固件間的版本順序關(guān)系,指定掛載對(duì)應(yīng)于更新參數(shù)的系統(tǒng)固件(S321)。指定將要掛載的系統(tǒng)固件后,處理單元14增增加數(shù)值(S32!3)讀取參數(shù)記錄區(qū)塊 102中的計(jì)數(shù)值,加1之后再寫(xiě)入?yún)?shù)記錄區(qū)塊102。接著判斷被指定的系統(tǒng)固件是否正常被開(kāi)啟(S325),也就是判斷被指定的系統(tǒng)固件映像文件是否成功掛載到主存儲(chǔ)單元12,并順利解開(kāi)映像文件進(jìn)行系統(tǒng)核心的初始化,使嵌入式系統(tǒng)1進(jìn)入用戶環(huán)境。若指定掛載的系統(tǒng)固件正常被開(kāi)啟,則更新被掛載的系統(tǒng)固件所對(duì)應(yīng)的驗(yàn)證參數(shù),將其驗(yàn)證參數(shù)設(shè)置為指出系統(tǒng)固件正常(S3^),例如將驗(yàn)證參數(shù)設(shè)置為1,以代表系統(tǒng)固件正常開(kāi)啟。即使系統(tǒng)固件寫(xiě)入存儲(chǔ)單元10的存儲(chǔ)區(qū)塊前經(jīng)過(guò)完整性和合法性的驗(yàn)證,仍有可能因各種原因造成系統(tǒng)固件無(wú)法正確地被開(kāi)啟執(zhí)行。因此,若被指定掛載的系統(tǒng)同件無(wú)法正常啟動(dòng),則將所述系統(tǒng)固件所對(duì)應(yīng)的驗(yàn)證參數(shù)設(shè)置為指出系統(tǒng)固件錯(cuò)誤(S327),例如設(shè)置為0 ;再重新啟動(dòng)嵌入式系統(tǒng)1,再度嘗試加載系統(tǒng)固件(返回執(zhí)行步驟S301及以下)。此外,根據(jù)步驟S307判斷參數(shù)記錄區(qū)塊102的計(jì)數(shù)值是否到達(dá)或超過(guò)閾值的結(jié)果,若當(dāng)時(shí)的計(jì)數(shù)值確實(shí)已到達(dá)或超過(guò)閾值,則進(jìn)一步判斷參數(shù)記錄區(qū)塊102中的各個(gè)驗(yàn)證參數(shù)是否指示出每一系統(tǒng)固件都正常(S311);換言之,也就是根據(jù)驗(yàn)證參數(shù)判斷各個(gè)系統(tǒng)固件是否在先前的啟動(dòng)程序都曾經(jīng)被成功地加載及開(kāi)啟。若是,則仍繼續(xù)根據(jù)更新參數(shù)的指示,選取相對(duì)應(yīng)的系統(tǒng)固件加以掛載(步驟S309以下)。但若并非每一驗(yàn)證參數(shù)都指出相對(duì)應(yīng)的系統(tǒng)固件為正常,則判斷是否每一驗(yàn)證參數(shù)都指出相對(duì)應(yīng)的系統(tǒng)固件為錯(cuò)誤(S313),若是,則代表先前經(jīng)過(guò)數(shù)次啟動(dòng)嵌入式系統(tǒng)1, 并根據(jù)更新參數(shù)的指示指定掛載特定一系統(tǒng)固件都不成功,此時(shí)則切換更新參數(shù)內(nèi)容并重設(shè)計(jì)數(shù)值(S317)。例如將更新參數(shù)由原本指示掛載升級(jí)版本的1,切換為指示掛載回溯版本的0,以便固件選取模塊1002繼續(xù)執(zhí)行讀取更新參數(shù)的步驟時(shí)(S309),根據(jù)切換過(guò)的更新參數(shù),改選取版本較早的系統(tǒng)固件,嘗試將版本較早的系統(tǒng)固件掛載到主存儲(chǔ)單元12 ; 同時(shí)還將計(jì)數(shù)值重設(shè)為0,使固件選取模塊1002在重啟次數(shù)達(dá)到閾值之前,都以切換后的更新參數(shù)指定掛載版本較早的系統(tǒng)固件。若根據(jù)驗(yàn)證參數(shù)判斷存儲(chǔ)單元10內(nèi)的系統(tǒng)固件既非全部顯示為正常(步驟S311 結(jié)果為否),又非全部顯示為錯(cuò)誤(步驟S313結(jié)果為否),則表示存儲(chǔ)單元10所存儲(chǔ)的二個(gè)系統(tǒng)固件當(dāng)中僅有一個(gè)系統(tǒng)固件為正常。在此情況下,固件選取模塊1002即不再依據(jù)更新參數(shù)的指示而進(jìn)行選取,而改為直接指定驗(yàn)證參數(shù)指出為正常的特定系統(tǒng)固件(S315), 以供掛載。并于指定好掛載可正常開(kāi)啟的系統(tǒng)固件后,增加計(jì)數(shù)值(S323)。在上述流程中,嵌入式系統(tǒng)1每次啟動(dòng)后,無(wú)論系統(tǒng)固件是否成功開(kāi)啟,計(jì)數(shù)值都會(huì)累加;而由于嵌入式系統(tǒng)1先前在用戶環(huán)境下將待更新固件更新到存儲(chǔ)單元10后,計(jì)數(shù)值將被重設(shè)為0,所以計(jì)數(shù)值即可代表嵌入式系統(tǒng)1在固件更新過(guò)后重新啟動(dòng)的次數(shù)。在步驟S307判斷計(jì)數(shù)值是否到達(dá)或超過(guò)閾值,并根據(jù)判斷結(jié)果做不同處理的手段,除了提供嵌入式系統(tǒng)1依照更新參數(shù)的指示選取更新后的系統(tǒng)固件之外,同時(shí)還提供一種校正的機(jī)制,以便在嵌入式系統(tǒng)1無(wú)法依照更新參數(shù)的指示順利開(kāi)啟更新過(guò)的系統(tǒng)固件時(shí),仍有機(jī)會(huì)開(kāi)啟未被更改的系統(tǒng)固件,防止嵌入式系統(tǒng)1崩潰(crash)。舉例來(lái)說(shuō),假設(shè)閾值為2,若計(jì)數(shù)值小于2,也就是從系統(tǒng)固件經(jīng)過(guò)更新后,嵌入式系統(tǒng)1是第一次或第二次啟動(dòng)時(shí),不論存儲(chǔ)單元10中的各個(gè)系統(tǒng)固件是否能正常開(kāi)啟,固件選取模塊1002都會(huì)指定掛載對(duì)應(yīng)于更新參數(shù)的系統(tǒng)固件。例如更新參數(shù)為指示出升級(jí)版本的1,固件選取模塊1002就會(huì)指定將版本順序在后的系統(tǒng)固件掛載到主存儲(chǔ)單元12, 并根據(jù)掛載后系統(tǒng)固件是否成功開(kāi)啟而記錄相對(duì)應(yīng)的驗(yàn)證參數(shù)。當(dāng)嵌入式系統(tǒng)1的計(jì)數(shù)值到達(dá)或超過(guò)閾值,也就是啟動(dòng)第三次以上時(shí),固件選取模塊1002將判斷參數(shù)記錄區(qū)塊102中所記錄的各個(gè)驗(yàn)證參數(shù),若各驗(yàn)證參數(shù)皆指出相對(duì)應(yīng)的系統(tǒng)固件為正常(例如參數(shù)值為1),代表嵌入式系統(tǒng)1先前數(shù)次加載的系統(tǒng)固件都正常,則可繼續(xù)維持原有的開(kāi)機(jī)流程,每次啟動(dòng)嵌入式系統(tǒng)1時(shí),都依照更新參數(shù)的記錄而選取更新過(guò)的系統(tǒng)固件。若在計(jì)數(shù)值到達(dá)或超過(guò)閾值,且根據(jù)驗(yàn)證參數(shù)發(fā)現(xiàn)只有一個(gè)系統(tǒng)固件可正常開(kāi)啟時(shí),此時(shí)不論該可開(kāi)啟的系統(tǒng)固件是先前被寫(xiě)入的待更新固件或原本的第一固件,固件選取模塊1002皆會(huì)直接指定掛載驗(yàn)證參數(shù)為1的系統(tǒng)固件,以確保嵌入式系統(tǒng)1能順利開(kāi)啟正常的系統(tǒng)固件,進(jìn)入用戶環(huán)境,以避免嵌入式系統(tǒng)1繼續(xù)嘗試開(kāi)啟錯(cuò)誤的系統(tǒng)固件。即使是在發(fā)現(xiàn)各個(gè)系統(tǒng)固件皆被記錄為錯(cuò)誤(即驗(yàn)證參數(shù)為0),固件選取模塊1002仍會(huì)不斷嘗試加載不同的系統(tǒng)固件,以提供嵌入式系統(tǒng)1進(jìn)入用戶環(huán)境的機(jī)會(huì)。在系統(tǒng)固件皆無(wú)法正常開(kāi)啟的情況下,嵌入式系統(tǒng)1的計(jì)數(shù)值到達(dá)閾值之前,固件選取模塊1002仍依照更新參數(shù)的內(nèi)容選取相對(duì)應(yīng)的系統(tǒng)固件,直到計(jì)數(shù)值已到達(dá)閾值時(shí),由于原本被指定的系統(tǒng)固件(例如待更新固件)始終無(wú)法正常被開(kāi)啟,此時(shí)則切換更新參數(shù)的內(nèi)容,例如由1切換為0,使嵌入式系統(tǒng)1在選取系統(tǒng)固件時(shí),對(duì)應(yīng)被切換過(guò)的更新參數(shù)而改選另一個(gè)系統(tǒng)固件(例如第一固件),嘗試開(kāi)啟。除了切換更新參數(shù)之外,同時(shí)也將計(jì)數(shù)值重設(shè)為0,使得新選取的系統(tǒng)固件(即本例中的第一固件)也具有同樣多的機(jī)會(huì)(如本例中為二次)被掛載到主存儲(chǔ)單元12。直到計(jì)數(shù)值再度到達(dá)閾值時(shí),若仍無(wú)法成功啟動(dòng),則再次切換更新參數(shù)的內(nèi)容,嘗試加載另一系統(tǒng)固件(本例中的待更新固件)。利用這種反復(fù)切換的手段,嘗試將系統(tǒng)固件掛載到主存儲(chǔ)單元12中。設(shè)計(jì)者可制定一切換次數(shù),當(dāng)更新參數(shù)被切換到達(dá)預(yù)定的切換次數(shù)時(shí),則停止繼續(xù)嘗試加載程序。嵌入式系統(tǒng)1可交由其他的檢測(cè)或修復(fù)程序進(jìn)行修復(fù)的工作。根據(jù)上述實(shí)施例所示的嵌入式系統(tǒng)以及其固件更新方法,使用者不僅可以用版本較新的系統(tǒng)固件為嵌入式系統(tǒng)進(jìn)行升級(jí),還可以版本較早的系統(tǒng)固件更新嵌入式系統(tǒng),使嵌入式系統(tǒng)回溯到較早期的狀態(tài),以符合使用者進(jìn)行測(cè)試或其他操作的需求。除了可將任意將嵌入式系統(tǒng)升級(jí)或回溯之外,嵌入式系統(tǒng)于啟動(dòng)時(shí),根據(jù)置換系統(tǒng)固件后所設(shè)置的更新參數(shù)的內(nèi)容選取應(yīng)加載的系統(tǒng)固件的作法,使得嵌入式系統(tǒng)不論是經(jīng)過(guò)升級(jí)或回溯,都能準(zhǔn)確地選取出更新的系統(tǒng)固件,也就是用戶所希望使用的系統(tǒng)固件, 以便加載到主存儲(chǔ)單元后,可順利將映像文件解開(kāi),以進(jìn)入用戶所希望的操作的用戶環(huán)境。即使用戶更新的系統(tǒng)固件無(wú)法正常開(kāi)啟時(shí),只要存儲(chǔ)單元中記錄有一份正常可開(kāi)啟的系統(tǒng)固件,本發(fā)明仍能確保嵌入式系統(tǒng)可以利用正??砷_(kāi)啟的系統(tǒng)固件順利啟動(dòng),讓使用者能繼續(xù)操作嵌入式系統(tǒng)。本發(fā)明所述的多固件嵌入式系統(tǒng)及其固件更新方法可避免置換系統(tǒng)固件過(guò)程中發(fā)生錯(cuò)誤、或使用者操作不當(dāng),而造成嵌入式系統(tǒng)完全損毀、無(wú)法開(kāi)啟的情況,確保嵌入式系統(tǒng)的穩(wěn)定性。雖然以上描述了本發(fā)明的具體實(shí)施方式
,但是本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,這些僅是舉例說(shuō)明,本發(fā)明的保護(hù)范圍是由所附權(quán)利要求書(shū)限定的。本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的原理和實(shí)質(zhì)的前提下,可以對(duì)這些實(shí)施方式做出多種變更或修改,但這些變更和修改均落入本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種嵌入式系統(tǒng)固件更新方法,該嵌入式系統(tǒng)包括一處理單元、一主存儲(chǔ)單元,以及復(fù)數(shù)個(gè)系統(tǒng)固件,該些系統(tǒng)固件分別一對(duì)一存儲(chǔ)于一存儲(chǔ)單元的復(fù)數(shù)個(gè)存儲(chǔ)區(qū)塊,其特征在于,該方法包括該嵌入式系統(tǒng)在一用戶環(huán)境中接收包括有版本數(shù)據(jù)的一待更新固件; 尋找該些存儲(chǔ)區(qū)塊的地址;辨識(shí)該些系統(tǒng)固件當(dāng)中的一使用中固件及一非使用中固件,每一系統(tǒng)固件分別包括相對(duì)應(yīng)的版本數(shù)據(jù);將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊,以取代該非使用中固件作為該嵌入式系統(tǒng)的其中一系統(tǒng)固件;比對(duì)該使用中固件及該待更新固件的版本數(shù)據(jù),以判斷該待更新固件是該使用中固件的一升級(jí)版本或一回溯版本;根據(jù)比對(duì)結(jié)果設(shè)置一更新參數(shù),該更新參數(shù)用以指示該升級(jí)版本或該回溯版本;及重新啟動(dòng)該嵌入式系統(tǒng),并從該些存儲(chǔ)區(qū)塊選取版本數(shù)據(jù)相對(duì)應(yīng)于該更新參數(shù)的其中一系統(tǒng)固件。
2.如權(quán)利要求1所述的嵌入式系統(tǒng)固件更新方法,其特征在于,接收該待更新固件之后,還包括驗(yàn)證接收到的該待更新固件的完整性及合法性。
3.如權(quán)利要求1所述的嵌入式系統(tǒng)固件更新方法,其特征在于,將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊之前,還包括比對(duì)該待更新固件與該些系統(tǒng)固件的版本數(shù)據(jù),以判斷該待更新固件是否與任一系統(tǒng)固件的版本數(shù)據(jù)相同;及當(dāng)該待更新固件與該些系統(tǒng)固件的版本數(shù)據(jù)都相異,則執(zhí)行寫(xiě)入該待更新固件的步馬聚ο
4.如權(quán)利要求3所述的嵌入式系統(tǒng)固件更新方法,其特征在于,比對(duì)該待更新固件與該些系統(tǒng)固件的版本數(shù)據(jù)的步驟中,當(dāng)該待更新固件與任一系統(tǒng)固件的版本數(shù)據(jù)相同,則終止更新該嵌入式系統(tǒng)的固件。
5.如權(quán)利要求1所述的嵌入式系統(tǒng)固件更新方法,其特征在于,將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊之后,還包括驗(yàn)證存儲(chǔ)在該存儲(chǔ)區(qū)塊的該待更新固件的完整性及合法性。
6.如權(quán)利要求1所述的嵌入式系統(tǒng)固件更新方法,其特征在于,將該待更新固件寫(xiě)入該非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊之后,還包括設(shè)置一計(jì)數(shù)值為一初始值;及設(shè)置該待更新固件的一驗(yàn)證參數(shù),該驗(yàn)證參數(shù)用以指示所對(duì)應(yīng)的該系統(tǒng)固件為正?;蝈e(cuò)誤。
7.如權(quán)利要求6所述的嵌入式系統(tǒng)固件更新方法,其特征在于,重新啟動(dòng)該嵌入式系統(tǒng),并選取其中一系統(tǒng)固件的步驟中包括偵測(cè)該些存儲(chǔ)區(qū)塊分別存儲(chǔ)的該些系統(tǒng)固件; 讀取該更新參數(shù);比對(duì)被偵測(cè)到的該些系統(tǒng)固件的版本數(shù)據(jù),以判斷被偵測(cè)到的該些系統(tǒng)固件的版本順序關(guān)系;及根據(jù)該些系統(tǒng)固件的版本順序關(guān)系,指定將版本數(shù)據(jù)與該更新參數(shù)相對(duì)應(yīng)的其中一系統(tǒng)固件掛載到該主存儲(chǔ)單元。
8.如權(quán)利要求7所述的嵌入式系統(tǒng)固件更新方法,其特征在于,指定將與該更新參數(shù)相對(duì)應(yīng)的該系統(tǒng)固件掛載到該主存儲(chǔ)單元之后,還包括判斷掛載到該主存儲(chǔ)單元的該系統(tǒng)固件是否成功開(kāi)啟;當(dāng)成功開(kāi)啟時(shí),設(shè)置相對(duì)應(yīng)的該驗(yàn)證參數(shù)以指出被掛載的該系統(tǒng)固件為正常;及當(dāng)無(wú)法成功開(kāi)啟時(shí),設(shè)置相對(duì)應(yīng)的該驗(yàn)證參數(shù)以指出被掛載的該系統(tǒng)固件為錯(cuò)誤。
9.如權(quán)利要求8所述的嵌入式系統(tǒng)固件更新方法,其特征在于,設(shè)置相對(duì)應(yīng)的該驗(yàn)證參數(shù)以指出被掛載的該系統(tǒng)固件為錯(cuò)誤之后,還包括返回重新啟動(dòng)該嵌入式系統(tǒng)的步驟執(zhí)行。
10.如權(quán)利要求9所述的嵌入式系統(tǒng)固件更新方法,其特征在于,指定將與該更新參數(shù)相對(duì)應(yīng)的該系統(tǒng)固件掛載到該主存儲(chǔ)單元之后,還包括增加該計(jì)數(shù)值。
11.如權(quán)利要求10所述的嵌入式系統(tǒng)固件更新方法,其特征在于,讀取該更新參數(shù)之前,還包括判斷該計(jì)數(shù)值是否已到達(dá)或超過(guò)一閾值; 當(dāng)該計(jì)數(shù)值尚未到達(dá)該閾值,執(zhí)行讀取該更新參數(shù)的步驟;及當(dāng)該計(jì)數(shù)值已到達(dá)或超過(guò)該閾值,則判斷該些系統(tǒng)固件所對(duì)應(yīng)的該些驗(yàn)證參數(shù)指示出相對(duì)應(yīng)的該些系統(tǒng)固件為正?;蝈e(cuò)誤,若該些驗(yàn)證參數(shù)指示出該些系統(tǒng)固件皆為正常,則執(zhí)行讀取該更新參數(shù)的步驟。
12.如權(quán)利要求11所述的嵌入式系統(tǒng)固件更新方法,其特征在于,判斷該些驗(yàn)證參數(shù)指示出相對(duì)應(yīng)的該些系統(tǒng)固件為正?;蝈e(cuò)誤的步驟中,包括若該些驗(yàn)證參數(shù)指示出該些系統(tǒng)固件皆為錯(cuò)誤,則切換該更新參數(shù)及重設(shè)該計(jì)數(shù)值為該初始值;及執(zhí)行讀取該更新參數(shù)的步驟。
13.如權(quán)利要求11所述的嵌入式系統(tǒng)固件更新方法,其特征在于,判斷該些驗(yàn)證參數(shù)指示出相對(duì)應(yīng)的該些系統(tǒng)固件為正?;蝈e(cuò)誤的步驟中,包括若該些驗(yàn)證參數(shù)指示出僅有其中一系統(tǒng)固件為正常,則指定將被指示為正常的該系統(tǒng)固件掛載到該主存儲(chǔ)單元;及執(zhí)行增加該計(jì)數(shù)值的步驟。
14.如權(quán)利要求7所述的嵌入式系統(tǒng)固件更新方法,其特征在于,偵測(cè)該些存儲(chǔ)區(qū)塊分別存儲(chǔ)的該些系統(tǒng)固件之后,還包括判斷該存儲(chǔ)單元所存儲(chǔ)的有效系統(tǒng)固件的數(shù)量;若該存儲(chǔ)單元包括復(fù)數(shù)個(gè)有效的該些系統(tǒng)固件,則執(zhí)行讀取該更新參數(shù)的步驟;及若該存儲(chǔ)單元僅包括一個(gè)有效的系統(tǒng)固件,則指定將有效的該系統(tǒng)固件掛載到該主存儲(chǔ)單元。
15.一種多固件嵌入式系統(tǒng),其特征在于包括 一存儲(chǔ)單元,包括復(fù)數(shù)個(gè)存儲(chǔ)區(qū)塊,每一存儲(chǔ)區(qū)塊用以存儲(chǔ)一系統(tǒng)固件,每一系統(tǒng)固件包括相對(duì)應(yīng)的版本數(shù)據(jù);及一參數(shù)記錄區(qū)塊,記錄一更新參數(shù),該更新參數(shù)指示出一升級(jí)版本或一回溯版本; 一主存儲(chǔ)單元,用以掛載該些存儲(chǔ)區(qū)塊所存儲(chǔ)的其中一系統(tǒng)固件為一使用中固件,使該嵌入式系統(tǒng)進(jìn)入一用戶環(huán)境;及一處理單元,接收包括有版本數(shù)據(jù)的一待更新固件,并將該待更新固件寫(xiě)入該些系統(tǒng)固件中的一非使用中固件所對(duì)應(yīng)的該存儲(chǔ)區(qū)塊,以取代該非使用中固件,以及比對(duì)該使用中固件與該待更新固件的版本順序關(guān)系,以設(shè)置該更新參數(shù)。
16.如權(quán)利要求15所述的多固件嵌入式系統(tǒng),其特征在于,該處理單元在該嵌入式系統(tǒng)啟動(dòng)時(shí),讀取及比對(duì)該些存儲(chǔ)區(qū)塊所存儲(chǔ)的該些系統(tǒng)固件的版本順序關(guān)系,以及根據(jù)該更新參數(shù)及版本順序關(guān)系,選取版本數(shù)據(jù)對(duì)應(yīng)于該更新參數(shù)的其中一系統(tǒng)固件,以掛載到該主存儲(chǔ)單元。
17.如權(quán)利要求16所述的多固件嵌入式系統(tǒng),其特征在于,該存儲(chǔ)單元還包括一開(kāi)機(jī)管理模塊,包括一固件選取模塊,該處理單元根據(jù)該固件選取模塊的指令,在該嵌入式系統(tǒng)啟動(dòng)時(shí),根據(jù)該更新參數(shù)及版本順序關(guān)系,選取其中一系統(tǒng)固件。
18.如權(quán)利要求16所述的多固件嵌入式系統(tǒng),其特征在于,該參數(shù)記錄區(qū)塊還包括 復(fù)數(shù)個(gè)驗(yàn)證參數(shù),分別用以一對(duì)一指示該些存儲(chǔ)區(qū)塊所存儲(chǔ)的該些系統(tǒng)固件,掛載到該主存儲(chǔ)單元后正常開(kāi)啟或發(fā)生錯(cuò)誤;一計(jì)數(shù)值,記錄該待更新固件寫(xiě)入其中一存儲(chǔ)區(qū)塊后,該嵌入式系統(tǒng)重新啟動(dòng)的次數(shù);其中,該處理單元根據(jù)該固件選取模塊的指令,在該計(jì)數(shù)值到達(dá)或超過(guò)一閾值時(shí),檢驗(yàn)該些驗(yàn)證參數(shù),以決定應(yīng)掛載到該主存儲(chǔ)單元的其中一系統(tǒng)固件。
19.如權(quán)利要求18所述的多固件嵌入式系統(tǒng),其特征在于,當(dāng)該計(jì)數(shù)值到達(dá)或超過(guò)該閾值,且該些驗(yàn)證參數(shù)皆指示出該些系統(tǒng)固件為錯(cuò)誤時(shí),該處理單元根據(jù)該固件選取模塊的指令,切換該更新參數(shù)的內(nèi)容,并重設(shè)該計(jì)數(shù)值為一初始值。
20.如權(quán)利要求18所述的多固件嵌入式系統(tǒng),其特征在于,當(dāng)該計(jì)數(shù)值到達(dá)或超過(guò)該閾值,且該些驗(yàn)證參數(shù)指示出僅有其中一系統(tǒng)固件為正常時(shí),該處理單元指定掛載被指示為正常的該系統(tǒng)固件。
全文摘要
本發(fā)明公開(kāi)了一種多固件嵌入式系統(tǒng)及其固件更新方法,所述系統(tǒng)包括處理單元、主存儲(chǔ)單元,及存儲(chǔ)于復(fù)數(shù)存儲(chǔ)區(qū)塊的復(fù)數(shù)系統(tǒng)固件。所述方法包括接收一待更新固件;尋找存儲(chǔ)區(qū)塊的地址并辨識(shí)系統(tǒng)固件當(dāng)中的一使用中固件及一非使用中固件;將待更新固件寫(xiě)入非使用中固件所對(duì)應(yīng)的存儲(chǔ)區(qū)塊,以取代非使用中固件;比對(duì)使用中固件及待更新固件的版本,以判斷待更新固件是使用中固件的升級(jí)版本或回溯版本;根據(jù)比對(duì)結(jié)果設(shè)置一更新參數(shù),用以指示所述的升級(jí)版本或回溯版本;及重新啟動(dòng)嵌入式系統(tǒng),并從存儲(chǔ)區(qū)塊選取版本數(shù)據(jù)相對(duì)應(yīng)于更新參數(shù)的系統(tǒng)固件。使電子產(chǎn)品能以更新后的固件提供服務(wù),甚至在更新失敗后仍然能夠維持電子產(chǎn)品無(wú)礙的運(yùn)作。
文檔編號(hào)G06F9/445GK102339227SQ20101023947
公開(kāi)日2012年2月1日 申請(qǐng)日期2010年7月28日 優(yōu)先權(quán)日2010年7月28日
發(fā)明者劉瞻圣, 龐正大, 黃少軍 申請(qǐng)人:環(huán)旭電子股份有限公司, 環(huán)鴻科技股份有限公司