掌桥专利:专业的专利平台
掌桥专利
首页

一种升级BIOS固件的方法、系统、设备及介质

文献发布时间:2023-06-19 12:10:19


一种升级BIOS固件的方法、系统、设备及介质

技术领域

本发明涉及服务器领域,更具体地,特别是指一种升级BIOS固件的方法、系统、计算机设备及可读介质。

背景技术

现行服务器,不管Intel(英特尔)还是AMD(Advanced Micro Devices,超微半导体公司)平台,均使用BIOS(Basic Input/Output System,基本输入/输出系统)固件来使能服务器。除了通过OS(Operating System,操作系统)或是UEFI(Unified ExtensibleFirmware Interface,统一可延伸固件界面)shell(外壳)相关工具来更新BIOS固件之外,一般还可以通过BMC(Baseboard Management Controller,基板管理控制器)固件来做远程BIOS固件更新,除了full(全部)BIOS固件更新之外,理论上还可以支持保留BIOS相关配置。但BIOS相关配置保留,目前都没有办法很有效的保留所有设定,往往都要通过与BIOS之间的沟通,定制可以保留的配置项,或是如果存在flash(闪存)layout(布局)的BIOS配置偏移量改变了位置,BMC在更新BIOS固件时就没有办法完全保证BIOS配置可以被保留下来。

目前的做法是通过BIOS工程师事前告知固定偏移量来找,而这样的设计迫使BMC和BIOS无法解耦,只要BIOS因为配置项更新而改变偏移量,BMC也要随着同步更新。即使通过BIOS与BMC的沟通,对BIOS配置项进行定制,也使得BMC和BIOS无法解耦,或者无法达成所有的配置项都予以保留的效果。

发明内容

有鉴于此,本发明实施例的目的在于提出一种升级BIOS固件的方法、系统、计算机设备及计算机可读存储介质,本发明通过固件卷头获取实际分区的偏移量和大小,并使用偏移量和大小对BIOS固件的配置分区进行更新从而实现了与BIOS解耦,无需因为BIOS配置分区偏移量的改变,而造成BMC在更新BIOS固件时无法保留配置,并且还可以完整的保留BIOS所有的配置项。

基于上述目的,本发明实施例的一方面提供了一种升级BIOS固件的方法,包括如下步骤:响应于对BIOS固件进行更新,开启BIOS镜像档并判断所述BIOS镜像档是否包括BIOS固件的属性;响应于所述BIOS镜像档包括BIOS固件的属性,确定所述BIOS镜像档中签名的位置,根据所述签名的位置确定固件卷头,并根据所述固件卷头获取实际分区的偏移量和大小;基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区;以及响应于所述实际分区是所述BIOS固件的配置分区,使用所述偏移量和大小对所述BIOS固件的配置分区进行更新。

在一些实施方式中,方法还包括:在所述BIOS固件中给不同的分区分配对应的标识,根据所述标识创建属性表,并将所述属性表同步到所述BIOS镜像档。

在一些实施方式中,所述确定所述BIOS镜像档中签名的位置包括:从所述BIOS镜像档的头部开始向尾部依次匹配签名,响应于匹配成功,记录所述签名在所述BIOS镜像档中所在的位置。

在一些实施方式中,所述根据所述签名的位置确定固件卷头包括:确定所述签名的映射关系,并基于所述签名的位置和所述映射关系确定所述固件卷头。

在一些实施方式中,所述基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区包括:判断所述镜像档中的属性表是否存在所述配置分区的标识。

在一些实施方式中,方法还包括:响应于存在多个BIOS镜像档,读取每个BIOS镜像档中实际分区的偏移量和大小对应的时间戳,并根据所述时间戳确定用于更新的BIOS镜像档。

在一些实施方式中,所述根据所述时间戳确定用于更新的BIOS镜像档包括:响应于更新后BIOS固件出现异常,还原更新项并再次根据所述时间戳确定新的用于更新的BIOS镜像档。

