一种固件升级方法及装置
文献发布时间:2023-06-19 11:39:06
技术领域
本申请涉及计算机领域,特别涉及一种固件升级方法及装置。
背景技术
固件就是用于控制硬件设备的软件,写入如BIOS(Basic Input Output System,基本输入输出系统)、ME(Intel Management Engine,管理引擎),EC(embeddedcontroller,嵌入式控制器)等硬件中,担任着一个系统最基础最底层工作。而在硬件设备中,固件就是硬件设备的灵魂,在一些硬件设备中除了固件以外没有其它软件组成。
在现有技术中,对固件进行升级时,每更新成功一个固件,设备就需要重启一次,以完成固件的升级,因此,如果批量升级多个固件,就需要多次重启操作,影响升级效率。
发明内容
本申请实施例的目的在于提供一种固件升级方法及装置。
本申请的实施例采用了如下技术方案:一种固件升级方法,包括:
获取预设表单中存储的至少一个待更新固件的标识;
根据所述待更新固件的标识获取所有待更新固件对应的升级文件;
通过基本输入输出系统将所述待更新固件对应的升级文件分别刷入对应的待更新固件中,以根据所述升级文件更新所述待更新固件;
在确定所有待更新固件更新完毕的情况下,通过基本输入输出系统执行设备重启操作,以完成所述待更新固件的升级。
本申请的有益效果在于:可以获取预设表单中存储的多个待更新固件的标识,然后根据待更新固件的标识获取所有待更新固件对应的升级文件;通过基本输入输出系统将所述待更新固件对应的升级文件分别刷入对应的待更新固件中,以根据所述升级文件更新所述待更新固件;在确定所有待更新固件更新完毕的情况下,通过基本输入输出系统执行设备重启操作,以完成所述待更新固件的升级操作,采用本申请所提供的方案,可以在所有待更新固件更新完毕的情况下,才执行重启操作,因此,只需要一次重启操作,就可以批量升级多个固件,减少了重启操作的执行次数,提升了固件的升级效率。
在一个实施例中,在根据所述待更新固件的标识获取所有待更新固件对应的升级文件之后,所述方法还包括:
构造由多个所述待更新固件对应的升级文件组成的能够被基本输入输出系统识别的数据结构;
所述通过基本输入输出系统将所述待更新固件对应的升级文件分别刷入对应的待更新固件中,包括:
通过基本输入输出系统识别所述数据结构中的升级文件;
通过基本输入输出系统按照不同的待更新固件的设备规范将对应的升级文件刷入对应的待更新固件中。
在一个实施例中,所述方法还包括:
接收服务器发送的固件升级文件;
根据所述固件升级文件确定待更新固件的标识;
将所述待更新固件的标识存储到预设表单中。
在一个实施例中,所述方法还包括:
将固件升级文件存储到预设位置;
所述根据所述待更新固件的标识获取所有待更新固件对应的升级文件,包括:
获取所述预设位置的所有固件升级文件;
从所述预设位置的所有升级文件中选取与所述待更新固件的标识对应的升级文件;
确定选取的与所述待更新固件的标识对应的升级文件为待更新固件对应的升级文件。
在一个实施例中,在从所述预设位置的所有升级文件中选取与所述待更新固件的标识对应的升级文件之后,所述方法还包括:
删除所述预设位置所存储的与所述待更新固件的标识对应的升级文件;
或者
删除所述预设位置的所有升级文件。
本实施例的有益效果在于,从预设位置的所有升级文件中选取与待更新固件的标识对应的升级文件之后,删除预设位置所存储的与待更新固件的标识对应的升级文件,或者删除预设位置的所有升级文件,从而避免后续操作系统接收到的升级文件与已经使用的升级文件造成混淆,避免对固件进行重复升级。
在一个实施例中,所述方法还包括:
在监测到有固件更新完成的情况下,判断是否存在未完成更新的固件;
在存在未完成更新的固件的情况下,继续监测其余固件的更新情况,直至所有固件更新完成。
在一个实施例中,在获取预设表单中存储的至少一个待更新固件的标识之后,所述方法还包括:
删除所述预设表单中存储的待更新固件的标识。
本实施例的有益效果在于:获取预设表单中存储的至少一个待更新固件的标识之后,通过将预设表单中存储的待更新固件的标识删除,避免与后续接收到的新的升级文件混淆,进而避免出现重复升级的情况。
本申请还提供一种固件升级装置,包括:
第一获取模块,用于获取预设表单中存储的至少一个待更新固件的标识;
第二获取模块,用于根据所述待更新固件的标识获取所有待更新固件对应的升级文件;
刷入模块,用于通过基本输入输出系统将所述待更新固件对应的升级文件分别刷入对应的待更新固件中,以根据所述升级文件更新所述待更新固件;
执行模块,用于在确定所有待更新固件更新完毕的情况下,通过基本输入输出系统执行设备重启操作,以完成所述待更新固件的升级。
在一个实施例中,所述装置还包括:
构造模块,用于在根据所述待更新固件的标识获取所有待更新固件对应的升级文件之后,构造由多个所述待更新固件对应的升级文件组成的能够被基本输入输出系统识别的数据结构;
所述刷入模块,包括:
识别子模块,用于通过基本输入输出系统识别所述数据结构中的升级文件;
刷入子模块,用于通过基本输入输出系统按照不同的待更新固件的设备规范将对应的升级文件刷入对应的待更新固件中。
在一个实施例中,所述装置还包括:
接收模块,用于接收服务器发送的固件升级文件;
确定模块,用于根据所述固件升级文件确定待更新固件的标识;
存储模块,用于将所述待更新固件的标识存储到预设表单中。
在一个实施例中,所述装置还包括:
存储模块还用于,将固件升级文件存储到预设位置;
所述第二获取模块,包括:
获取子模块,用于获取所述预设位置的所有固件升级文件;
选取子模块,用于从所述预设位置的所有升级文件中选取与所述待更新固件的标识对应的升级文件;
确定子模块,用于确定选取的与所述待更新固件的标识对应的升级文件为待更新固件对应的升级文件。
在一个实施例中,所述装置还包括:
删除模块,用于在从所述预设位置的所有升级文件中选取与所述待更新固件的标识对应的升级文件之后,删除所述预设位置所存储的与所述待更新固件的标识对应的升级文件;
删除模块还用于,删除所述预设位置的所有升级文件。
在一个实施例中,所述装置还包括:
判断模块,用于在监测到有固件更新完成的情况下,判断是否存在未完成更新的固件;
监测模块,用于在存在未完成更新的固件的情况下,继续监测其余固件的更新情况,直至所有固件更新完成。
在一个实施例中,删除模块还用于,在获取预设表单中存储的至少一个待更新固件的标识之后,删除所述预设表单中存储的待更新固件的标识。
附图说明
图1为本申请一实施例中一种固件升级方法的流程图;
图2为本申请一实施例中示出的现有技术中固件升级的流程图。
图3为本申请另一实施例中一种固件升级方法的流程图;
图4为本申请一实施例中针对多种不同固件进行同时升级的流程图;
图5为本申请又一实施例中一种固件升级方法的流程图;
图6为本申请实施例的一种固件升级装置的框图。
具体实施方式
此处参考附图描述本申请的各种方案以及特征。
应理解的是,可以对此处申请的实施例做出各种修改。因此,上述说明书不应该视为限制,而仅是作为实施例的范例。本领域的技术人员将想到在本申请的范围和精神内的其他修改。
包含在说明书中并构成说明书的一部分的附图示出了本申请的实施例,并且与上面给出的对本申请的大致描述以及下面给出的对实施例的详细描述一起用于解释本申请的原理。
通过下面参照附图对给定为非限制性实例的实施例的优选形式的描述,本申请的这些和其它特性将会变得显而易见。
还应当理解,尽管已经参照一些具体实例对本申请进行了描述,但本领域技术人员能够确定地实现本申请的很多其它等效形式。
当结合附图时,鉴于以下详细说明,本申请的上述和其他方面、特征和优势将变得更为显而易见。
此后参照附图描述本申请的具体实施例;然而,应当理解,所申请的实施例仅仅是本申请的实例,其可采用多种方式实施。熟知和/或重复的功能和结构并未详细描述以避免不必要或多余的细节使得本申请模糊不清。因此,本文所申请的具体的结构性和功能性细节并非意在限定,而是仅仅作为权利要求的基础和代表性基础用于教导本领域技术人员以实质上任意合适的详细结构多样地使用本申请。
本说明书可使用词组“在一种实施例中”、“在另一个实施例中”、“在又一实施例中”或“在其他实施例中”,其均可指代根据本申请的相同或不同实施例中的一个或多个。
图1为本申请实施例的一种固件升级方法的流程图,该固件升级方法包括以下步骤S11-S14:
在步骤S11中,获取预设表单中存储的至少一个待更新固件的标识;
在步骤S12中,根据待更新固件的标识获取所有待更新固件对应的升级文件;
在步骤S13中,通过基本输入输出系统将待更新固件对应的升级文件分别刷入对应的待更新固件中,以根据升级文件更新待更新固件;
在步骤S14中,在确定所有待更新固件更新完毕的情况下,通过基本输入输出系统执行设备重启操作,以完成待更新固件的升级。
固件是指用于控制硬件设备的软件,例如,可以是硬件设备的驱动程序,固件既可以实现对硬件设备的控制,也用来建立操作系统与硬件设备之间的连接,硬件设备可以是指BIOS、ME,EC等硬件。图2是现有技术中固件升级的流程图,从图2可以看出,在现有技术中,操作系统下载并且安装固件,然后重启系统,在重启过程中,系统的启动文件发现有固件升级包,则系统的启动文件发现固件并校验固件文件,设备触发固件升级,系统的启动文件发现升级成功,然后再次重启系统,完成固件的升级。
可见,在现有技术中,每下载并安装一个固件,就需要进行重启操作,而本申请中,系统在接收到固件升级文件之后,将升级文件存放在指定位置,并将待更新固件的标识放到预设表单中,在更新固件时,获取预设表单中存储的至少一个待更新固件的标识;在获取到标识之后,需要将预设表单中存储的待更新固件的标识删除,以避免与后续接收到的升级文件混淆,造成重复升级的情况。
根据待更新固件的标识获取所有待更新固件对应的升级文件;此时,可以通过获取到的所有的升级文件构造能够被基本输入输出系统识别的数据结构,该基本输入输出系统用于引导操作系统启动,也可以执行固件升级操作,其引导操作系统启动时,实质上就是通过执行图2中所提及的系统启动文件来实现对操作系统的启动。
通过基本输入输出系统将待更新固件对应的升级文件分别刷入对应的待更新固件中,以根据升级文件更新待更新固件;具体的,通过基本输入输出系统识别数据结构中的升级文件,通过基本输入输出系统按照不同的待更新固件的设备规范将对应的升级文件刷入对应的待更新固件中。
例如,获取到的固件标识为BIOS固件标识,摄像头固件标识和硬盘固件标识,那么,在刷入时,根据BIOS的设备规范将BIOS升级文件刷入BIOS对应的固件中,根据摄像头固件的设备规范将摄像头升级文件刷入摄像头设备对应的固件中,将硬盘升级文件刷入硬盘对应的固件。刷入之后,固件会基于刷入的升级文件自行更新。在监测到有固件更新完成的情况下,判断是否存在未完成更新的固件;在存在未完成更新的固件的情况下,继续监测其余固件的更新情况,直至所有固件更新完成。在确定所有待更新固件更新完毕的情况下,通过基本输入输出系统执行设备重启操作,以完成待更新固件的升级。
需要说明的是,本申请是用于解决固件更新过程中频繁重启的,因此,可以设置一阈值,在执行上述步骤S11之前,可以轮询预设表单,在预设表单中存储的待更新固件的标识数目达到或高于该阈值的情况下,才执行上述步骤S11。下表1为预设表单的样例,其中,由于预设表单中的描述语言并非本申请的研究目标,因此,并未在表1中示出具体的描述语言。
表1
本申请的有益效果在于:可以获取预设表单中存储的多个待更新固件的标识,然后根据待更新固件的标识获取所有待更新固件对应的升级文件;通过基本输入输出系统将待更新固件对应的升级文件分别刷入对应的待更新固件中,以根据升级文件更新待更新固件;在确定所有待更新固件更新完毕的情况下,通过基本输入输出系统执行设备重启操作,以完成待更新固件的升级操作,采用本申请所提供的方案,可以在所有待更新固件更新完毕的情况下,才执行重启操作,因此,只需要一次重启操作,就可以批量升级多个固件,减少了重启操作的执行次数,提升了固件的升级效率。
在一个实施例中,如图3所示,在根据待更新固件的标识获取所有待更新固件对应的升级文件之后,方法还包括以下步骤S31:
在步骤S31中,构造由多个待更新固件对应的升级文件组成的能够被基本输入输出系统识别的数据结构;
上述步骤S13可被实施为以下步骤S32-S33:
在步骤S32中,通过基本输入输出系统识别数据结构中的升级文件;
在步骤S33中,通过基本输入输出系统按照不同的待更新固件的设备规范将对应的升级文件刷入对应的待更新固件中。
本实施例中,构造由多个待更新固件对应的升级文件组成的能够被基本输入输出系统识别的数据结构,具体的数据结构如图3所示,图3中,包含了三个层面的内容,第一个层面有操作系统完成,构造由目录表、安装文件和证书文件组成的数据结构,该数据结构即为能够被基本输入输出系统识别的数据结构,需要说明的是,基本输入输出系统在读取时,只读取目录表中的固件标识,而设置安装文件和证书文件是为了满足操作系统的规范。第二个层面,由系统启动文件执行,具体的,通过基本输入输出系统执行系统启动文件,由系统启动文件调用更新程序。第三个层面由基本输入输出系统执行,具体的,基本输入输出系统识别数据结构中的升级文件,按照不同的待更新固件的设备规范将对应的升级文件刷入对应的待更新固件中。图4中,以BIOS固件、摄像头固件和硬盘固件的升级为例,具体的,获取到的固件标识为BIOS固件标识,摄像头固件标识和硬盘固件标识,那么,在刷入时,根据BIOS的设备规范将BIOS升级文件刷入BIOS对应的固件中,根据摄像头固件的设备规范将摄像头升级文件刷入摄像头设备对应的固件中,将硬盘升级文件刷入硬盘对应的固件。
在一个实施例中,方法还可被实施为以下步骤S51-S53:
在步骤S51中,接收服务器发送的固件升级文件;
在步骤S52中,根据固件升级文件确定待更新固件的标识;
在步骤S53中,将待更新固件的标识存储到预设表单中。
操作系统中设置有不同种类的硬件,而硬件的提供商会对硬件的固件进行更新,以完善硬件功能,因此,本实施例中,操作系统可以接收服务器发送的固件升级文件,该服务器可以是各个硬件提供商所对应的服务器。根据固件升级文件确定待更新固件的标识;将待更新固件的标识存储到预设表单中。后续在硬件更新时,可以通过获取该预设表单中的待更新固件的标识来获知哪些固件需要更新。
在一个实施例中,方法还可被实施为以下步骤A1:
在步骤A1中,将固件升级文件存储到预设位置;
上述步骤S12可被实施为以下步骤A2-A4:
在步骤A2中,获取预设位置的所有固件升级文件;
在步骤A3中,从预设位置的所有升级文件中选取与待更新固件的标识对应的升级文件;
在步骤A4中,确定选取的与待更新固件的标识对应的升级文件为待更新固件对应的升级文件。
本实施例中,在操作系统接收到硬件提供,商服务器发来的升级文件之后,会将升级文件存储到预设位置,同时,将升级文件对应的待更新固件的标识放到预设表单,因此,在之后进行升级时,从预设表单中拿到待更新固件的标识,然后根据待更新固件的标识从预设位置选取与待更新固件标识对应的升级文件,确定选取的与待更新固件的标识对应的升级文件为待更新固件对应的升级文件。
在一个实施例中,在上述步骤A3之后,方法还可被实施为以下步骤B1或B2:
在步骤B1中,删除预设位置所存储的与待更新固件的标识对应的升级文件;
在步骤B2中,删除预设位置的所有升级文件。
考虑到预设位置后续还会存储新接收到的固件升级文件,因此,本实施例中,从预设位置的所有升级文件中选取与待更新固件的标识对应的升级文件之后,删除预设位置所存储的与待更新固件的标识对应的升级文件,或者删除预设位置的所有升级文件。
本实施例的有益效果在于,从预设位置的所有升级文件中选取与待更新固件的标识对应的升级文件之后,删除预设位置所存储的与待更新固件的标识对应的升级文件,或者删除预设位置的所有升级文件,从而避免后续操作系统接收到的升级文件与已经使用的升级文件造成混淆,避免对固件进行重复升级。
在一个实施例中,方法还可被实施为以下步骤C1-C2:
在步骤C1中,在监测到有固件更新完成的情况下,判断是否存在未完成更新的固件;
在步骤C2中,在存在未完成更新的固件的情况下,继续监测其余固件的更新情况,直至所有固件更新完成。
很多固件在升级之后,需要重新启动设备,这是应为只有重启设备,才能停用旧的固件,启用新的固件,因此,通常情况下,固件升级之后,会重启设备,本申请用于解决固件批量升级过程中,需要频繁重启的问题,因此,本申请中,在检测到有固件更新完成的情况下,并不会直接重启,而是判断是否存在未完成更新的固件,如果存在,则继续检测其余固件的更新情况,直至所有的固件更新完成,从而只需要进行一次重启,就能完成所有的固件的升级。
在一个实施例中,在上述步骤S11之后,方法还可被实施为以下步骤:
删除预设表单中存储的待更新固件的标识。
考虑操作系统后续还会接收到硬件提供商服务器发送的升级文件,预设表单后续还会存储新接收到的固件升级文件,因此,本实施例中,获取预设表单中存储的至少一个待更新固件的标识之后,需要将预设表单中存储的待更新固件的标识删除,以避免与后续接收到的升级文件混淆,造成重复升级的情况。
而关于上述S11的触发条件,可以基于以下几方面进行考虑:
首先,在执行上述步骤S11之前,轮询预设表单,判断预设表单中存储的待更新固件的标识数目是否达到预设数目,在预设表单中存储的待更新固件的标识数目达到预设数目的情况下,执行上述步骤S11,从而保证每次更新的固件达到一定的数目,以实现批量更新。
其次,考虑到各个硬件提供商对固件的更新时机并不是固定的,因此,如果一定要等到预设表单中存储的待更新固件的标识数目达到预设数目再执行步骤S11,可能需要等待很长一段时间,因此,在上述方案的基础上,还可以设置一时间阈值,如果当前时间距离上次待更新固件升级的时间间隔已经达到预设时间,不管预设表单中存储的待更新固件的标识数目达到预设数目,也依然执行上述步骤S11。
同时,有些硬件提供商对固件的更新有可能只是增加一些新的功能,而有时候则可能是为了修复一些高危漏洞。有鉴于此,在轮训预设表单的过程中,可以根据预设表单中的标识信息去预设位置查看相应的升级文件,并对升级文件进行分析,判断升级文件的类型,并根据升级文件的类型确定升级文件的优先级,例如,如果是修复高危漏洞的升级文件,则赋予较高的优先级,如果是增加新功能的升级文件,则赋予较低的优先级。
另外,有些硬件是比较重要的硬件,在接收到服务器发送的升级文件之后,应当尽快进行升级,将这些硬件提前记录到本地,因此,在轮训预设表单时,可以基于轮训到的预设表单中的待更新固件的标识确定待更新固件的类型,当待更新固件为提前记录到本地的硬件的标识时,则执行上述步骤S11。
图6为本申请实施例的一种固件升级装置的框图,该固件升级装置包括以下模块:
第一获取模块61,用于获取预设表单中存储的至少一个待更新固件的标识;
第二获取模块62,用于根据待更新固件的标识获取所有待更新固件对应的升级文件;
刷入模块63,用于通过基本输入输出系统将待更新固件对应的升级文件分别刷入对应的待更新固件中,以根据升级文件更新待更新固件;
执行模块64,用于在确定所有待更新固件更新完毕的情况下,通过基本输入输出系统执行设备重启操作,以完成待更新固件的升级。
在一个实施例中,装置还包括:
构造模块,用于在根据待更新固件的标识获取所有待更新固件对应的升级文件之后,构造由多个待更新固件对应的升级文件组成的能够被基本输入输出系统识别的数据结构;
刷入模块,包括:
识别子模块,用于通过基本输入输出系统识别数据结构中的升级文件;
刷入子模块,用于通过基本输入输出系统按照不同的待更新固件的设备规范将对应的升级文件刷入对应的待更新固件中。
在一个实施例中,装置还包括:
接收模块,用于接收服务器发送的固件升级文件;
确定模块,用于根据固件升级文件确定待更新固件的标识;
存储模块,用于将待更新固件的标识存储到预设表单中。
在一个实施例中,装置还包括:
存储模块还用于,将固件升级文件存储到预设位置;
第二获取模块,包括:
获取子模块,用于获取预设位置的所有固件升级文件;
选取子模块,用于从预设位置的所有升级文件中选取与待更新固件的标识对应的升级文件;
确定子模块,用于确定选取的与待更新固件的标识对应的升级文件为待更新固件对应的升级文件。
在一个实施例中,装置还包括:
删除模块,用于在从预设位置的所有升级文件中选取与待更新固件的标识对应的升级文件之后,删除预设位置所存储的与待更新固件的标识对应的升级文件;
删除模块还用于,删除预设位置的所有升级文件。
在一个实施例中,装置还包括:
判断模块,用于在监测到有固件更新完成的情况下,判断是否存在未完成更新的固件;
监测模块,用于在存在未完成更新的固件的情况下,继续监测其余固件的更新情况,直至所有固件更新完成。
在一个实施例中,删除模块还用于,在获取预设表单中存储的至少一个待更新固件的标识之后,删除预设表单中存储的待更新固件的标识。
以上实施例仅为本申请的示例性实施例,不用于限制本申请,本申请的保护范围由权利要求书限定。本领域技术人员可以在本申请的实质和保护范围内,对本申请做出各种修改或等同替换,这种修改或等同替换也应视为落在本申请的保护范围内。
- 一种固件升级方法、固件升级装置及固件升级系统
- 一种可升级固件的闪存升级装置及闪存的升级固件方法