最小单位地更新多个文件的方法

文档序号:6428191阅读:294来源:国知局
专利名称:最小单位地更新多个文件的方法
技术领域
本发明一般地涉及计算机系统,具体而言涉及平台固件的管理。
背景技术
计算机平台固件在计算机系统初始化过程中被用来验证系统完整性和配置。它通常还提供在那些计算机系统的硬件和软件器件之间的基础低级接口,使得能够通过执行包含在运行于该计算机系统上的计算机程序中的更高级的软件指令实现特定的硬件功能。在计算机中,固件的主要部分被通称为计算机系统的基本输入/输出系统(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·史蒂文斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1