本发明实施例的另一方面,提供了一种升级BIOS固件的系统,包括:开启模块,配置用于响应于对BIOS固件进行更新,开启BIOS镜像档并判断所述BIOS镜像档是否包括BIOS固件的属性;采集模块,配置用于响应于所述BIOS镜像档包括BIOS固件的属性,确定所述BIOS镜像档中签名的位置,根据所述签名的位置确定固件卷头,并根据所述固件卷头获取实际分区的偏移量和大小;判断模块,配置用于基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区;以及执行模块,配置用于响应于所述实际分区是所述BIOS固件的配置分区,使用所述偏移量和大小对所述BIOS固件的配置分区进行更新。

本发明实施例的又一方面,还提供了一种计算机设备,包括:至少一个处理器;以及存储器,所述存储器存储有可在所述处理器上运行的计算机指令,所述指令由所述处理器执行时实现如上方法的步骤。

本发明实施例的再一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时实现如上方法步骤的计算机程序。

本发明具有以下有益技术效果:通过固件卷头获取实际分区的偏移量和大小,并使用偏移量和大小对BIOS固件的配置分区进行更新从而实现了与BIOS解耦,无需因为BIOS配置分区偏移量的改变,而造成BMC在更新BIOS固件时无法保留配置,并且还可以完整的保留BIOS所有的配置项。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为本发明提供的升级BIOS固件的方法的实施例的示意图;

图2为本发明提供的升级BIOS固件的计算机设备的实施例的硬件结构示意图;

图3为本发明提供的升级BIOS固件的计算机存储介质的实施例的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

本发明实施例的第一个方面,提出了一种升级BIOS固件的方法的实施例。图1示出的是本发明提供的升级BIOS固件的方法的实施例的示意图。如图1所示,本发明实施例包括如下步骤:

S1、响应于对BIOS固件进行更新,开启BIOS镜像档并判断所述BIOS镜像档是否包括BIOS固件的属性;

S2、响应于所述BIOS镜像档包括BIOS固件的属性,确定所述BIOS镜像档中签名的位置,根据所述签名的位置确定固件卷头,并根据所述固件卷头获取实际分区的偏移量和大小;

S3、基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区;以及

S4、响应于所述实际分区是所述BIOS固件的配置分区,使用所述偏移量和大小对所述BIOS固件的配置分区进行更新。

BIOS,即基础输入输出系统,是刻在主板ROM(Read Only Memory,只读存储器)芯片上不可篡改的启动程序,BIOS负责计算系统自检程序(POST,Power On Self Test)和系统自启动程序,因此是计算机系统启动后的第一道程式。由于不可篡改性,故程序存储在ROM芯片中,并且在断电后,依然可以维持原有设置。

BMC,即基板管理控制器,是独立于服务器系统之外的小型操作系统,是一个集成在主板上的芯片,也有产品是通过PCIE(Peripheral Component Interface Express,总线和接口标准)等形式插在主板上,对外表现形式只是一个标准的RJ45网口,拥有独立IP(Internet Protocol,互联网协议)的固件系统。服务器集群一般使用BMC指令进行大规模无人值守操作,包括服务器的远程管理、监控、安装和重启等。

一个对象,往往需要跟其他对象打交道,既包括获知其他对象的状态,也包括依赖其他对象的行为,而一旦发生了依赖关系,则认为该对象依赖于另一对象,只要两个对象之间存在一方依赖另一方的关系,就认为这两个对象之间存在耦合。现有技术中,只要BIOS因为配置项更新而改变偏移量,BMC也要随着同步更新,也即是BIOS和BMC之间存在耦合关系。

为了避免出现这种关系,实现BMC与BIOS之间解耦的方法主要包括以下几种:

第一种方法是通过扩充结构体的方式实现。定义BIOS与BMC之间交互的数据结构,当一方新增需求的时候,则在结构体的最后进行相应的数据扩充,如果BIOS扩充结构体,搭配老版本的BMC时,BMC不解析新扩充的内容即可,如果BMC扩充结构体,搭配老版本的BIOS时,则BMC收不到BIOS发送的扩充结构体的内容,按照默认策略执行即可。此种方式易于实现BIOS与BMC之间数据的整体性处理,但是BIOS与BMC之间交互的信息比较多,很多情况下需要针对不同的信息类型进行分类处理,因此这种方法缺乏灵活性和易扩展性;

