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