背景技术
固件是驻留于一件硬件中并负责硬件功能的主要部分且一般地被视为是硬件的组成部分的软件代码。通常,固件作为二进制信息被存储在某种形式的非易失性存储器组件中,其中能够用十六进制、八进制及其他数基来表示二进制。固件的组成部分可以是可执行程序,诸如上电自检(POST)、基本输入/输出软件(BIOS)、配置实用工具(utility)等,或者其可以是数据表,例如硬文件的几何结构的描述、将与通用异步收发机(UART)一起使用以产生不同波特率的寄存器值等。固件通常被存储在当电源被去除或丢失时不会失去其存储能力的特定类型的存储器芯片中。该非易失性存储器被分类为“只读”存储器(ROM),因为用户在正常操作期间不能改变存储在那里的信息。一般地,在“工厂”处对ROM进行编程,即通过ROM制造商利用由客户提供的信息来进行编程。被用来存储固件的存储器器件的基本类型被称为可编程只读存储器(PROM),其可由任何技术人员利用例如编程控制台来编程。基本PROM接收固件的一个版本(version),并且固件代码被“烧制”到PROM中且不能被改变。为了更新固件,必须将PROM在物理上从设备移除,并且用包含已升级固件的新PROM来替换。存储器器件技术的改进已经提供了PROM的变体,诸如可擦除可编程只读存储器(EPROM)和电可擦除可编程只读存储器(EEPROM)器件,其能够在不需要将其从电路去除的情况下利用电信号来擦除。
许多产品经历许多固件版本,其修正固件缺陷、补偿硬件或操作系统错误或引入新特征。只要子系统的硬件架构基本上不改变且每个新固件修订能够识别并处理硬件修订等级中的差异,则对于用升级固件图像来替换目前已安装固件图像的快闪(flash)实用工具而言,事情相对简单。快闪实用工具可以假设构建的ID、诸如QYKT24AUS、QYKT25AUS等的演进是有效的,并且可以在较新的修订上应用较旧的修订,即快闪的等级可以回退,虽然具有可能损失功能和重新引入固件缺陷。
然而,产品族的寿命周期中的某些事件破坏了这些简单的假设。这些事件可以包括:
(1)产品架构的重大改变,例如由于成本降低改变,使得固件的较旧版本并未识别到较新的硬件特征并且因此不正确地对待它们。
(2)一个产品族向2个或更多个相关族的分叉,可能在位于例如远方城市中的两个不同工程团队的控制下,其中固件可能看起来是相似的,但实际上已针对特定的硬件集合被自定义。
(3)两个产品族的会聚(从固件角度出发)。会聚能够被用作成本降低工具,其中两件类似的固件存在并且能够被组合成在两个硬件平台上工作但仅要求单个开发组对其进行维护和测试的单个固件图像。
(4)产品的特性、例如CMOS存储器中的配置信息的布局以这样的方式改变,使得固件的较旧水平将会对其误解释。
一般地,具有可升级固件的系统和子系统通常要求某种验证以确定候选图像对现有装置的可应用性。常规方法常常只不过是验证以下各项中的某些或全部:(i)在候选图像中存在公司的版权声明;(ii)在候选图像中存在可识别形式和位置的零件号码;(iii)在候选图像中以可识别形式和位置存在“类型码”,并且该类型码指示旧图像和新图像是兼容的(类型码识别硬件的兼容类型,并且可以应用于整体产品或产品内的子系统);(iv)在候选图像中存在修订等级,并且用户正在尝试在较旧图像上应用较新图像;以及(v)候选图像已被破坏,例如通过使用校验和或CRC来验证的。以上项目(i)、(ii)和(iv)对帮助验证固件图像之间的兼容性做的很少(如果有的话)。它们允许软件实用工具验证固件图像来自单个供应商并且用户并不在尝试回退到较旧固件图像。即使在那时,有时也可能期望回退,使得通常提供具有用以超越保护的机制的警告。
有时使用类型码来指示固件图像之间的兼容性,但是此类实践具有限制。常规技术并未利用这种类型码,在这种情况下,可能无意中将错误类型的固件图像应用于产品,或者假设只有同一类型码内的固件图像是兼容的。另外,常规技术将常常要求在候选图像中的单个类型码与已安装图像中的单个类型码之间存在精确的匹配。此外,这些技术还可以一般地假设呈现与已安装固件图像相同的类型码的任何新固件图像是兼容的,并且可以用来更新已安装图像。这些“简单”方案常常在其中可能出现复杂情形的实际工作中引起问题。
具体实施方式
本发明的一个实施例提供了一种确定固件版本的兼容性的方法。该方法包括下载用于特定产品的固件图像的候选版本、通过下载用于该特定产品的附加固件兼容性元数据来更新不完整的固件兼容性元数据、并使用经更新的固件兼容性元数据来确定固件图像的候选版本是否与安装在特定产品内的固件图像的当前版本兼容。
本发明的方法的实施例可以在能够用不同的固件图像覆写当前固件图像的快闪实用工具(应用程序)中实现。然而,根据本发明的实施例,快闪实用工具可以负责处理、更新和使用固件兼容性元数据。虽然可以将固件兼容性元数据连同固件图像一起存储在例如类似于EPROM或EEPROM的非易失性存储器器件中,但快闪实用工具能够对固件兼容性元数据进行读和写。
固件图像的候选版本可以例如从由特定产品的制造商维护的网站下载。通常,候选版本将是从安装于特定产品内的固件图像的当前版本的升级。然而,此类网站还可以保持许多版本,包括固件图像的当前和先前版本。先前版本对于使从当前版本到期望版本的兼容路径等级返回(back-leveling)或实现有帮助。
本发明的实施例认识到连同固件一起存储的固件兼容性元数据可能是不完整的。例如,元数据可能是与当前固件图像同时获得的,并且用户现在正在下载更新近的候选版本。相应地,较早的元数据并未指示该更新近的候选版本是否与当前固件图像兼容。此外,用于固件的一个或多个候选版本的当前兼容性元数据也可能由于测试限制而是不完整的。因此,本发明的实施例包括通过下载用于特定产品的附加固件兼容性元数据来更新不完整的固件兼容性元数据。可以从各种源获得该元数据,诸如通过测试实验室运行的网站、用户群组、固件开发者或产品制造商。此外,元数据可以采取各种形式,诸如用可扩展标记语言。在第一选项中,用较新文件来替换固件兼容性元数据的整个文件。在第二选项中,快闪实用工具可以仅请求用于在与特定产品中的固件一起存储的固件兼容性元数据中当前识别到其兼容性的固件组合的附加元数据。在第三选项中,快闪实用工具可以仅请求或下载用于已被识别或下载的特定候选固件图像的兼容性元数据。在任何的这些选项中,可以与固件本身分开地下载元数据,并且还可以在不同的时间从不同的源下载。
经更新的固件兼容性元数据优选地包括固件图像的候选版本与当前版本之间的兼容性或不兼容性的指示。替换地,经更新的固件兼容性元数据可以包括两个固件版本之间的兼容固件的已证明序列的指示。换言之,如果不知道从版本D到版本G的直接升级是兼容的还是不兼容的,则仍可以存在足够的元数据来确定可以通过连续地从版本D升级至版本F且然后进一步从版本F升级至版本G来获得版本G。
本发明的实施例可以在确定候选固件的兼容性之后包括进一步的动作。例如,该方法可以在经更新的固件兼容性元数据指示候选固件图像与当前固件图像不兼容的情况下,防止候选固件图像的安装。同样地,该方法可以在经更新的固件兼容性元数据指示候选固件图像与当前固件图像兼容的情况下允许或发起候选固件图像的安装。
此外,该方法可以包括确定从当前固件版本至期望固件版本的路径。该路径将包括固件版本的序列,其中固件兼容性元数据指示该序列中的每个后续固件版本与该序列中的每个先前固件版本兼容。该路径可以允许从当前安装的固件版本到更新近的固件版本的升级,或者该路径可以允许从当前安装的固件版本到先前固件版本的回退或等级返回。可选地,该方法可以包括自动地下载所需的固件图像的中间版本以便遵循兼容升级或等级返回序列。
在另一实施例中,可以将固件兼容性元数据存储为已知兼容性路径的矩阵。无论那些路径是否是从一个版本到另一版本的直接路径,或者在路径经历中间版本的情况下,可以将元数据表示为兼容性矩阵。矩阵可以包括任何已知的兼容性或不兼容性数据,但是矩阵的各部分也可以是未知的。随着越来越多的兼容性体验或测试完成,矩阵可能由于固件兼容性元数据的周期性更新而随时间的推移变得更加完整。
本发明的另一实施例提供了一种计算机程序产品,其包括在有形计算机可用存储介质上体现的计算机可用程序代码。该计算机程序产品包括用于下载用于特定产品的固件图像的候选版本的计算机可用程序代码、用于通过下载用于该特定产品的附加固件兼容性元数据来更新不完整的固件兼容性元数据的计算机可用程序代码以及用于使用已更新固件兼容性元数据来确定固件图像的候选版本是否与安装在特定产品内的固件图像的当前版本兼容的计算机可用程序代码。应认识到的是该计算机程序产品可以包括其他计算机可用程序代码以实现本文所述的方法的任何一个或多个步骤或特征。
图1是提供用于实施本发明的适当环境的示例性数据处理系统10的简化高级框图。数据处理系统10、诸如个人计算机或服务器包括利用系统总线14互连的随机存取存储器(RAM)11、存储器控制器12和中央处理单元(CPU)13。总线控制器15提供了用于对系统总线14与输入/输出总线16之间的数据流进行仲裁的装置。数据处理系统10还包括多个I/O设备,一般地指定为18,诸如磁盘驱动和网卡以及系统固件17,其通常驻留在可编程只读存储器(PROM)器件中,诸如电可擦除可编程只读存储器(EEPROM)。应注意的是虽然已在计算机系统的背景下描述了数据处理系统10,但本发明并不预期使此实践局限于这个特定实施例。可以在任何系统和/或设备中有利地实施本发明,诸如以太网卡,其在其建立和操作阶段中利用固件。
图2是根据本发明的一个实施例的与系统固件通信的快闪实用工具应用程序的图。快闪实用工具应用程序20在数据处理系统10(在本文中另外称为产品)中运行。快闪实用工具20能够从可以存储固件兼容性元数据23的硬盘驱动或其他数据存储设备21或可以存储系统固件17和固件兼容性元数据24的EEPROM22进行读取和向其写入。在其中固件兼容性元数据被存储在硬盘驱动上的实施例中,可以将元数据调用到产品10中的处理器的RAM存储器中达升级过程的持续时间,并且然后将其从RAM存储器擦除。快闪实用工具20还能够通过全球通信网络、诸如因特网30来与web服务器40通信。可以以这种方式将候选固件图像42下载到快闪实用工具20。同样地,可以将固件兼容性元数据44下载到快闪实用工具20中以便更新存储在硬盘驱动23上的固件兼容性元数据23或存储在EEPROM22中的固件兼容性元数据24。应认识到的是可以从不同且分离的源获得候选固件图像42和固件兼容性元数据44。
图3是矩阵或表格形式的固件兼容性元数据24的图。所示元数据仅仅用于特定产品“产品XYZ”。列提供对应于候选固件版本的数据并且行提供对应于当前固件版本的数据。当已识别到候选固件版本,诸如通过将候选版本下载到快闪实用工具,并且当前固件版本也是快闪实用工具所已知的时,对应列和行的交叉点处的单元将提供可用兼容性数据,如果有的话。例如,从当前版本A(行A)到版本G(列G)的升级在点26处提供“X”,其指示候选G与当前版本A不兼容。作为另一示例,从当前版本G(行G)到版本F(列F)的等级返回在点27处被示为是兼容的(示为“√”),但是进一步到版本E(列E)的等级返回在点28处被示为是未知的(单元为空),并且到版本D(列D)的等级返回在点29处被示为不兼容。
在又一示例中,使用元数据24来识别从一个版本到另一版本的路径。如果固件的当前版本是版本C(行C)并且用户已促使快闪实用工具下载候选固件版本G(列G),则点32处的单元显示兼容性是未知的。快闪实用工具将优选不使用且可以避免使用具有未知兼容性的固件版本。然而,元数据24在点34处示出候选版本F(列F)与当前版本C(列C)是兼容的,并且在版本F变成当前版本(行F)之后,然后知道候选版本G(列G)是兼容的(参见点36)。相应地,兼容路径是从版本C到版本F且然后到版本G的序列。
图4是根据本发明的一个实施例的方法50的流程图。在步骤52中,将用于特定产品的固件图像的候选版本下载到特定产品。在步骤54中,下载用于特定产品的附加固件兼容性元数据。相应地,可以在步骤56中用附加固件兼容性元数据来更新固件兼容性元数据的不完整矩阵。在步骤58中,可以使用经更新的固件兼容性元数据来确定固件图像的候选版本是否与固件图像的当前版本兼容。
所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现在流程图和/或框图中的方框中规定的功能/动作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在此使用的术语仅是为了描述特定实施例的目的,并不旨在限制本发明。本文所使用的单数形式“一”、和“该”意在也包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件、组件和/或组,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件、组件和/或其组。术语“优选地”、“优选的”、“优选”、“可选地”、“可以”和类似术语用来指示被提到的项目、条件或步骤是本发明的可选(非必要)特征。
以下权利要求中的所有装置或步骤加功能元素的相应结构、材料、动作以及等效物(如果有的话)意在包括用于与其他要求保护的元素相结合地执行功能的任何结构、材料或动作,如具体地要求保护的那样。本发明的说明书被呈现以用于说明和描述的目的,而不是穷尽性的或将本发明限制于所公开的形式。许多修改和变体对本领域普通技术人员来说是显而易见的,而没有脱离本发明的范围和精神。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能针对具有适于所考虑的特定用途的各种修改的各种实施例来理解本发明。