第二种方法是将BMC和BIOS的交互信息进行分类,比方说fru信息,CPU资产信息,PCIE资产信息等,每个类型对应一个编码,每次只传输一种类型的信息,当需要扩充其中一种类型的结构体的时候,不在该结构上进行扩充,而是新增一种类型编码,重新组织该种类型的数据。这种方法保证了之前原有数据的完整性,但是当BMC不支持新扩充的数据类型而BIOS支持的时候,BIOS盲目发送给BMC或会造成BMC无法正常返回,BIOS进行重试等操作会影响服务器的开机速度,严重者还会导致直接触发IPMI(Intelligent PlatformManagement Interface,智能平台管理接口)Watchdog(看门狗)出现服务器重启关机等严重后果。

本发明实施例提出一种动态查找BIOS配置分区的方法,帮助BMC不用因为BIOS配置的偏移量改变,或是配置项的定制增加/減少,而需修改相关代码,与BIOS同步发行,无法实现解耦的目的。

响应于对BIOS固件进行更新,开启BIOS镜像档并判断所述BIOS镜像档是否包括BIOS固件的属性。当用户要做BIOS固件更新时会上传一个BIOS镜像档,BIOS镜像档可以是记录BIOS镜像信息的文档。在上传过程中可以实时判断是否上传成功,在BIOS镜像档上传成功后,BMC会开启上传的BIOS镜像档。

本发明实施例中在所述BIOS固件中给不同的分区分配对应的标识,根据所述标识创建属性表,并将所述属性表同步到所述BIOS镜像档。例如:BIOS的属性(attribute)分区的标识为0x10000000,BIOS的引导程序(bootloader)分区的标识是0x10000001,BIOS的配置(NVRAM,Non-Volatile Random Access Memory,非易失随机存取存储器)分区的标识为0x10000002,BIOS的备份(Backup)配置分区的标识为0x10000004,具体可以参见下表:

响应于所述BIOS镜像档包括BIOS固件的属性,确定所述BIOS镜像档中签名的位置,根据所述签名的位置确定固件卷头,并根据所述固件卷头获取实际分区的偏移量和大小。先确定此镜像档中0x10000000标识对应的是否为为BIOS固件属性分区,如果是,则可以确定BIOS镜像档中的签名的位置。

在创建BIOS镜像档时可以对BIOS的镜像进行数字签名以得到加密的镜像,数字签名的内容可以不做具体的限制,容易理解的是,其至少包括镜像运行加密算法后得到的签名值等加密信息,除此之外,数字签名还可以包括BIOS固件的信息,例如,BIOS镜像的创建时间以及BIOS镜像的大小。

本实施例并不限定加密算法的类型,本实施例只是示例性的提供一种设置数字签名的方法,对BIOS的配置分区使用预设算法生成摘要信息,利用私钥对摘要信息加密,将加密后的密文与BIOS的配置分区打包得到配置包,将镜像包发送到检测模块以判断数字签名是否可信。检测模块可以是RTU(Root of Trust for Update,更新的信任根),RTU可以是单独的模块,也可以是服务器中可信任的元器件或模块,如果RTU是单独的模块,其一端需要与BIOS Flash(闪存)相连,另一端与服务器的处理端相连,这里的处理端包括但不限于BMC。

在一些实施方式中,所述确定所述BIOS镜像档中签名的位置包括:从所述BIOS镜像档的头部开始向尾部依次匹配签名,响应于匹配成功,记录所述签名在所述BIOS镜像档中所在的位置。如果确认此镜像档为BIOS固件后,开始从镜像档的头到尾寻找签名。本发明实施例中可以采用RTU对配置包进行解密,RTU利用私钥对应的公钥对配置包进行解密,得到实际摘要信息;判断实际摘要信息和BIOS镜像档中的摘要信息是否一致,如果一致,则配置包可信,对应的签名匹配成功。具体的,在实际的操作中,可以判断当前是否到达BIOS镜像档的最末端,如果没有,则判断当前位置是否有签名,如果有,是否匹配成功,如果匹配成功,记录当前位置。

