專利名稱:用于固件更新的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的固件,特別涉及對(duì)存儲(chǔ)在能夠存儲(chǔ)多個(gè)固件代碼映像的可重寫非易失性存儲(chǔ)器中的固件進(jìn)行更新。
背景技術(shù):
微處理器,例如,實(shí)現(xiàn)專用功能或服務(wù)的嵌入式系統(tǒng)的微處理器,使用存儲(chǔ)在非易失性存儲(chǔ)器中的固件或計(jì)算機(jī)可讀程序代碼。調(diào)制解調(diào)器、電話應(yīng)答機(jī)、汽車控制器、磁盤驅(qū)動(dòng)器、磁帶驅(qū)動(dòng)器、數(shù)字照相機(jī)、醫(yī)藥注入系統(tǒng)、以及存儲(chǔ)自動(dòng)化產(chǎn)品都是可包含嵌入式系統(tǒng)的例子。這些系統(tǒng)中的處理器控制要有一定的靈活性,以在提高產(chǎn)品質(zhì)量的同時(shí)降低成本。
對(duì)嵌入式系統(tǒng)的系統(tǒng)固件提供升級(jí)的能力是有利的。它簡(jiǎn)化了對(duì)產(chǎn)品提供增強(qiáng)和維修的任務(wù)。例如,以新的特點(diǎn)和功能的形式對(duì)產(chǎn)品提供增強(qiáng)是很常見的。例如,在引入56K調(diào)制解調(diào)器技術(shù)后,許多調(diào)制解調(diào)器生產(chǎn)商向現(xiàn)有顧客提供了固件更新。更新使現(xiàn)有的調(diào)制解調(diào)器能夠支持用于提高的通信速度的新技術(shù)。再例如,IBM 3584Ultra Scalable Tape Library首次引入時(shí)帶有LTO(Linear TapeOpen,線性開放磁帶)驅(qū)動(dòng)器和媒體支持,后來,進(jìn)行了改進(jìn)以支持“Quantum(昆騰)DLT”(Digital Linear Tape,數(shù)字線性磁帶)驅(qū)動(dòng)器和媒體。尤其是對(duì)昂貴的系統(tǒng),顧客希望在未來的許多年都能夠以最小的投入和最小的破壞來升級(jí)他們的產(chǎn)品。
對(duì)嵌入式系統(tǒng)提供可靠安全(failsafe)的固件更新是人們所希望的,在有些情況下是至關(guān)重要的?!翱煽堪踩?Failsafe)”意味著即使更新步驟中斷了,嵌入式系統(tǒng)也至少能在固件更新之前的水平上繼續(xù)工作。例如,許多嵌入式系統(tǒng)在固件更新中斷后,變?yōu)椴荒苷9ぷ?。在美?guó)專利6,357,021中,固件存儲(chǔ)在一個(gè)可更新的部分和一個(gè)固定的部分中。固定的部分包含缺省任務(wù),而可更新的部分則存儲(chǔ)任何的更新。這樣,存儲(chǔ)在固定部分中的固件就不會(huì)因更新下載未完成而丟失或破壞。問題是如果固件更新中斷了,則系統(tǒng)必須回到原始的默認(rèn)值,其先前最近的更新將會(huì)丟失,還有可能使嵌入式系統(tǒng)不能工作。
然后,嵌入式系統(tǒng)可能會(huì)需要專門的程序來使它們重新工作,例如,需要授權(quán)的維修專家,或者需要將產(chǎn)品返回工廠。
包含的′844美國(guó)專利申請(qǐng)?zhí)峁┑姆且资源鎯?chǔ)器具有多個(gè)獨(dú)立的可擦除的區(qū)或存儲(chǔ)區(qū),用于存儲(chǔ)至少兩個(gè)獨(dú)立的操作碼副本,以及與操作碼分開存儲(chǔ)的引導(dǎo)程序??蓪?duì)操作碼的任何副本進(jìn)行更新而不需要更新引導(dǎo)代碼。例如,如果存在兩個(gè)副本,這兩個(gè)副本可以都是最近的更新,或者一個(gè)副本比另一個(gè)副本更新。任何新的更新都將對(duì)低級(jí)的操作碼執(zhí)行。這樣,就保留了在新的更新之前的、已成功操作系統(tǒng)的操作碼,并且,在新的更新中斷的情況下,成功操作的代碼將會(huì)簡(jiǎn)單地恢復(fù)它的職責(zé)。
操作碼的兩個(gè)副本或映像(image)獨(dú)立地執(zhí)行。有些處理器或編譯器不支持與位置無關(guān)的代碼,以防止執(zhí)行多于一個(gè)的操作碼副本??墒褂酶郊拥拇鎯?chǔ)器來將兩個(gè)代碼映像中的任何一個(gè)復(fù)制到RAM或其它的存儲(chǔ)區(qū)中來執(zhí)行,并且固件被編譯成在RAM中的新復(fù)制的代碼的地址運(yùn)行。然而,現(xiàn)有的嵌入式系統(tǒng)可能沒有保存代碼映像副本的附加存儲(chǔ)器,而新系統(tǒng)將不得不為復(fù)制存儲(chǔ)器承擔(dān)額外的成本和板空間(board space)。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的內(nèi)容,提供了用于更新存儲(chǔ)在能夠存儲(chǔ)多個(gè)固件代碼映像的可重寫非易失性存儲(chǔ)器中的固件的計(jì)算機(jī)程序產(chǎn)品、計(jì)算機(jī)實(shí)現(xiàn)系統(tǒng)和方法。
在一個(gè)實(shí)施例中,固件代碼映像具有與位置相關(guān)的代碼,使多個(gè)更新固件代碼映像具有與位置相關(guān)的代碼,與位置相關(guān)的代碼指定可重寫非易失性存儲(chǔ)器的位置,每個(gè)固件代碼映像與位置相關(guān)的代碼指定的可重寫非易失性存儲(chǔ)器的位置不同于多個(gè)更新固件代碼映像的其它任何一個(gè)固件代碼映像。這樣,每個(gè)更新固件代碼映像適合于替代存儲(chǔ)在非易失性存儲(chǔ)器中的不同固件代碼映像。
計(jì)算機(jī)處理器確定存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的多個(gè)固件代碼映像中的要更新的一個(gè);并且選擇多個(gè)具有與位置相關(guān)的代碼的更新固件代碼映像的一個(gè),用于代替確定的要更新的固件代碼映像。
在一個(gè)實(shí)施例中,計(jì)算機(jī)處理器在接口指示出選擇,并提供選擇的更新固件代碼映像用于更新。
在另一實(shí)施例中,對(duì)嵌入式系統(tǒng)提供了多個(gè)更新固件代碼映像,并將其存儲(chǔ)在存儲(chǔ)器中,并且計(jì)算機(jī)處理器從存儲(chǔ)在存儲(chǔ)器中的多個(gè)代碼映像中選擇那個(gè)更新固件代碼映像。
然后,計(jì)算機(jī)處理器從存儲(chǔ)器中復(fù)制選擇的那個(gè)更新固件代碼映像、來覆蓋所確定的位于可重寫非易失性存儲(chǔ)器中的固件代碼映像。
在另一實(shí)施例中,在接口對(duì)嵌入式系統(tǒng)提供了多個(gè)更新固件代碼映像,并且計(jì)算機(jī)處理器選擇那個(gè)更新固件代碼映像,并直接覆蓋所確定的位于可重寫非易失性存儲(chǔ)器中的固件代碼映像。
在本發(fā)明的另一實(shí)施例中,把用于操作計(jì)算機(jī)處理器以執(zhí)行更新的計(jì)算機(jī)可讀程序代碼嵌入到非易失性存儲(chǔ)器的引導(dǎo)區(qū)中。
在另一實(shí)施例中,把用于操作計(jì)算機(jī)處理器以執(zhí)行更新的計(jì)算機(jī)可讀程序代碼嵌入到當(dāng)前起作用的固件代碼映像中。
在另一實(shí)施例中,把用于操作計(jì)算機(jī)處理器以執(zhí)行更新的計(jì)算機(jī)可讀程序代碼嵌入到至少一個(gè)更新固件代碼映像中,并將程序代碼臨時(shí)存儲(chǔ)在用于執(zhí)行程序代碼的存儲(chǔ)器中。
本發(fā)明的另一方面是關(guān)于更新存儲(chǔ)在能夠存儲(chǔ)多個(gè)固件代碼映像的可重寫非易失性存儲(chǔ)器中的固件,其中,存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的多個(gè)固件代碼映像包含操作碼,計(jì)算機(jī)處理器確定存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的多個(gè)固件代碼映像中的要更新的一個(gè);用更新固件代碼映像代替所確定的、要更新的固件代碼映像;確定更新固件代碼映像是否已成功地存儲(chǔ)到可重寫非易失性存儲(chǔ)器中以覆蓋所確定的固件代碼映像;以及如果是這樣的話,對(duì)存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的多個(gè)固件代碼映像的至少一個(gè)不更新的固件代碼映像進(jìn)行標(biāo)記,以防止被標(biāo)記的固件代碼映像在以后被用作當(dāng)前的操作碼。
參照下面結(jié)合附圖的詳細(xì)說明,將會(huì)對(duì)本發(fā)明有更加充分的理解。
圖1是實(shí)現(xiàn)本發(fā)明的微處理器系統(tǒng)的方框圖;圖2是圖1的非易失性存儲(chǔ)器的內(nèi)容的圖形表示;圖3是更新固件代碼映像的圖形表示;圖4是描述本發(fā)明的、用于更新圖1系統(tǒng)的固件的方法的實(shí)施例的流程圖;以及圖5是描述對(duì)圖1系統(tǒng)選擇用于執(zhí)行的固件代碼映像的流程圖。
具體實(shí)施方式
下面參照附圖對(duì)優(yōu)選實(shí)施例進(jìn)行描述,并以此來說明本發(fā)明,其中,相同的編號(hào)代表相同或相似的元件。盡管本發(fā)明是按照實(shí)現(xiàn)本發(fā)明目的最佳模式進(jìn)行說明的,然而本領(lǐng)域的技術(shù)人員應(yīng)該理解,在不脫離本發(fā)明的精神或范圍的條件下可根據(jù)這些教導(dǎo)實(shí)現(xiàn)各種變化。
參照?qǐng)D1,作為一個(gè)例子圖解說明了微處理器系統(tǒng)100,例如實(shí)現(xiàn)專用功能或服務(wù)的嵌入式系統(tǒng)。嵌入式系統(tǒng)的例子有調(diào)制解調(diào)器、電話應(yīng)答機(jī)、汽車控制器、磁盤驅(qū)動(dòng)器、磁帶驅(qū)動(dòng)器、數(shù)字照相機(jī)、醫(yī)藥注入系統(tǒng)、以及控制存取器或提供通信的存儲(chǔ)自動(dòng)化產(chǎn)品。圖解說明的微處理器系統(tǒng)具有計(jì)算機(jī)處理器102、可選的RAM(隨機(jī)存取存儲(chǔ)器)103、可重寫非易失性存儲(chǔ)器104、設(shè)備專用電路101以及I/O接口105。正如本領(lǐng)域的技術(shù)人員所了解的,計(jì)算機(jī)處理器102可以是現(xiàn)成的成品微處理器、定制的處理器、離散邏輯等??芍貙懛且资源鎯?chǔ)器104保存可執(zhí)行的固件和用于計(jì)算機(jī)處理器102的任何非易失性數(shù)據(jù),它可以是閃速(flash)PROM(可編程只讀存儲(chǔ)器)、電池后備RAM,此外,還有許多其它類型的非易失性存儲(chǔ)器也被本領(lǐng)域的技術(shù)人員所公知。I/O接口105是使計(jì)算機(jī)處理器102能夠與外部世界進(jìn)行通信的某種形式的通信接口。例如,可包括串行接口、SCSI(小型計(jì)算機(jī)系統(tǒng)接口)、以太網(wǎng)、光纖信道接口等。固件更新映像通過I/O接口105進(jìn)行傳送。設(shè)備專用電路101提供的附加硬件能夠使嵌入式系統(tǒng)100執(zhí)行專用功能,例如,車輛的防爆死制動(dòng)系統(tǒng)的執(zhí)行器控制、用于自動(dòng)數(shù)據(jù)存儲(chǔ)器庫的存取器的電機(jī)控制等。設(shè)備專用電路101可包括提供脈寬調(diào)制(PWM)控制、模數(shù)轉(zhuǎn)換(ADC)、數(shù)模轉(zhuǎn)換(DAC)、以及用于液晶顯示器(LCD)控制等的電子設(shè)備。圖1中的任何元件都可以組合成一個(gè)或多個(gè)部件,例如,非易失性存儲(chǔ)器104、RAM 103、以及I/O接口105可包含處理器102的元件。
如上所述,對(duì)嵌入式系統(tǒng)提供系統(tǒng)固件升級(jí)的能力是十分有利的。它簡(jiǎn)化了對(duì)產(chǎn)品提供增強(qiáng)和維修的任務(wù)。對(duì)嵌入式系統(tǒng)提供可靠安全(failsafe)的固件更新是人們所希望的,在有些情況下是至關(guān)重要的。這樣,即使更新步驟中斷了,嵌入式系統(tǒng)也至少能在固件更新之前的水平上繼續(xù)工作。包含的′844美國(guó)專利申請(qǐng)?zhí)峁┑姆且资源鎯?chǔ)器具有多個(gè)獨(dú)立的可擦除的區(qū)或存儲(chǔ)區(qū),用于存儲(chǔ)至少兩個(gè)獨(dú)立的操作碼副本、以及與操作碼分開存儲(chǔ)的引導(dǎo)程序。可對(duì)操作碼的任何副本進(jìn)行更新而不需要更新引導(dǎo)代碼。例如,如果存在兩個(gè)副本,這兩個(gè)副本可以都是最近的更新,或者一個(gè)副本比另一個(gè)副本更新。任何新的更新都將對(duì)低級(jí)的操作碼執(zhí)行。這樣,就保留了在新的更新之前的、已成功操作系統(tǒng)的操作碼,并且,在新的更新中斷的情況下,成功操作的代碼將會(huì)簡(jiǎn)單地恢復(fù)它的職責(zé)。
圖2圖解說明了圖1的非易失性存儲(chǔ)器104的內(nèi)容的一個(gè)例子。非易失性存儲(chǔ)器的一部分存儲(chǔ)引導(dǎo)區(qū)201,引導(dǎo)區(qū)中寫有比較簡(jiǎn)單的引導(dǎo)程序。圖中的多個(gè)固件代碼映像202、203構(gòu)成供圖1中的計(jì)算機(jī)處理器102使用的固件。盡管只示出了兩個(gè)固件代碼映像,然而使用幾個(gè)或許多固件映像都是可以的。
操作碼的兩個(gè)副本或映像是獨(dú)立地執(zhí)行的。在某些處理器中,可支持與位置無關(guān)的代碼,它使用相對(duì)尋址。這樣,由于對(duì)任何一個(gè)副本都使用相同的相對(duì)地址,因而任何一個(gè)副本都是可執(zhí)行的。然而,一些處理器和編譯器為防止執(zhí)行一個(gè)以上的操作碼副本而不支持與位置無關(guān)的代碼。如上所述,可使用附加的存儲(chǔ)器來將兩個(gè)代碼映像中的任何一個(gè)復(fù)制到RAM或其它的存儲(chǔ)區(qū)中來執(zhí)行,并且固件被編譯成在RAM中的新復(fù)制的代碼的地址運(yùn)行。然而,現(xiàn)有的嵌入式系統(tǒng)可能沒有保存代碼映像副本的附加存儲(chǔ)器,而新系統(tǒng)將不得不為復(fù)制存儲(chǔ)器承擔(dān)額外的成本和板空間。
在圖2中,示出了引導(dǎo)區(qū)201、第一代碼映像202和第二代碼映像203的存儲(chǔ)器地址。如果將更新代碼映像編譯成從十六進(jìn)制地址00002000開始運(yùn)行,并且第一代碼映像202從十六進(jìn)制地址00002000開始,那么更新代碼映像將會(huì)正常執(zhí)行。然而,如果改為在第二代碼映像203中寫入相同的更新代碼映像,則不能正確執(zhí)行,這是因?yàn)榈诙a映像203實(shí)際上是從十六進(jìn)制地址00021000開始的。企圖在第二代碼映像203以外執(zhí)行固件更新映像將會(huì)導(dǎo)致致命錯(cuò)誤,例如,處理器異常。
參照?qǐng)D3,在本發(fā)明的一個(gè)實(shí)施例中,要更新的固件代碼映像具有與位置相關(guān)的代碼,多個(gè)更新固件代碼映像302、303可用,其具有與位置相關(guān)的代碼,與位置相關(guān)的代碼指定可重寫非易失性存儲(chǔ)器的位置。更新固件代碼映像302的與位置相關(guān)的代碼指定圖1的可重寫非易失性存儲(chǔ)器104的位置、不同于多個(gè)更新固件代碼映像中其它任何一個(gè)固件代碼映像,更新固件代碼映像303的與位置相關(guān)的代碼也同樣。在圖2和圖3的例子中,更新固件映像302的與位置相關(guān)的代碼從十六進(jìn)制地址00002000開始,而更新固件代碼映像303的與位置相關(guān)的代碼從十六進(jìn)制地址00021000開始。這樣,更新固件代碼映像302適合于代替固件代碼映像202,而更新固件代碼映像303適合于代替存儲(chǔ)在非易失性存儲(chǔ)器104中的固件代碼映像203。另外,雖然只圖解說明了兩個(gè)更新固件映像,但是可以使用幾個(gè)或多個(gè)固件映像,每一個(gè)都與圖1中的非易失性存儲(chǔ)器104中一個(gè)不同的固件代碼映像相匹配。
這樣,根據(jù)本發(fā)明,計(jì)算機(jī)處理器,例如,圖1中的處理器102,確定存儲(chǔ)在圖2的可重寫非易失性存儲(chǔ)器104中的、圖2的多個(gè)固件代碼映像202、203中要更新的一個(gè);并且在圖3中的具有與位置相關(guān)的代碼的多個(gè)更新固件代碼映像302、303中選擇適合于代替所確定的要更新的固件代碼映像的一個(gè)。
圖4圖解說明了本發(fā)明的用于更新非易失性存儲(chǔ)器中的固件代碼映像的計(jì)算機(jī)實(shí)現(xiàn)方法的實(shí)施例。實(shí)現(xiàn)本發(fā)明的計(jì)算機(jī)程序產(chǎn)品可包含如下的計(jì)算機(jī)可讀程序代碼圖2的引導(dǎo)區(qū)201的、或者是當(dāng)前執(zhí)行的固件代碼映像202、203的、或者是更新固件映像302、303的計(jì)算機(jī)可讀程序代碼,此外還可包含磁盤并從磁盤來提供,等等,并且在圖1的接口105進(jìn)行通信。如果計(jì)算機(jī)可讀程序代碼嵌入到圖3的一個(gè)或多個(gè)將要進(jìn)行更新的固件代碼映像302、303中,則將計(jì)算機(jī)可讀程序代碼復(fù)制到存儲(chǔ)器中,例如,圖1的RAM 103,并可編譯成從該存儲(chǔ)器位置執(zhí)行。如果一個(gè)以上的更新固件代碼映像嵌入了計(jì)算機(jī)可讀程序代碼,則可將它們都編譯成從相同的地址執(zhí)行。可以從第一個(gè)提供的更新固件代碼映像讀取計(jì)算機(jī)可讀程序代碼,并且決定是選擇其映像還是另一個(gè)更新映像。剩余的過程可由進(jìn)行選擇的同一個(gè)計(jì)算機(jī)可讀程序代碼執(zhí)行,或者,也可由所選擇的代碼映像的計(jì)算機(jī)可讀程序代碼執(zhí)行。
在所有這些例子中,可將計(jì)算機(jī)程序產(chǎn)品的計(jì)算機(jī)可讀程序代碼復(fù)制到另一個(gè)存儲(chǔ)器,并且如果計(jì)算機(jī)可讀程序代碼來自更新固件映像302、303,則復(fù)制是必須的,必須對(duì)其計(jì)算機(jī)可讀程序代碼進(jìn)行復(fù)制以便用來執(zhí)行代碼。
固件更新從圖4中的步驟401開始。固件更新可能是操作員或維修人員手動(dòng)啟動(dòng)的更新,或者是由主機(jī)、另一嵌入式系統(tǒng)、或另一處理器等啟動(dòng)的自動(dòng)固件更新。在圖4的步驟405中,圖1的計(jì)算機(jī)處理器102檢查非易失性存儲(chǔ)器104中的固件代碼映像,例如,圖2中的代碼映像202或203,并確定其任何一個(gè)是否有缺陷或標(biāo)記為不使用。如果其中一個(gè)固件代碼映像有缺陷或者標(biāo)記為不使用,則在圖4的步驟407中,處理器將有缺陷的代碼映像確定為將要由更新代碼映像覆蓋的代碼映像。
如果步驟405指示沒有一個(gè)固件代碼映像被標(biāo)記或是有缺陷,則步驟411確定固件代碼映像中的任何一個(gè)與至少一個(gè)其它固件代碼映像比較起來是否是最近最少更新(least recently updated)。這里,術(shù)語“最近最少更新”是指一個(gè)固件代碼映像與至少一個(gè)其它固件代碼映像比起來、是否低級(jí)或更早(less recent)。保留當(dāng)前工作的固件映像,而不要覆蓋它是很重要的,即使它是最早的。最近最少更新的固件可由較低的固件版本、較早的日期/時(shí)間戳、或某些其它的標(biāo)記來指示。如果其中一個(gè)固件代碼映像與其它固件代碼映像比較起來是最近最少更新的,并且不是當(dāng)前工作的固件,則在步驟412中,處理器將最近最少更新的代碼映像確定為將由更新代碼映像覆蓋的代碼映像。
如果步驟405指示沒有一個(gè)固件代碼被標(biāo)記或是有缺陷,并且步驟411指示沒有一個(gè)固件代碼映像與至少一個(gè)其它固件代碼映像比較起來是最近最少更新的,則在步驟415中,任意決定要由更新代碼映像覆蓋的代碼映像。根據(jù)步驟407、步驟412、或步驟415的確定,在步驟418中,計(jì)算機(jī)處理器確定要被覆蓋的代碼映像的位置。要被覆蓋的映像的位置可包含任意的映像編號(hào)、地址、偏移量、或一些其它的位置要被覆蓋的標(biāo)記。
然后,在步驟420中,計(jì)算機(jī)處理器選擇并可能報(bào)告出需要哪個(gè)固件更新映像來進(jìn)行固件更新的指示。選擇的更新代碼映像將具有與位置相關(guān)的代碼,并適合于代替所確定的要被覆蓋和更新的固件代碼映像。在圖1中,計(jì)算機(jī)處理器102可能是由來自更新計(jì)算機(jī)的查詢觸發(fā),或者也可能是來自正被更新的嵌入式系統(tǒng)的請(qǐng)求。處理器102可報(bào)告在接口105的選擇,或者,如果在接口105從外部接收到了多個(gè)更新固件代碼映像,則處理器將選擇所希望的更新代碼映像。例如,參照?qǐng)D2和圖3,如果確定固件代碼映像203為要被覆蓋的代碼映像,則將選擇適合于代替所確定的要被更新的固件代碼映像的、具有與位置相關(guān)的代碼的更新固件代碼映像303。
在步驟403中,更新系統(tǒng)或操作員使圖3中的多個(gè)更新固件映像302、303可用于選擇過程。如上所述,每個(gè)固件更新映像已被編譯成從不同的存儲(chǔ)器位置執(zhí)行。更新固件代碼映像可在圖1中的I/O接口105一起提供,并可存儲(chǔ)在存儲(chǔ)器中,例如RAM103中,可按順序提供,并且當(dāng)所希望的映像出現(xiàn)在I/O接口105進(jìn)行選擇,或者可由外部請(qǐng)求及計(jì)算機(jī)處理器102的響應(yīng)來提供所希望的固件映像,或在計(jì)算機(jī)處理器102的請(qǐng)求下提供。
在步驟423中,接收選擇的更新固件代碼映像,并且處理器102將其寫到非易失性存儲(chǔ)器中,并覆蓋要被更新的固件代碼映像??稍趫D1中的I/O接口105接收選擇的更新固件代碼映像,并且在寫入到非易失性存儲(chǔ)器104之前,將其保存在存儲(chǔ)器中,例如RAM103中,或者,在接收的同時(shí)直接將其寫入到非易失性存儲(chǔ)器中。在任何一種情況下,更新固件代碼映像在接收時(shí)都可被緩存。
在圖4的步驟424中,進(jìn)行可選的檢查,以確定固件更新是否成功完成。如果更新沒有成功,則可選擇性地執(zhí)行步驟425中的出錯(cuò)恢復(fù),和/或可結(jié)束過程但未完成固件更新。
然而,如果成功地完成了固件更新,則過程轉(zhuǎn)到可選的步驟430。在步驟430中,對(duì)一個(gè)或多個(gè)沒有被更新的代碼映像,例如,以前執(zhí)行的或當(dāng)前執(zhí)行的固件代碼映像,進(jìn)行標(biāo)記,以防止系統(tǒng)100在下次通電或復(fù)位時(shí)使用。這可以是使標(biāo)識(shí)符設(shè)成無效的校驗(yàn)和、無效的CRC、無效的簽名字段等的動(dòng)作。對(duì)于只單方向支持固件更新的嵌入式系統(tǒng)來說該步驟不是必需的,因而該步驟是可選的。例如,在復(fù)位或通電后選擇執(zhí)行圖2中的哪一個(gè)代碼映像202、203時(shí),如果沒有一個(gè)代碼映像是有缺陷的,則可選擇較高固件版本的代碼映像。圖4中的步驟430防止在固件降級(jí)后選擇當(dāng)前執(zhí)行的代碼映像。在更新與位置無關(guān)的代碼的情況下,也可以使用步驟430,例如包含的′844美國(guó)專利申請(qǐng),以便同樣用來防止選擇當(dāng)前執(zhí)行的映像。固件更新過程在步驟437結(jié)束,在這里,可對(duì)嵌入式系統(tǒng)復(fù)位以便開始執(zhí)行新的更新代碼映像。
參照?qǐng)D5,圖解說明了在圖1的嵌入式系統(tǒng)100復(fù)位或通電后代碼映像的選擇過程。參照?qǐng)D2,引導(dǎo)區(qū)201中的固件負(fù)責(zé)圖5中的步驟,如包含的′844美國(guó)專利申請(qǐng)所討論的那樣。在圖5中,只說明了兩個(gè)固件代碼映像,但是,仍然是可提供幾個(gè)或多個(gè)固件代碼映像。
通電或復(fù)位發(fā)生在步驟501中。在步驟502中,進(jìn)行檢查以確定圖1中的第一個(gè)固件代碼映像202是否被標(biāo)記或有缺陷。這可能是檢查標(biāo)識(shí)符、校驗(yàn)和測(cè)試、CRC測(cè)試、檢查有效簽名字段等。如果第一代碼映像是有缺陷的,則過程轉(zhuǎn)到圖5的步驟503,在這里,選擇圖2中的第二代碼映像并執(zhí)行?;蛘撸瑘D5中的步驟503確保第二代碼映像是完好的,并且如果它不是完好的,則選擇性地執(zhí)行出錯(cuò)恢復(fù)程序或報(bào)告錯(cuò)誤。另外,如果提供了另外的代碼映像,則步驟503將是步驟502的重復(fù),并且然后,過程仍將選擇另外一個(gè)代碼映像來執(zhí)行。
然而,如果步驟502確定圖2中的第一代碼映像202沒有被標(biāo)記,如在圖4中的步驟430,并且沒有缺陷,則過程轉(zhuǎn)到圖5中的步驟504。在步驟504中,進(jìn)行檢查以便確定圖2中的第二代碼映像203是否被標(biāo)記或是有缺陷。這仍然可以是校驗(yàn)和測(cè)試等。如果第二代碼映像被標(biāo)記或有缺陷,則控制轉(zhuǎn)到圖5中的步驟505,在這里,選擇圖2中的第一代碼映像202并執(zhí)行。如果圖5中的步驟505斷定第二代碼映像沒有被標(biāo)記或沒有缺陷,則過程轉(zhuǎn)到步驟506。
在步驟506中,進(jìn)行檢查來確定哪個(gè)固件代碼映像是較近的。這可由較高的固件版本、較近的日期/時(shí)間戳、或一些其它的標(biāo)記指示。在這個(gè)直接的例子中,如果圖2中的第一代碼映像202比第二代碼映像203的時(shí)間更近,則過程轉(zhuǎn)到圖5中的步驟507,在這里,選擇第一代碼映像并執(zhí)行。然而,如果步驟506斷定圖2中的第一代碼映像202沒有第二代碼映像203的時(shí)間更近,則控制轉(zhuǎn)到圖5中的步驟508,在這里,選擇第二代碼映像并執(zhí)行。或者,如果在圖4中的步驟430中,標(biāo)記了低級(jí)的代碼映像,則可除去圖5中的步驟504、506、507和508。在這種情況下,來自步驟502的“否”的回答將把過程引導(dǎo)至步驟505。這是有可能的,因?yàn)閷?shí)際上總是有來自圖4中的步驟430的被標(biāo)記的或有缺陷的代碼映像。
本領(lǐng)域的技術(shù)人員可以構(gòu)想計(jì)算機(jī)處理器和非易失性存儲(chǔ)器的另外的布置,以及圖4和圖5的另外的布置。
雖然對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行了詳細(xì)說明,但是很明顯,本領(lǐng)域的技術(shù)人員在不脫離由下面的權(quán)利要求
書所闡明的本發(fā)明的范圍的情況下可以對(duì)那些實(shí)施例進(jìn)行修改和變化。
權(quán)利要求
1.一種用于更新存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的固件的裝置,所述可重寫非易失性存儲(chǔ)器能夠存儲(chǔ)多個(gè)固件代碼映像,所述固件代碼映像具有與位置相關(guān)的代碼,所述裝置包括用于確定存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的多個(gè)固件代碼映像中哪一個(gè)是要被更新的裝置;和用于選擇適合于代替所述確定的要被更新的固件代碼映像的、具有與位置相關(guān)的代碼的多個(gè)更新固件代碼映像中的其中一個(gè)的裝置。
2.如權(quán)利要求
1所述的裝置,還包括一個(gè)接口,其中,選擇所述更新固件代碼映像的裝置在所述接口指示所述選擇。
3.如權(quán)利要求
1所述的裝置,還包括一個(gè)存儲(chǔ)器,其中,選擇所述更新固件代碼映像的裝置從存儲(chǔ)在所述存儲(chǔ)器中的多個(gè)更新固件代碼映像中選擇所述的一個(gè)更新固件代碼映像。
4.如權(quán)利要求
3所述的裝置,還包括從所述存儲(chǔ)器中復(fù)制所述選擇的一個(gè)更新固件代碼映像來覆蓋所述可重寫非易失性存儲(chǔ)器中的所述確定的固件代碼映像的裝置。
5.如權(quán)利要求
1所述的裝置,還包括確定所述選擇的一個(gè)更新固件代碼映像是否已成功存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中來覆蓋所述確定的固件代碼映像的裝置;以及標(biāo)記存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中的至少一個(gè)非更新的固件代碼映像,以防止所述標(biāo)記的固件代碼映像在后來被用作當(dāng)前操作的代碼映像的裝置。
6.如權(quán)利要求
1所述的裝置,其中,所述可重寫非易失性存儲(chǔ)器中還包括一個(gè)引導(dǎo)區(qū)。
7.如權(quán)利要求
1所述的裝置,其中,所述固件代碼映像用于幫助確定多個(gè)固件代碼映像中哪一個(gè)要被更新,以及用于選擇所述多個(gè)更新固件代碼映像中的其中一個(gè)。
8.如權(quán)利要求
1所述的裝置,進(jìn)一步包括接口;以及用于臨時(shí)存儲(chǔ)嵌入到在所述接口接收到的至少一個(gè)更新固件代碼映像中的計(jì)算機(jī)可讀程序代碼的存儲(chǔ)器。
9.一種用于更新存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的固件的裝置,所述可重寫非易失性存儲(chǔ)器能夠存儲(chǔ)多個(gè)固件代碼映像,其中,存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中至少一個(gè)包含當(dāng)前操作的代碼,所述裝置包括用于確定存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中哪一個(gè)是要被更新的裝置;用于用更新固件代碼映像代替所述確定的要被更新的固件代碼映像的裝置;用于確定所述更新固件代碼映像是否已成功存儲(chǔ)到所述可重寫非易失性存儲(chǔ)器中,以覆蓋所述確定的固件代碼映像的裝置;以及用于標(biāo)記存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中的至少一個(gè)非更新的固件代碼映像,以防止所述標(biāo)記的固件代碼映像在后來被用作當(dāng)前操作的代碼映像的裝置。
10.一種用于更新存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的固件的方法,所述可重寫非易失性存儲(chǔ)器能夠存儲(chǔ)多個(gè)固件代碼映像,所述固件代碼映像具有與位置相關(guān)的代碼,包含以下步驟確定存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的多個(gè)固件代碼映像中的哪一個(gè)是要被更新的;以及選擇適合于代替所述確定的要被更新的固件代碼映像的、具有與位置相關(guān)的代碼的多個(gè)更新固件代碼映像中的一個(gè)。
11.如權(quán)利要求
10所述的方法,其中,所述選擇所述更新固件代碼映像的步驟還包括在接口指示所述選擇。
12.如權(quán)利要求
10所述的方法,其中,所述選擇所述更新固件代碼映像的步驟包括從存儲(chǔ)在存儲(chǔ)器中的多個(gè)更新固件代碼映像中選擇所述的一個(gè)更新固件代碼映像。
13.如權(quán)利要求
12所述的方法,還包括下面的步驟從所述存儲(chǔ)器中復(fù)制所述選擇的一個(gè)更新固件代碼映像來覆蓋所述可重寫非易失性存儲(chǔ)器中的所述確定的固件代碼映像。
14.如權(quán)利要求
10所述的方法,其中,存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中至少一個(gè)包含當(dāng)前操作的代碼,并且,所述方法還包括以下步驟確定所述選擇的一個(gè)更新固件代碼映像是否已成功存儲(chǔ)到所述可重寫非易失性存儲(chǔ)器中,以覆蓋所述確定的固件代碼映像;以及標(biāo)記存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中的至少一個(gè)非更新固件代碼映像,以防止所述標(biāo)記的固件代碼映像在后來被用作當(dāng)前操作的代碼映像。
15.一種用于更新存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的固件的方法,所述可重寫非易失性存儲(chǔ)器能夠存儲(chǔ)多個(gè)固件代碼映像,其中,存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中至少一個(gè)包含當(dāng)前操作的代碼,包括以下步驟確定存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的多個(gè)固件代碼映像中的哪一個(gè)是要被更新的;用更新固件代碼映像代替所述確定的要被更新的固件代碼映像;確定所述更新固件代碼映像是否已成功存儲(chǔ)到所述可重寫非易失性存儲(chǔ)器中,以覆蓋所述確定的固件代碼映像;以及標(biāo)記存儲(chǔ)在所述可重寫非易失性存儲(chǔ)器中的所述多個(gè)固件代碼映像中的至少一個(gè)非更新的固件代碼映像,以防止所述標(biāo)記的固件代碼映像在后來被用作當(dāng)前操作的所述固件代碼映像。
16.一種提供用于更新存儲(chǔ)在可重寫非易失性存儲(chǔ)器中的固件的方法,所述可重寫非易失性存儲(chǔ)器能夠存儲(chǔ)多個(gè)固件代碼映像,包括以下步驟提供多個(gè)具有與位置相關(guān)的代碼的更新固件代碼映像;利用所述與位置相關(guān)的代碼確定可重寫非易失性存儲(chǔ)器的位置;以及利用每個(gè)所述固件代碼映像的與位置相關(guān)的代碼確定與所述多個(gè)更新固件代碼映像中其它任何一個(gè)固件代碼映像所不同的所述可重寫非易失性存儲(chǔ)器的位置,以使每個(gè)所述更新固件代碼映像適合于代替存儲(chǔ)在非易失性存儲(chǔ)器中的不同的固件代碼映像。
專利摘要
對(duì)存儲(chǔ)多個(gè)具有與位置相關(guān)的代碼的固件代碼映像的可重寫非易失性存儲(chǔ)器中存儲(chǔ)的固件進(jìn)行更新。使多個(gè)更新代碼映像可用,其具有指定可重寫非易失性存儲(chǔ)器位置的與位置相關(guān)的代碼,以使每個(gè)更新代碼映像適合于代替不同的一個(gè)存儲(chǔ)的代碼映像。計(jì)算機(jī)處理器確定哪一個(gè)存儲(chǔ)的代碼映像是要被更新的;并選擇適合于代替要被更新的代碼映像的、具有與位置相關(guān)的代碼的、多個(gè)更新代碼映像中的一個(gè)。
文檔編號(hào)H04L29/08GKCN1282078SQ03156698
公開日2006年10月25日 申請(qǐng)日期2003年9月8日
發(fā)明者布賴恩·G·古德曼, 羅伯特·A·克萊姆, 蒂莫西·K·皮爾斯 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司導(dǎo)出引文BiBTeX, EndNote, RefMan