最小單位地更新多個文件的方法
2023-05-14 19:54:06 1
專利名稱:最小單位地更新多個文件的方法
技術領域:
本發明一般地涉及計算機系統,具體而言涉及平臺固件的管理。
背景技術:
計算機平臺固件在計算機系統初始化過程中被用來驗證系統完整性和配置。它通常還提供在那些計算機系統的硬體和軟體器件之間的基礎低級接口,使得能夠通過執行包含在運行於該計算機系統上的電腦程式中的更高級的軟體指令實現特定的硬體功能。在計算機中,固件的主要部分被通稱為計算機系統的基本輸入/輸出系統(BIOS)代碼。BIOS代碼包括一套永久性記錄(或者在使用快閃記憶體BIOS的系統的情況下半永久性記錄)的軟體例程,該例程為系統提供其基本的運行特性,包括告訴計算機如何在其打開時測試其自身以及如何確定各種內置器件和外接外設的配置的指令。
在一般的PC構架中,BIOS通常被定義為運行於處理器復位和作業系統(OS)裝載器的第一個指令之間的固件。如圖1所示,在一般的PC 10中,BIOS代碼的基本部分存儲在PC主板12上的某些類型的ROM(只讀存儲器)設備中,例如標準PROM 14或者快閃記憶體16。在一些配置中,該基本部分可以利用存儲於容納在一個或者多個外接外設卡20上的ROMBIOS晶片18中的代碼被擴展,所述外接外設卡20例如為SCSI控制器和總線控制設備。BIOS的該部分被存儲在通常被稱為「可選ROM(optionROM)」的器件中。外設卡ROM BIOS晶片18中的BIOS代碼一般涉及由其對應的外設卡提供的特定功能,並且在外設卡根據已經定義(絕大多數情況下)的一套規則進行初始化的過程中被執行。在上述任何一種配置中,所有BIOS固件都存儲在本地,或者在主板上或者在外接到系統的外設卡上的可選ROM上。
在很多情況下,計算機系統平臺的基本功能由平臺的固件定義。因此,為了增強功能,需要在固件中添加或者修改對應的代碼。在今天的PC中,其實現可以通過或者更換主板(和/或外設卡)上的BIOS晶片,或者如果BIOS代碼是包含在可重寫的晶片(例如,快閃記憶體)中的,則執行重寫(改寫)BIOS代碼的BIOS更新軟體程序。
這兩種方法都易於出錯。初學的用戶更換BIOS晶片可能導致若干問題,包括不正確地插入新的晶片、損壞新的晶片、損壞插槽、對新晶片和/或主板上的已有晶片的靜電損壞。通用的更新存儲在快閃記憶體器件(flashcomponent)上的BIOS代碼的方法同樣有風險。例如,用戶可能試圖用不合適的一套新的代碼來更新BIOS代碼,或者可能在更新過程中發生崩潰。一般,BIOS代碼可以作為單個程序塊代碼存儲,所述單個程序塊的代碼整個地被新的單個程序塊代碼所替換。當BIOS代碼存儲在快閃記憶體器件上時,對應於存儲器將要容納新的BIOS代碼的部分的存儲區必須在重寫存儲器之前首先被清除(即,復位為全1)。該清除處理擦去已有的BIOS代碼。因此,如果在重寫或者更新的中間發生故障,則BIOS代碼將被破壞。假設發生電源系統故障,這使得用戶必須要重新啟動計算機系統。由於一般需要BIOS代碼來完成啟動處理,所以用戶可能不能夠啟動計算機系統來解決該問題,或者可能需要緊急修復盤(通常用戶沒有)來解決該問題。
本發明的上述方面以及很多伴隨的優點隨著參考以下結合附圖做出的詳細描述而更加易於被發現的同時會變得被更好理解,其中圖1是示意圖,圖示了BIOS固件如何被存儲在傳統個人計算機中;圖2是示意圖,圖示了本發明能夠實現於其中的示例性固件卷(firmware volume)固件存儲機制和相關聯的文件系統;圖3是流程圖,用於圖示當在固件卷中創建新文件時本發明所使用的邏輯;圖4和5是示意圖,圖示了當在固件卷中創建新文件時文件頭和固件卷的存儲空間的順序改變;圖6是示意圖,圖示了根據本發明的一個實施例在固件文件系統下文件如何被刪除;圖7是流程圖,圖示了當在固件卷中更新已有文件時本發明的一個實施例所使用的邏輯;圖8和9是示意圖,圖示了當在固件卷中創建新文件時文件頭和固件卷的存儲空間的順序改變;圖10是流程圖,圖示了當通過使用臨時的填充文件(pad file)創建文件時本發明的一個實施例所使用的邏輯;圖11是流程圖,圖示了當使用臨時的填充文件更新文件時本發明的一個實施例所使用的邏輯;圖12是流程圖,圖示了當更新多個文件時本發明所使用的邏輯;圖13-15是示意圖,圖示了當在固件卷中多個文件被更新時文件頭和固件卷的存儲空間的順序改變;以及圖16是適於實現本發明的個人計算機系統的示意圖。
具體實施例方式
在以下描述中,為了提供對本發明實施例的全面理解提供了許多具體細節。但是,本領域的技術人員會認識到,本發明可以在沒有這些具體細節中的一個或者多個、或者利用其它方法、器件等被實現。在其它情況下,沒有示出或者描述公知的結構和操作,以免使本發明的各種實施例的方案不清晰。
在整個說明書中對「一個實施例」或者「實施例」的引用意為結合該實施例描述的具體特徵、結構或者特性被包括在本發明的至少一個實施例中。因此,整個說明書中的不同地方出現的短語「在一個實施例中」或者「在實施例中」不一定都指相同的實施例。此外,具體的特徵、結構或者特性可以在一個或者多個實施例中以任何適當的方式被組合。
可擴展固件接口和固件卷最近,Intel公司引入了一種新的固件樣式,其使得固件存儲能夠被擴展超出現有技術中的傳統單片存儲方案。這部分是通過可擴展固件接口,或稱EFI來使能的。如其名稱所指示的,EFI使得固件能夠通過使用標準化的軟體接口而被「擴展」。
一種擴展固件的方式利用了用於固件存儲設備的標準軟體抽象,通稱為固件卷(FV)。由於FV固件存儲抽象並不捆綁於任何特定類型的硬體,所以它可以被用來從幾乎任何類型的固件設備產生用於BIOS的固件器件。例如,在給定系統中,一個FB可以表示快閃記憶體部分,而另一個可以表示磁碟分區,同時第三個可以表示伺服器上的遠程目錄。單個計算機系統可以具有存儲於一個或者多個類型的硬體上的一個或者多個FV。
BIOS固件代碼的為FV的一部分的部分由固件文件系統(FFS)來管理。FFS使得能夠操縱構成了FV的固件文件。FFS可以被用於檢索、創建、更新和刪除固件文件。一般,FFS可以存儲在任何持久存儲器設備中,包括快閃記憶體、磁碟分區和經由網絡訪問的遠程存儲設備。
在以下各段和相關的圖中,討論了有關存儲在快閃記憶體設備上的FV的本發明的各個實施例。本領域的技術人員可以理解,本發明可以實現在用於保存固件代碼和/或數據的其它類型的持久存儲設備,以下所討論的使用了快閃記憶體設備的本發明的實施例僅僅是用於實施本發明的示例方案。
快閃記憶體是一種非易失性存儲器技術,其製造商和(具有合適的硬體/軟體的)最終用戶能夠對信息進行電編寫和電擦除。快閃記憶體一般以被稱為存儲塊的存儲單位被擦除,而不是在位級別上進行擦除,其中當給定塊被擦除時該塊中的所有位被切換成預定的極性(即,邏輯電平)。在一種通用類型的快閃記憶體中,例如由Intel製造的快閃記憶體設備、存儲塊是通過將塊中的所有位設置為1來以電子方法擦除的。然後可以通過將個別的位翻轉為0將數據該塊中。在其它類型的快閃記憶體中,被擦除的邏輯狀態是都為0,而將數據寫入這些設備包括將個別的位改變為1。可以認識到,在傳統的快閃記憶體設備中,個別的位不能從已改變(即,設置)的邏輯電平被翻轉回被擦除的邏輯電平;為了更新塊中的數據,必須首先擦除所有的位,然後重寫。
圖2示出了存儲在使用1作為其擦除狀態的快閃記憶體設備中的示例FV22。FV 22包括FV頭24和多個FFS文件25。FV頭24的開始被存儲在快閃記憶體設備的最低存儲器地址處,而每個FFS文件25開始於跟隨在緊挨的前一個文件或者文件頭(當可適用時)的末尾的下一個字節邊界。在一個實施例中,每8個字節出現字節邊界,而文件的大小以8位元組來增長。包括在FFS文件25之間的是已刪除文件26。如以下更詳細地說明的,已刪除文件26包括標識該文件被FFS認為要刪除掉的文件頭,即使該已刪除文件的數據還仍然以與其被標記為被刪除之前相同的狀態存在於FV中。一般,FFS文件25被順序寫入,其中自由空間28表示FV中任何剩餘可用的空間,並且位置靠近快閃記憶體設備的頂部地址部分(即,更高的存儲器地址)。
FV頭24包括多個數據欄位,所述數據欄位包括屬性欄位30、頭長度欄位32、FV長度欄位34、文件系統ID(FileSystemID)欄位36、校驗和欄位38和FV塊圖(FVBlockMap)40。屬性欄位30包括多個位,所述位包括讀/寫能力、電源接通狀態、「黏(sticky)」寫數據、存儲器映射標誌和擦除極性標識符。頭長度欄位32包含FV頭的字節長度。FV長度欄位34包含整個FV的字節長度。文件系統ID欄位36聲明FV是以哪個文件系統被格式化的。校驗和欄位38包括整個FV頭的16位的校驗和。FV塊圖欄位40包括行程長度編碼(run-length encoded)的塊結構描述的陣列,包括多個元組{塊序號,塊長度},以{0,0}元組結束。
每個FFS文件25包括FFS頭42和文件數據44。可選地,文件數據44可以包括尾標45,用於文件完整性校驗的目的。FFS頭42包括各種數據欄位,包括名稱欄位46、完整性校驗欄位47、類型欄位48、屬性欄位49、大小欄位50以及狀態欄位51。在一個實施例中,名稱46包括由固件文件系統給出的並且保證在固件卷中唯一的GUID(全局唯一標識符)。完整性校驗欄位47包含被用來校驗文件的完整性的數據,如以下將更為詳細地說明的。類型欄位48標識文件類型和文件的內部格式,例如DXE驅動器、PEIM等。大小欄位50包含文件(包括文件頭)的字節長度。
FV中的文件使用鏈機制來定位,其中當前文件的長度被添加到文件的起始地址以定位鏈中下一個文件的起始。另外,FV中的第一個文件緊接在FV頭24的末尾後,其中第一個文件的地址基於FV長度34中的值來確定。
如圖2的右上角所示,屬性欄位49包括定義文件的各種屬性的六個數據位(加上兩個保留的位)。這些屬性位包括文件尾標存在位52、文件恢復位53、頭擴展位54和包括了屬性欄位49的位2、3和4的3位數據對齊子欄位55。屬性欄位49還包括兩個保留位56和57。
文件尾標存在位52指示在文件的末尾存在16位的文件尾標45。恢復位53指示文件需要執行緊急恢復。頭擴展位54位以後的擴展保留。數據對齊子欄位55包括3位欄位,指示數據的開端如何對齊相對於FV基址的特定邊界。該欄位中的這三位提供了對對齊可能性的枚舉,例如8位元組對齊。
狀態欄位51的更為詳細的細節示出在圖2的右下手部分。狀態欄位51是8位的欄位,包括用來跟蹤文件操作的當前狀態的六個狀態位,這些狀態位在文件創建、刪除和更新過程中使用。狀態位包括FFS構建中位58(位0)、FFS頭有效位59(位1)、數據區有效位60(位2)、文件標記更新(file marked for update)位61(位3)、文件已刪除位62(位4)以及FFS頭無效位65(位5)。除了這些狀態位以外,位6和7(未示出)在整個所有操作中被留置為已擦除狀態(即,邏輯電平「假」(FALSE))。在以下所描述的所有狀態改變操作中,所有狀態位轉換都是最小單元操作,即,在一次給定文件狀態改變中僅一個狀態位的邏輯電平被改變。另外,給定位向「真」(TRUE)的轉換必須在向固件卷作出任何其它寫操作之前完全完成。而且,除了特別指出之外,只有設置為「真」的最重要的狀態位具有意義。因此,較低順序的狀態位被較高順序的狀態位所取代。
文件創建參照圖3、圖4和圖5的流程圖,新文件的創建以以下方式進行。新欄位是通過緊接在前文件(或者如果該新文件是寫入FV的第一個文件,固件卷頭24)的末尾之後從FV分配空間來創建的。假設FV 22最初包括單個文件X(68),要添加一個新文件Y。相應地,文件X所佔用的最後的(最高的)地址之上的剩餘存儲空間包括自由空間28,其中佔據該部分存儲器的所有位都被設為對應於固件設備的擦除狀態的「假」邏輯電平。上述情況的結果是,新文件Y(包括文件的頭)將佔用的存儲器空間最初全部為1,如圖4中所示的文件Y起始狀態。
文件創建處理開始於框100,其中文件頭構建中位(58)被設置為「真」,文件創建處理在FV中為該新文件頭分配空間。這為文件Y產生一個狀態=11111110b,其指示文件Y的文件頭構建已經開始,但是還沒有完成。這種情況在圖4中示為頭構建中狀態72。這具有從FV自由空間28「主張」FFS頭空間的效果,該空間現在被文件Y頭74所佔用。當處於這種狀態時,在框102通過向每個欄位寫入合適的數據將所有其它頭欄位初始化。這包括初始化名稱欄位46、完整性校驗欄位47、類型欄位48、屬性欄位49和大小欄位50。在一個實施例中,名稱欄位46包括FFS所給出的GUID。一般,GUID可以包括32位、64位或者128位GUID,儘管只要GUID能夠保證在FV中是唯一的,任何位長度的GUID可以被使用。
完整性校驗欄位47是16位欄位,其包括三個子欄位完整性校驗.校驗和.頭子欄位、完整性校驗.校驗和.文件子欄位和完整性校驗.尾標引用子欄位。完整性校驗.校驗和.頭子欄位佔用完整性校驗欄位47的低8位,包括用於文件頭的8位校驗和。狀態和完整性校驗.校驗和.文件欄位被假定為零並且計算校驗和,使得整個頭求和為零。任何時候狀態欄位51中文件頭有效位59被設置為「真」,則完整性校驗.校驗和.頭都有效。
完整性校驗.校驗和.文件子欄位佔用完整性校驗欄位47的高8位,包括整個文件的8位校驗和。狀態欄位51和文件尾標45被假定為零並計算校驗和,使得整個文件求和為零。任何時候狀態欄位51中文件數據有效位60被設置為「真」,則完整性校驗.校驗和.文件都有效。
完整性校驗.尾標引用子欄位包括完整性校驗欄位47的全部16位。如果在屬性欄位49中文件尾標存在位52被設置為「真」,它被用在計算文件尾標45的值。
在完成對FFS頭欄位的初始化之後,在框104通過將文件頭有效位59設置為「真」,將新文件被標記為完成。這產生狀態=11111100b,如圖5中的頭有效狀態76所示,其指示頭構建完成,但是文件數據還沒有寫入。這具有從FV自由空間28「主張」文件的全部長度的效果。一旦文件頭有效位59被設置為「真」,不再對名稱欄位46、類型欄位48、屬性欄位49、大小欄位50或者完整性校驗.校驗和.頭值作出改變。
當處於這種狀態時,文件數據、完整性校驗.校驗和.文件值和文件尾標(如果適當的話)在框106被寫入FV22,如數據78和可選尾標79所示。文件尾標是否寫入取決於屬性欄位49中的文件尾標存在位52的狀態——如果該值為「真」則寫入,如果該值為「假」則不寫入。被用於文件完整性校驗的文件尾標跟隨在數據之後,並包括FV22中文件的映像最後兩個字節。
一旦在框106寫入了適當的數據,則在框108可以進行可選的完整性校驗。有各種可被用於該目的的本領域中公知的文件或數據完整性校驗。例如,如果文件的原映像可用,則可以在原映像和被寫入的映像(即,剛剛被寫入FV 22中的文件版本)之間進行逐位的比較或者校驗和比較。在一些情況下,原映像可能不可用,例如在從之後就被刷新的緩衝器寫入文件數據的情況下。在這種情況下,可以通過提供一些原文件特有的指標(例如,校驗和值)來進行文件完整性驗證,所述指標能夠與新近被寫入的文件中包含的類似指標相比較。
文件創建處理在框110完成,其中文件數據有效位60被設置為「真」,指示文件數據是有效的。這產生狀態=11111000b,如圖5中文件數據有效狀態80所示。
文件刪除除了文件創建,文件可以通過對狀態欄位51的最小單位的改變而被刪除。任何文件頭有效位59被設置為「真」並且文件刪除位62被設置為「假」的文件都作為刪除的候選者。為了刪除一個文件,將文件刪除位62設置為「真」,如圖6所示。如前所述,該位向「真」狀態的轉換必須是最小單位的並且在作出向FV 22的任何寫入之前完成。這產生狀態=1110xx00b,如已刪除文件狀態82所示,其指示文件被標記為已刪除。這裡圖中的「x」指示該值可以是1或者0,這取決於當前的狀態。即使文件被標記為已刪除,它的頭仍然有效,但只是文件大小欄位50被用於在FV22中定位下一個文件的起始位置。
文件更新固件文件系統提供另一個特徵是更新已有文件的能力。文件更新是文件創建的一種特殊情況,其中要被添加的文件已經存在於固件卷中。簡單地說,更新處理包括將文件的一個新的(更新的)版本透明地寫入固件卷的自由空間部分,對FV文件頭數據進行最小單位改變以同時使新文件有效和使原始文件無效,然後將原始文件標記為已刪除。當進行該項工作時,兩個文件的狀態欄位51中的狀態位都被改變,以預定順序一次改變一位,所述預定順序使得在更新過程中的例如電源故障的異常事件中能夠完全恢復。因此,任何給定時間兩個文件中只有一個文件是有效的,或者是已更新的文件(例如,文件X』)或者是原始文件(例如,文件X)。
參照圖7-9,固件文件系統的文件更新的一個實施例如下進行,所述實施例中包括有文件頭84和文件數據86的原始文件X被更新為文件X』。該處理開始於圖7的框112,其中在要被更新的文件(原始文件X)的文件頭(84)中文件標記更新位61被設置為「真」。該位向「真」狀態的轉換必須是最小單位的並且在向FV 22作出任何其它寫入之前完全完成。這產生狀態=11110000b,其指示文件被標記要更新,如圖8中文件標記更新狀態88所示。這種狀態下只要在固件卷中沒有具有相同名稱並且狀態=111110xx的其它文件,則文件保持有效。
接下來,在框114,以與以上參照圖4-5以及圖3的處理框100、102、104、106、108以及110所討論的相同的方式創建新的更新文件,文件X』。這包括創建和初始化新文件頭90中的欄位並將該文件的已更新的映像寫入到包括文件數據92的存儲器的一部分中。一旦使新文件有效之後,如文件數據有效狀態80所示,已經被標記為更新的原始文件變得無效。如以上所討論的,這種情況的發生是由於現在在FV 22中有具有與原始文件相同的名稱和不等於111110xxb的狀態的另一個文件。寫入新文件頭90的狀態欄位51中文件數據有效位的動作具有使原始文件X無效的附加效果。文件更新處理在框116完成,其中在原始文件的文件頭(文件頭84)中將文件已刪除位62設置為「真」,如圖9中文件已刪除狀態94所示。
填充文件在固件文件系統之下,可以使用各種文件類型。每個文件的類型由該文件的頭的類型欄位48中的值來標識。填充文件被包括在這些不同類型的文件之間。填充文件從其普遍使用之一獲得其名稱。它可以被用來填充在存儲介質中跟隨其後的文件的位置。這可能因為很多原因而作出,所述原因包括在FV中固定文件的位置、消耗卷頂部文件(Volume Top File)(添加在存儲空間的末尾處以完全填滿FV的文件)之前的空間以及保證文件的數據對齊以符合屬性欄位49的數據對齊子欄位55中設置的對齊位所規定的對齊標準。填充文件還可以被用於進行文件更新操作,其中如以下所述,固件卷內多個文件以鎖步(lockstep)被更新。
任何有效(未被刪除或者無效的)文件的正常狀態是指其頭和數據都是有效的。這通過將狀態欄位51中的狀態位設置為狀態=11111000b來指示。填充文件與所有其它類型的文件的不同之處在於任何這種狀態的填充文件不應具有寫入其數據區的任何數據。它實質上是一個有著自由空間的文件。另外,對於填充文件,屬性欄位49的文件尾標存在位52必須被清除。該限制是因為如果該位被設置了,則不可能從該填充文件回收自由空間。由於填充文件的數據區包括自由空間,所以該文件的擴展校驗只是簡單地對任何非自由數據的校驗。
由於填充文件的數據區沒有被使用,所以如果可能,希望回收利用該自由空間。這是通過使用填充文件的兩個狀態位實現的。由於狀態=11111000b的填充文件的數據區保證是未被使用的自由空間,所以文件標記更新位61的傳統使用(即,如以上的使用)沒有意義。在填充文件中,該位的意義被重載以指示該數據區不是未被使用的自由空間,而是可能已經寫入了一些數據。這是回收填充文件中包含的自由空間的關鍵。
參照圖10,填充文件內包含的自由空間可以通過進行以下處理被回收。該處理開始於框120,其中在填充文件的頭中文件標記更新位61被設置為「真」。如前所述,該位以及填充文件頭中的其它位向「真」狀態的轉換必須是最小單位的並且在作出向固件卷的任何其它寫入之前全部完成。這產生狀態=11110000b,其指示填充文件的數據區不保證是未被使用的自由空間。
接下來,在框122,創建完整的新文件並寫入該填充文件的數據區(即,自由空間)。如果新文件不具有任何特殊的對齊要求,則它被創建在填充文件內的最低地址處。如果有對齊要求,則可能必須將所希望的文件置於另一個填充文件之前,所有都被寫入原始填充文件的數據區。無論如何,新文件必須完全被寫入,包括文件頭和數據。寫入該文件的狀態位使得狀態=11111000b。由於該新文件的頭(以及從而狀態欄位)實際是該填充文件的數據區的一部分,其還不能作為FFS的部分而可見。
如框124所提出的,如果在框122中創建的新文件沒有完全填滿填充文件的數據區,會需要創建其它填充文件以填滿該空間。除了該新填充文件的頭的開始跟隨在剛剛創建的文件的數據之後以外,該文件以與框122相同的方式被創建。
處理完成於框126,其中原始填充文件中的文件頭無效位63被設置為「真」。這產生狀態=11010000b,其指示該填充文件的頭是無效的。由於填充文件的頭現在是無效的,所以填充文件的頭中的長度欄位也不再有效。其效果是FFS會只跳過該填充文件的頭並在之前的該填充文件的數據區中查找其它文件頭。由於新文件的頭存在於該位置處,所以它被正確地解釋為有效的文件。
利用填充文件的文件更新利用填充文件自由空間的文件更新非常類似於以上所討論的正常文件更新處理,只是該被 更新文件被寫入填充文件的「自由」空間而不是「正常的」自由空間28。參照圖11的流程圖,利用填充文件的文件更新如下進行。該處理開始於框130,其中在該填充文件的頭中文件標記更新位61被設置為「真」。這產生狀態=11110000b,其指示該填充文件的數據區不保證是未被使用的自由空間。
接下來,在框132,在該填充文件的數據區(自由空間)中在其最低位置處(在其頭之後)創建完整的新文件。如果新文件有特殊的對齊要求,則必須以以上參照圖10的框122所討論的相同的方式被處理。該新文件必須全部被寫入,包括文件頭和數據。寫入該新文件的文件頭的狀態位,使得指示狀態=11111000b。由於它實際是填充文件的數據區的一部分,所以它還不能作為FFS的部分而可見。
如果在框132中創建的新文件沒有完全填滿該填充文件的數據區,則如框134所提供的,必須創建另一個填充文件以填滿該空間。該文件以與框132中相同的方式創建,除了該新填充文件的頭的開始跟隨在新創建的文件的數據之後。然後在框136中被選中要更新的原始文件中將文件標記更新位61設置為「真」。
接下來,在框138,在原始填充文件中將文件頭無效位63設置為「真」。這產生狀態=11010000b,其指示該填充文件的頭是無效的。由於填充文件的頭現在是無效的,所以該填充文件的頭中的長度欄位也不再有效。其效果是FFS將只跳過該填充文件的頭並在之前的該填充文件的數據區中的查找其它文件頭。由於新文件的頭存在於該位置處,所以其被正確地解釋為有效的文件。處理完成於框140,其中被選中要更新的原始文件被刪除。
對多個文件的最小單位的更新本發明的一個重要方面在於其能夠以使得在更新過程中的諸如電源故障異常事件中能夠完全恢復的方式最小單位地更新多個FFS文件。例如,在更新處理中,新數據被寫入FV。如果在該處理中由於電源系統故障或者其它系統故障發生寫失敗,則FFS能夠被保留在非一致(inconsistent)狀態。但是,在狀態位和完整性校驗欄位的使用中,這些類型的故障都有FFS來檢測,FFS然後嘗試或者在發生故障的點繼續更新處理,或者將固件文件回復到開始更新處理之前的它們的原始狀態。
對固件文件系統中的多個文件的最小單位更新示出在圖12-15中。在鎖步中,最小單位更新同時在FV中更新多個文件。如果在最小單位更新過程中發生系統故障,則固件文件系統將保持或者一整套要被更新的舊的固件文件或者一整套新的已更新固件文件。最小單位更新防止固件卷在固件文件更新處理過程中在系統故障之後其被更新的文件是新舊版本的混合。應該意識到,在最小單位更新過程中,不是FV中的所有固件文件都必須被更新。一般,最小單位更新可以對同一FV中的兩個或者多個文件執行。在下述示例中,如果兩個文件被最小單位地更新,則必須利用分別的新文件替代每個已有的文件。一般,新文件的數目應等於或者大於要被最小單位地更新的原始文件的數目。在其中新文件多於已有文件的情況下,多餘的新文件作為新文件而不是已更新文件被簡單地添加到FV中。
最小單位地更新多個文件涉及基本上類似於以上參照圖11討論的文件更新處理的一種處理,只是在這種情況下,多個原始文件不是單個文件利用被寫入填充文件的數據區的固件數據被更新。參照圖13,假設固件卷160的初始配置包括兩個文件,X和Y,這兩個文件要被分別更新為X』和Y』。文件X包括文件頭162和數據區164,而文件Y包括文件頭166和數據區168。設置各個文件頭162和166的狀態欄位51,使得狀態=11111000b,其指示文件X和文件Y的每一個都是有效的,如分別由文件數據有效狀態80X和80Y所示。
參照圖12的流程圖,最小單位地更新多個文件的處理開始於框142,其中以與以上參照圖3-5討論的用於創建文件相同的方式,在緊跟佔用了最高地址空間(即,自由空間28的最低地址)的FFS文件的末尾之後的字節邊界處創建一個填充文件。在該填充文件被創建之後,其可以包括填充文件頭170和數據區172。理想地,該填充文件的大小應該使得它能夠容納被更新文件映像和它們對應的文件頭的大小的和。以這種方式,實現了最大存儲器利用。初始地,該填充文件的狀態應為11111000x,指示該填充文件數據是有效的,如圖13中文件數據有效狀態80P所示。
接下來,在框144,在填充文件的頭中文件標記更新位61被設置為「真」。圖13和14中的文件標記更新狀態88P示出了這種情況。此時,在框146,要被更新的文件的每一個的新文件以順序的方式(即,下一個文件緊跟最近寫入的文件之後開始)被寫入到填充文件的數據區172中。這包括寫入每個文件的頭和數據。文件的數據應包括對應於固件的已更新部分的文件映像,所述固件的已更新部分被計劃要取代存儲在正更新的文件中的原始固件。如圖14所示,新文件X』和Y』在該操作過程中被寫入,其中文件X』包括文件頭174和數據區176,在該數據區176中,它的已更新固件的映像被寫入,而文件Y』包括文件頭178和數據區180,在該數據區180中,它的已更新固件的映像被寫入。與以上所討論的有點類似,這兩個文件此時由於填充文件仍然被標記為有效而對FFS「隱藏」。
在創建了已更新文件之後,在框148,在一個或者多個已更新文件上可以進行可選的數據完整性校驗。如上所述,數據完整性校驗可以包括新寫入的文件映像與其源文件之間的逐位的比較、校驗和比較或者本領域中公知的另一類型的文件完整性校驗。
接下來邏輯進行到框150,其中在被選中要更新的每個原始文件的頭中將文件標記更新位61設置為「真」。原始文件X和Y的狀態的每一個現在都=11110000x,如圖14和15中文件標記更新狀態88X和88Y所示。接下來,在框152,在現在具有狀態=11010000x的原始填充文件中將文件頭無效位63設置為「真」,如圖15中的文件頭無效狀態182所示。這使填充文件頭無效,使得新被更新的文件(例如,文件X』和Y』)能夠變得對FFS可見。該可見性是以以下方式實現的。儘管填充文件頭無效,但是它仍然被用來提供位置(通過頭的標稱大小,例如,6位元組)。因此,當FFS讀取填充文件頭170時,其識別出該頭是無效的並且向前移動到被寫入該填充文件的數據區的第一個被更新文件(在該示例中,文件X』)的文件頭的開始處。該文件頭同樣包含(經由其大小欄位50)被FFS用來確定FV中下一個文件的頭的開始位置的信息。
對多個文件的最小單位更新完成於框154,其中通過將被選中要更新的每個原始文件的文件已刪除位62設置為「真」而將原始文件刪除。這將這些文件的狀態改變為11100000x,如圖15中文件已刪除狀態82X和82Y所示。
上述處理確保了以鎖步進行對多個文件的刪除,以便保證FFS或者使用文件的原始版本或者使用文件的被更新版本,而沒有機會在兩個版本之間誤配。在異常的系統事件中,可以校驗不同文件的頭以確定當發生系統異常時這些文件的每一個處於哪種狀態。這提供了一種恢復途徑,該途徑使得文件更新處理能夠在其被中斷處重新開始直到文件更新成功地完成。與現有技術系統相比,由於FV總是包含一套有效的固件文件,所以實現本發明的計算機系統應該不會在固件更新處理過程中在系統異常事件中不能重新啟動。
用於實現本發明的示例性計算機系統參照圖16,示出了一般的傳統個人計算機200,該計算機200適於結合實施本發明來使用。該系統可以利用本地平臺固件構架來實現(例如,所有固件利用例如快閃記憶體設備和可選ROM的固件存儲設備被存儲在計算機本地),或者也可以實現分布式平臺固件構件,如圖16所示。本發明還可以實現在其它計算機系統上,包括工作站、筆記本和計算機伺服器。
個人計算機200包括處理器機箱202,在該機箱202中安裝有軟盤驅動204、硬碟驅動206、其上組裝有合適的集成電路的主板208以及電源(未示出),其中所述集成電路包括一個或者多個微處理器和存儲器模塊(兩者都未示出),這些都是本領域的普通技術人員所公知的。主板208還包括本地固件存儲設備210(例如,快閃記憶體),在該存儲設備210上存儲有BIOS固件的基本部分。為了有利於訪問經由網絡214從遠程固件存儲設備212取回的BIOS固件的部分,個人計算機200包括網絡接口卡116或者置於主板208中的等效的電路。網絡214可以包括LAN、WAN和/或網際網路,並且可以在個人計算機200和遠程固件存儲設備212之間提供有線或者無線連接。
監視器218會被包括,用於顯示由個人計算機所運行的軟體程序所生成的圖形和文本, 其中所述圖形和文本一般在固件裝載/執行的POST(加電自檢)測試以及其它方面的過程中會被顯示。滑鼠220(或者其它指示設備)連接到處理器機箱202的後部的串行埠(或者連接到總線埠),並且來自滑鼠220的信號被傳輸到主板208以控制顯示器上的光標和選擇由執行於該個人計算機上的軟體程序顯示在監視器218上的文本、菜單選項和圖形組成部分。另外,鍵盤222耦合到主板,用於用戶輸入影響執行於該個人計算機上的軟體程序的運行的文本和命令。
個人計算機200還可選地包括光碟只讀存儲器(CD-ROM)驅動器224,其中可以插入CD-ROM盤,以便該盤上的可執行文件和數據能夠被讀取用於傳送到個人計算機200的存儲器中以及/或者硬碟驅動器206上的存儲設備中。如果基本BIOS固件存儲在可重寫設備上,例如快閃記憶體,則用於更新BIOS固件的基本部分的機器指令可以存儲在CD-ROM盤或者軟盤上,並且可以被計算機的處理器讀取和處理以將存儲在快閃記憶體上的BIOS固件重寫。可更新BIOS固件還可以通過網絡214被裝載。
類似於計算機200的機器可以被用於系統中的各種伺服器。但是,優選,為網絡、文件和應用伺服器功能專門設計的機器與此相同地被實現。
一般,從運行於計算機系統上的硬體和軟體部件的角度來說,那些部件應不能區別存儲在本地和遠程存儲設備上的BIOS固件的分立的部分。除了用於測試系統完整性的BIOS固件的裝載和起始執行確定/驗證系統配置和其它OS之前的啟動處理以外,實現了本發明的計算機系統應以與使用相同部件並運行相同軟體的傳統計算機系統同樣的方式來工作。
儘管結合實施本發明的優選形式和對其的修改對本發明進行了描述,但是本領域的技術人員應該理解,在所附權利要求的範圍內可以對本發明作出很多其它修改。因此,本發明的範圍並不希望以任何形式被限制於上述描述,而是由對所附權利要求的整體引用來確定。
權利要求
1.一種用於最小單位地更新原始的平臺固件數據的部分的方法,包括將要替換所述原始的平臺固件數據的部分的已更新固件數據寫入固件存儲設備;以及最小單位地修改固件配置數據以指示所述已更新固件數據要用於替代正被更新的所述原始的平臺固件數據的部分,使得在對所述固件配置數據的所述最小單位修改之前只有全部所述原始的平臺固件數據的部分是有效的,而在對所述固件配置數據的所述最小單位修改之後只有全部所述已更新固件數據是有效的。
2.如權利要求1所述的方法,還包括執行對所述已更新固件數據的完整性校驗以驗證所述已更新固件數據是有效的。
3.如權利要求1所述的方法,其中所述已更新固件數據以如下被寫入所述固件存儲設備,即所述已更新固件數據對固件管理系統不可見,直到已經作出對所述固件配置數據的最小單位修改,其中所述固件管理系統被用來訪問存儲在所述固件存儲設備的固件數據。
4.如權利要求1所述的方法,還包括響應於阻止完成升級處理的系統異常,使能對在所述升級處理過程中要被更新的所述原始的固件數據的部分的完全恢復。
5.如權利要求1所述的方法,還包括在所述原始的平臺固件的部分已經被升級之後將其刪除。
6.如權利要求1所述的方法,其中所述原始平臺固件數據和所述已更新固件數據分別包括一個或者多個固件文件,每個固件文件包括在所述更新處理中被修改以跟蹤該文件的當前狀態的頭數據。
7.如權利要求6所述的方法,其中所述原始平臺固件數據包括多個固件文件,每個固件文件還包括各自的數據區,所述方法還包括創建具有頭和數據區的第一文件;將所述已更新固件數據作為多個文件寫入所述第一文件的所述數據區,被寫入的每個文件包括各自的頭和數據區,其中所述數據區中包含了該文件的已更新固件數據;修改對應於所述原始的平臺固件數據的部分的固件文件的頭中的數據,以指示這些固件文件要被更新;以及修改所述第一文件的所述頭中的數據,以同時使每一個所述原始固件文件無效以及使每一個所述已更新固件文件有效。
8.如權利要求1所述的方法,其中所述固件存儲設備包括快閃記憶體設備。
9.一種用於最小單位地更新多個原始平臺固件文件的方法,包括創建臨時文件;將對應於多個已更新平臺固件文件的數據寫入所述臨時文件,其中所述多個已更新平臺固件文件包括所述多個原始平臺固件文件的新版本;以及最小單位地修改平臺固件文件配置信息,以指示所述已更新平臺固件文件要用於替代所述原始平臺固件文件,使得在更新處理的過程中的任何時間點只有全部所述原始平臺固件文件或者只有全部所述已更新平臺固件文件是有效的。
10.如權利要求9所述的方法,其中每個平臺固件文件包括文件頭和其中寫入了對應於該文件的平臺固件數據的數據區,並且其中每個文件頭包括被用來在所述更新處理過程中跟蹤每個平臺固件文件的當前狀態的多個狀態位。
11.如權利要求10所述的方法,其中所述臨時文件是通過創建文件頭而被創建的,其中所述文件頭標識了所述臨時文件包括大小能夠容納全部所述已更新平臺固件文件的數據區,所述數據區被映射到用來存儲所述原始平臺固件文件和已更新平臺固件文件的固件存儲設備上的存儲區。
12.如權利要求11所述的方法,還包括改變所述臨時文件的文件頭中的狀態位,以指示在對應於所述已更新平臺固件文件的數據被寫入所述臨時文件的所述數據區之後,所述臨時文件是無效的。
13.如權利要求12所述的方法,其中文件系統被用來訪問所述平臺固件文件,並且在所述狀態位被改變的時候之前所述已更新固件文件對所述文件系統是不可見的,而在所述狀態位被改變之後變得對所述文件系統是可見的。
14.如權利要求13所述的方法,其中每個所述原始平臺固件文件具有名稱,所述名稱被對應的已更新平臺固件文件所共享,所述方法還包括改變每個所述原始平臺固件文件中的所述狀態位,以指示它們要被更新;設置每個所述已更新平臺固件文件中的所述狀態位,以指示它們是有效的;其中在對所述文件系統變得可見後,所述已更新平臺文件的所述文件頭中的所述狀態位和所述原始平臺固件文件中的所述狀態位一起同時通知所述文件系統所述原始平臺文件是無效的而所述已更新平臺文件是有效的。
15.如權利要求9所述的方法,還包括在最小單位地修改所述平臺固件文件配置信息以指示所述已更新平臺固件文件要用於替代所述原始平臺固件之前,進行對所述已更新平臺固件文件的完整性校驗,以驗證所述已更新固件是有效的。
16.如權利要求9所述的方法,還包括響應於阻止完成升級處理的系統異常,使能對在所述升級處理過程中要被更新的所述原始的固件數據的部分的完全恢復。
17.如權利要求10所述的方法,還包括設置所述原始平臺固件文件的每個文件頭中的所述狀態位,以指示所述文件在所述升級處理已經完成之後被刪除。
18.一種機器可讀介質,其上存儲有多個機器可執行指令,所述指令當被機器執行時,通過進行以下操作,最小單位地更新被分成多套固件代碼的原始的平臺固件數據的部分將要替換所述原始的平臺固件數據的部分的已更新固件數據寫入固件存儲設備;以及最小單位地修改固件配置數據以指示所述已更新具有數據要用於替代正被更新的所述原始的平臺固件數據的部分,使得在對所述固件配置數據的所述最小單位修改之前只有全部所述原始的平臺固件數據的部分是有效的,而在對所述固件配置數據的所述最小單位修改之後只有全部所述已更新固件數據是有效的。
19.如權利要求18所述的機器可讀介質,其中對所述多個機器指令的執行還進行了對所述已更新固件數據進行完整性校驗以驗證所述已更新固件數據有效的操作。
20.如權利要求18所述的機器可讀介質,其中所述多個機器指令的執行還使能所述機器響應於阻止完成所述升級處理的機器異常,對在所述升級處理過程中要被更新的所述原始的固件數據的部分的完全恢復。
21.一種機器可讀介質,其上存儲有多個機器可執行指令,所述指令當被機器執行時,通過進行以下操作,最小單位地更新多個原始平臺固件文件創建臨時文件;將對應於多個已更新平臺固件文件的數據寫入所述臨時文件,其中所述多個已更新平臺固件文件包括所述多個原始平臺固件文件的新版本;以及最小單位地修改平臺固件文件配置信息,以指示所述已更新平臺固件文件要用於替代所述原始平臺固件文件,使得在更新處理的過程中的任何時間點只有全部所述原始平臺固件文件或者只有全部所述已更新平臺固件文件是有效的。
22.如權利要求21所述的機器可讀介質,其中每個平臺固件文件包括文件頭和其中寫入了對應於該文件的平臺固件數據的數據區,並且其中每個文件頭包括被用來在所述更新處理過程中跟蹤每個平臺固件文件的當前狀態的多個狀態位。
23.如權利要求22所述的機器可讀介質,其中所述臨時文件是通過創建文件頭而被創建的,其中所述文件頭標識了所述臨時文件包括大小能夠容納全部所述已更新平臺固件文件的數據區,所述數據區被映射到用來存儲所述原始平臺固件文件和已更新平臺固件文件的固件存儲設備上的存儲區。
24.如權利要求23所述的機器可讀介質,其中所述多個機器指令的執行還進行了改變所述臨時文件的文件頭中的狀態位的操作,以指示在對應於所述已更新平臺固件文件的數據被寫入所述臨時文件的所述數據區之後所述臨時文件是無效的。
25.如權利要求24所述的機器可讀介質,其中文件系統被用來訪問所述平臺固件文件,並且在所述狀態位被改變的時候之前所述已更新固件文件對所述文件系統是不可見的,而在所述狀態位被改變之後變得對所述文件系統是可見的。
26.如權利要求25所述的機器可讀介質,其中每個原始平臺固件文件具有名稱,所述名稱被對應的已更新平臺固件文件所共享,其中所述多個機器指令的執行還進行以下操作改變每個所述原始平臺固件文件中的所述狀態位,以指示它們要被更新;設置每個所述已更新平臺固件文件中的所述狀態位,以指示它們是有效的;其中在對所述文件系統變得可見後,所述已更新平臺文件的所述文件頭中的所述狀態位和所述原始平臺固件文件中的所述狀態位一起同時通知所述文件系統所述原始平臺文件是無效的而所述已更新平臺文件是有效的。
27.如權利要求21所述的機器可讀介質,其中所述多個機器指令的執行還在最小單位地修改所述平臺固件文件配置信息以指示所述已更新平臺固件文件要用於替代所述原始平臺固件之前,進行了對所述已更新平臺固件文件校驗的操作,以驗證所述已更新固件文件是有效的。
28.如權利要求21所述的機器可讀介質,其中所述多個機器指令的執行還進行了響應於阻止完成升級處理的系統異常,使能對在所述升級處理過程中要被更新的所述原始的固件數據的部分的完全恢復的操作。
29.如權利要求22所述的機器可讀介質,其中所述多個機器指令的執行還進行了設置所述原始平臺固件文件的每個文件頭中的所述狀態位的操作,以指示所述文件在所述升級處理已經完成之後被刪除。
全文摘要
本發明公開了一種用於更新平臺固件的方法。這種更新平臺固件的能力利用了被稱為固件卷(FV)的用於固件存儲設備的標準軟體抽象,所述固件卷通過固件文件系統(FFS)被管理。FFS使固件文件能獨立地被創建、刪除和更新。FFS還通過利用存儲在每個固件文件的文件頭中的狀態位管理文件狀態信息使得能夠最小單位地更新多個固件文件,由此,對單個狀態位的最小單位的改變同時引起FFS使用已更新的一套固件文件來替代原始的一套固件文件。
文檔編號G06F9/445GK1561483SQ02819244
公開日2005年1月5日 申請日期2002年9月27日 優先權日2001年9月28日
發明者柯克·D·布倫諾克, 威廉·A·史蒂文斯 申請人:英特爾公司