在一些实施方式中,所述根据所述签名的位置确定固件卷头包括:确定所述签名的映射关系,并基于所述签名的位置和所述映射关系确定所述固件卷头。当找到签名后,同时也会映射到一个数据结构体(即firmware volume header,固件卷头),而这个数据结构体里面包含了有签名、属性、偏移量和分区大小等信息。基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区。在一些实施方式中,所述基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区包括:判断所述镜像档中的属性表是否存在所述配置分区的标识。此时BMC开始检测镜像档中的属性表是否存在所述配置分区的标识,如果存在配置分区的标识,例如NVRAM或者Backup NVRAM,或者0x10000002或0x10000004,此时就可以记录分区的偏移量和分区的大小。

响应于所述实际分区是所述BIOS固件的配置分区,使用所述偏移量和大小对所述BIOS固件的配置分区进行更新。

在实际将BIOS固件更新到SPI(Serial Peripheral Interface,串行外设接口)flash时,可以套用一样的方式来确定BIOS配置信息。如果用户决定保留BIOS配置分区的话,就可以在更新过程中,根据记录的分区信息,来跳过对应的分区以保留BIOS配置。

在一些实施方式中,方法还包括:响应于存在多个BIOS镜像档,读取每个BIOS镜像档中实际分区的偏移量和大小对应的时间戳,并根据所述时间戳确定用于更新的BIOS镜像档。如果同时打开了多个BIOS镜像档,在上述步骤不变的情况下可以获取多组偏移量和大小,可以同时获取每组偏移量和大小对应的时间戳,时间戳上表示的时刻距离当前时刻越近就表明偏移量和大小的数据越新。如果需要最新的数据则可以采用距离当前时刻最近的偏移量和大小来更新BIOS中的配置分区。

在一些实施方式中,所述根据所述时间戳确定用于更新的BIOS镜像档包括:响应于更新后BIOS固件出现异常,还原更新项并再次根据所述时间戳确定新的用于更新的BIOS镜像档。如果更新后BIOS固件出现异常,表明可能某些配置项与BIOS固件不兼容,可以再次选择BIOS镜像档对BIOS固件的配置分区进行更新。

本发明实施例通过查找BIOS固件镜像档是否包含对应的签名,进而根据签名得知BIOS配置分区的属性,与BIOS固件比对BIOS配置分区的属性的正确性之后,确保此分区实际为BIOS配置分区,即可得知此分区偏移量位置及计算出分区的大小,实际在操作更新BIOS固件时,可跳过此分区不做更新动作,以达到完整保留BIOS配置的目的。另外也可让BMC记录此分区的信息,如果使用者因为调整了某些配置项而造成不能开机的问题时,也可以将此配置项还原,确保服务器能正常运作。

需要特别指出的是,上述升级BIOS固件的方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于升级BIOS固件的方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在实施例之上。

基于上述目的,本发明实施例的第二个方面,提出了一种升级BIOS固件的系统,包括:开启模块,配置用于响应于对BIOS固件进行更新,开启BIOS镜像档并判断所述BIOS镜像档是否包括BIOS固件的属性;采集模块,配置用于响应于所述BIOS镜像档包括BIOS固件的属性,确定所述BIOS镜像档中签名的位置,根据所述签名的位置确定固件卷头,并根据所述固件卷头获取实际分区的偏移量和大小;判断模块,配置用于基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区;以及执行模块,配置用于响应于所述实际分区是所述BIOS固件的配置分区,使用所述偏移量和大小对所述BIOS固件的配置分区进行更新。

在一些实施方式中,系统还包括创建模块,配置用于:在所述BIOS固件中给不同的分区分配对应的标识,根据所述标识创建属性表,并将所述属性表同步到所述BIOS镜像档。

在一些实施方式中,所述采集模块配置用于:从所述BIOS镜像档的头部开始向尾部依次匹配签名,响应于匹配成功,记录所述签名在所述BIOS镜像档中所在的位置。

在一些实施方式中,所述采集模块配置用于:确定所述签名的映射关系,并基于所述签名的位置和所述映射关系确定所述固件卷头。

在一些实施方式中,所述判断模块配置用于:判断所述镜像档中的属性表是否存在所述配置分区的标识。

在一些实施方式中,系统还包括读取模块,配置用于:响应于存在多个BIOS镜像档,读取每个BIOS镜像档中实际分区的偏移量和大小对应的时间戳,并根据所述时间戳确定用于更新的BIOS镜像档。

在一些实施方式中,所述读取模块配置用于:响应于更新后BIOS固件出现异常,还原更新项并再次根据所述时间戳确定新的用于更新的BIOS镜像档。

基于上述目的,本发明实施例的第三个方面,提出了一种计算机设备,包括:至少一个处理器;以及存储器,存储器存储有可在处理器上运行的计算机指令,指令由处理器执行以实现如下步骤:S1、响应于对BIOS固件进行更新,开启BIOS镜像档并判断所述BIOS镜像档是否包括BIOS固件的属性;S2、响应于所述BIOS镜像档包括BIOS固件的属性,确定所述BIOS镜像档中签名的位置,根据所述签名的位置确定固件卷头,并根据所述固件卷头获取实际分区的偏移量和大小;S3、基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区;以及S4、响应于所述实际分区是所述BIOS固件的配置分区,使用所述偏移量和大小对所述BIOS固件的配置分区进行更新。

在一些实施方式中,步骤还包括:在所述BIOS固件中给不同的分区分配对应的标识,根据所述标识创建属性表,并将所述属性表同步到所述BIOS镜像档。

在一些实施方式中,所述确定所述BIOS镜像档中签名的位置包括:从所述BIOS镜像档的头部开始向尾部依次匹配签名,响应于匹配成功,记录所述签名在所述BIOS镜像档中所在的位置。

在一些实施方式中,所述根据所述签名的位置确定固件卷头包括:确定所述签名的映射关系,并基于所述签名的位置和所述映射关系确定所述固件卷头。

在一些实施方式中,所述基于所述固件卷头的属性判断所述实际分区是否为所述BIOS固件的配置分区包括:判断所述镜像档中的属性表是否存在所述配置分区的标识。

在一些实施方式中,步骤还包括:响应于存在多个BIOS镜像档,读取每个BIOS镜像档中实际分区的偏移量和大小对应的时间戳,并根据所述时间戳确定用于更新的BIOS镜像档。

在一些实施方式中,所述根据所述时间戳确定用于更新的BIOS镜像档包括:响应于更新后BIOS固件出现异常,还原更新项并再次根据所述时间戳确定新的用于更新的BIOS镜像档。

如图2所示,为本发明提供的上述升级BIOS固件的计算机设备的一个实施例的硬件结构示意图。

以如图2所示的装置为例,在该装置中包括一个处理器201以及一个存储器202,并还可以包括:输入装置203和输出装置204。

处理器201、存储器202、输入装置203和输出装置204可以通过总线或者其他方式连接,图2中以通过总线连接为例。

存储器202作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的升级BIOS固件的方法对应的程序指令/模块。处理器201通过运行存储在存储器202中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的升级BIOS固件的方法。

存储器202可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据升级BIOS固件的方法的使用所创建的数据等。此外,存储器202可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器202可选包括相对于处理器201远程设置的存储器,这些远程存储器可以通过网络连接至本地模块。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置203可接收输入的用户名和密码等信息。输出装置204可包括显示屏等显示设备。

一个或者多个升级BIOS固件的方法对应的程序指令/模块存储在存储器202中,当被处理器201执行时,执行上述任意方法实施例中的升级BIOS固件的方法。

执行上述升级BIOS固件的方法的计算机设备的任何一个实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

本发明还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时执行如上方法的计算机程序。

如图3所示,为本发明提供的上述升级BIOS固件的计算机存储介质的一个实施例的示意图。以如图3所示的计算机存储介质为例,计算机可读存储介质3存储有被处理器执行时执行如上方法的计算机程序31。

最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,升级BIOS固件的方法的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。

上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

相关技术
  • 一种升级BIOS固件的方法、系统、设备及介质
  • 一种从设备的固件升级方法及固件升级的从设备、系统
技术分类

06120113195800