CN117762453A - 固件升级方法及装置、存储介质及电子设备 - Google Patents
固件升级方法及装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN117762453A CN117762453A CN202410038719.8A CN202410038719A CN117762453A CN 117762453 A CN117762453 A CN 117762453A CN 202410038719 A CN202410038719 A CN 202410038719A CN 117762453 A CN117762453 A CN 117762453A
- Authority
- CN
- China
- Prior art keywords
- manufacturer
- information
- firmware
- card
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 71
- 230000006870 function Effects 0.000 claims description 72
- 238000004590 computer program Methods 0.000 claims description 26
- 238000007639 printing Methods 0.000 claims description 15
- 230000005856 abnormality Effects 0.000 claims description 5
- 239000000758 substrate Substances 0.000 claims 4
- 238000005516 engineering process Methods 0.000 abstract description 5
- 238000007726 management method Methods 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000010606 normalization Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本申请实施例提供了一种固件升级方法及装置、存储介质及电子设备,其中,该方法包括:基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,指定芯片寄存器的寄存器值用于标识指定Retimer卡所属的厂商,第一厂商信息所表示的厂商为第一厂商;基于指定Retimer卡的固件文件,确定第二厂商信息,其中,第二厂商信息所表示的厂商为第二厂商;在第一厂商和第二厂商为同一预设厂商的情况下,通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作,通过本申请,解决了相关技术中的固件升级方法存在固件升级的效率低的问题。
Description
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种固件升级方法及装置、存储介质及电子设备。
背景技术
Retimer(信号重整器)卡是一种混合信号模拟/数字芯片制作而成的部件,其原理是使用内部的时钟恢复电路,重新定时输入信号以消除时钟偏移和抖动,并校正信号的相位和时间偏差,Retimer卡可以用于延长接口的传输距离并提高信号质量,解决在数据高速、远距离传输时,信号时序不齐、损耗大、完整性差等问题。
然而,研发制造Retimer卡的厂商不止一家,而每家的Retimer卡固件升级用到的文件、升级方法以及使用的工具都不一样,从而导致在升级Retimer卡固件时需要先手动查询确定其厂商信息,再手动使用对应的升级工具升级相对应的固件文件。由此可见,相关技术中的固件升级方法存在固件升级的效率低的问题。
发明内容
本申请实施例提供了一种固件升级方法及装置、存储介质及电子设备,以至少解决相关技术中固件升级方法存在固件升级的效率低的问题。
根据本申请的一个实施例,提供了一种固件升级方法,包括:基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,所述指定芯片寄存器的寄存器值用于标识所述指定Retimer卡所属的厂商,所述第一厂商信息所表示的厂商为第一厂商;基于所述指定Retimer卡的固件文件,确定第二厂商信息,其中,所述第二厂商信息所表示的厂商为第二厂商;在所述第一厂商和所述第二厂商为同一预设厂商的情况下,通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作。
在一个示例性实施例中,所述基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,包括:读取所述指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值;在读取到目标寄存器值、且所述目标寄存器值为一组预设值中的目标值的情况下,将与所述目标值匹配的厂商信息,确定为所述第一厂商信息,其中,所述一组预设值中的每个预设值与一个厂商信息匹配。
在一个示例性实施例中,在所述读取所述指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值之后,所述方法还包括:在寄存器值读取失败的情况下,在所述目标设备的基板管理控制器BMC下的指定系统文件中写入指定信息,其中,所述指定系统文件为信号重整器类型文件,所述指定信息用于表示所述目标设备的Retimer卡槽位内未插入Retimer卡。
在一个示例性实施例中,所述基于所述指定Retimer卡的固件文件,确定第二厂商信息,包括:以只读方式打开所述指定Retimer卡的固件文件,并将读取的所述指定Retimer卡的固件文件加载到所述目标设备的基板管理控制器BMC的BMC内存中;读取所述BMC内存中的所述指定Retimer卡的固件文件头部开始的连续N个字节,得到初始固件信息,其中,N为大于或者等于1的正整数;对所述初始固件信息进行移位拼接,得到移位拼接后的目标固件信息;在所述目标固件信息为一组预设固件信息中的目标固件信息的情况下,将与所述目标固件信息匹配的厂商信息,确定为所述第二厂商信息,其中,所述一组预设固件信息中的每个预设固件信息与一个厂商信息匹配。
在一个示例性实施例中,在所述对所述初始固件信息进行移位拼接,得到移位拼接后的目标固件信息之后,所述方法还包括:在所述目标固件信息不属于所述一组预设固件信息的情况下,打印目标报错信息,其中,所述目标报错信息用于描述所述指定Retimer卡的固件升级异常。
在一个示例性实施例中,所述方法还包括:判断所述第一厂商信息和所述第二厂商信息是否为相同的厂商信息;在所述第一厂商信息和所述第二厂商信息为相同的厂商信息的情况下,将一组预设厂商信息作为当前厂商信息循环执行以下的匹配操作,其中,所述一组预设厂商信息中的每个厂商信息为一个预设厂商的厂商信息:在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息相同的情况下,确定所述第一厂商和所述第二厂商为同一预设厂商,结束循环;在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息不相同、且所述一组预设厂商信息中存在未执行过所述匹配操作的预设厂商信息的情况下,继续执行下一轮的所述匹配操作;在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息不相同、且所述一组预设厂商信息中不存在未执行过所述匹配操作的预设厂商信息的情况下,结束循环;
所述在所述第一厂商和所述第二厂商为同一预设厂商的情况下,通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作,包括:在所述第一厂商和所述第二厂商为同一预设厂商的情况下,调用所述目标设备的基板管理控制器BMC的BMC内存中,与所述第一厂商对应的所述目标Retimer卡固件升级函数,以由所述目标Retimer卡固件升级函数从对应的BMC内存位置中读取出固件升级文件,并使用读取的所述固件升级文件执行所述固件升级操作。
在一个示例性实施例中,在所述通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作之后,所述方法还包括:基于所述目标Retimer卡固件升级函数的函数返回值,确定所述固件升级操作的升级操作执行结果,并打印执行结果信息,其中,所述执行结果信息用于指示所述升级操作执行结果。
根据本申请的另一个实施例,提供了一种固件升级装置,包括:第一确定单元,用于基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,所述指定芯片寄存器的寄存器值用于标识所述指定Retimer卡所属的厂商,所述第一厂商信息所表示的厂商为第一厂商;第二确定单元,用于基于所述指定Retimer卡的固件文件,确定第二厂商信息,其中,所述第二厂商信息所表示的厂商为第二厂商;第一执行单元,用于在所述第一厂商和所述第二厂商为同一预设厂商的情况下,通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作。
在一个示例性实施例中,所述第一确定单元包括:第一读取模块,用于读取所述指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值;第一确定模块,用于在读取到目标寄存器值、且所述目标寄存器值为一组预设值中的目标值的情况下,将与所述目标值匹配的厂商信息,确定为所述第一厂商信息,其中,所述一组预设值中的每个预设值与一个厂商信息匹配。
在一个示例性实施例中,所述装置还包括:写入单元,用于在所述读取所述指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值之后,在寄存器值读取失败的情况下,在所述目标设备的基板管理控制器BMC下的指定系统文件中写入指定信息,其中,所述指定系统文件为信号重整器类型文件,所述指定信息用于表示所述目标设备的Retimer卡槽位内未插入Retimer卡。
在一个示例性实施例中,所述第二确定单元包括:第一执行模块,用于以只读方式打开所述指定Retimer卡的固件文件,并将读取的所述指定Retimer卡的固件文件加载到所述目标设备的基板管理控制器BMC的BMC内存中;第二读取模块,用于读取所述BMC内存中的所述指定Retimer卡的固件文件头部开始的连续N个字节,得到初始固件信息,其中,N为大于或者等于1的正整数;第二执行模块,用于对所述初始固件信息进行移位拼接,得到移位拼接后的目标固件信息;第二确定模块,用于在所述目标固件信息为一组预设固件信息中的目标固件信息的情况下,将与所述目标固件信息匹配的厂商信息,确定为所述第二厂商信息,其中,所述一组预设固件信息中的每个预设固件信息与一个厂商信息匹配。
在一个示例性实施例中,所述装置还包括:打印单元,用于在所述对所述初始固件信息进行移位拼接,得到移位拼接后的目标固件信息之后,在所述目标固件信息不属于所述一组预设固件信息的情况下,打印目标报错信息,其中,所述目标报错信息用于描述所述指定Retimer卡的固件升级异常。
在一个示例性实施例中,所述装置还包括:判断单元,用于判断所述第一厂商信息和所述第二厂商信息是否为相同的厂商信息;第二执行单元,用于在所述第一厂商信息和所述第二厂商信息为相同的厂商信息的情况下,将一组预设厂商信息作为当前厂商信息循环执行以下的匹配操作,其中,所述一组预设厂商信息中的每个厂商信息为一个预设厂商的厂商信息:在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息相同的情况下,确定所述第一厂商和所述第二厂商为同一预设厂商,结束循环;在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息不相同、且所述一组预设厂商信息中存在未执行过所述匹配操作的预设厂商信息的情况下,继续执行下一轮的所述匹配操作;在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息不相同、且所述一组预设厂商信息中不存在未执行过所述匹配操作的预设厂商信息的情况下,结束循环;
所述第一执行单元包括:第三执行模块,用于在所述第一厂商和所述第二厂商为同一预设厂商的情况下,调用所述目标设备的基板管理控制器BMC的BMC内存中,与所述第一厂商对应的所述目标Retimer卡固件升级函数,以由所述目标Retimer卡固件升级函数从对应的BMC内存位置中读取出固件升级文件,并使用读取的所述固件升级文件执行所述固件升级操作。
在一个示例性实施例中,所述装置还包括:第三执行单元,用于在所述通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作之后,基于所述目标Retimer卡固件升级函数的函数返回值,确定所述固件升级操作的升级操作执行结果,并打印执行结果信息,其中,所述执行结果信息用于指示所述升级操作执行结果。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,采用在确定Retimer卡与固件文件属于同一厂商的情况下,调用该厂商对应的Retimer卡固件升级函数执行固件升级操作的方式,基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,指定芯片寄存器的寄存器值用于标识指定Retimer卡所属的厂商,第一厂商信息所表示的厂商为第一厂商;基于指定Retimer卡的固件文件,确定第二厂商信息,其中,第二厂商信息所表示的厂商为第二厂商;在第一厂商和第二厂商为同一预设厂商的情况下,通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作,由于先获取当前设备上安装的Retimer卡厂商信息以及固件厂商信息,并判断是否匹配再决定进行升级,可以解决Retimer卡更新固件效率低下、易出错、易报错的问题,即,解决相关技术中的固件升级方法存在固件升级的效率低的问题。
附图说明
图1是本申请实施例的一种固件升级方法的服务器设备的硬件结构框图;
图2是根据本申请实施例的一种固件升级方法的流程示意图;
图3是根据本申请实施例的另一种固件升级方法的流程示意图;
图4是根据本申请实施例的又一种固件升级方法的流程示意图;
图5是根据本申请实施例的又一种固件升级方法的流程示意图;
图6是根据本申请实施例的又一种固件升级方法的流程示意图;
图7是本申请实施例提供的一种可选的固件升级装置的结构框图;
图8是本申请实施例提供的一种可选的电子设备的计算机系统的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一″、“第二″等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
本申请实施例中所提供的方法实施例可以在服务器设备或者类似的运算装置中执行。以运行在服务器设备上为例,图1是本申请实施例的一种固件升级方法的服务器设备的硬件结构框图。如图1所示,服务器设备可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述服务器设备还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述服务器设备的结构造成限定。例如,服务器设备还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的固件升级方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至服务器设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器设备的通信供应方提供的无线网络。在一个实例中,传输设备106包括一个NIC(Network Interface Controller,网络适配器),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为RF(Radio Frequency,射频)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种固件升级方法,图2是根据本申请实施例的一种固件升级方法的流程示意图,如图2所示,该流程包括如下步骤:
步骤S202,基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,指定芯片寄存器的寄存器值用于标识指定Retimer卡所属的厂商,第一厂商信息所表示的厂商为第一厂商。
本实施例中的固件升级方法可以应用到对固件Retimer卡进行升级的场景中。Retimer卡通常会安装在网络设备、计算设备、存储设备等高速数据传输设备上,例如,服务器、网络交换机、数据存储设备、路由器、网络接入设备等等,本申请至少部分实施例中以BMC为OpenBMC(Open Baseboard Management Controller,开源基板管理控制器),基于服务器上的OpenBMC对服务器上安装的固件Retimer卡进行固件升级为例。
Retimer卡能够对高速数据信号进行重新定时和再生,使得信号在传输过程中保持稳定,从而提高设备的性能和数据传输质量。但研发制造Retimer卡的厂商不止一家,而每家的Retimer卡固件升级用到的文件、升级方法以及使用的工具都不一样。从而导致在升级Retimer卡固件时需要先查询确定其厂商信息,再使用对应的升级工具升级相对应的固件文件。
例如,在Linux系统下升级Retimer固件时,有以下两种方式:
1.先查看该机器上安装的是哪个厂商的Retimer卡,然后再登录web,使用web上的固件升级功能将对应厂商的升级工具和新版本Retimer固件一同传入到OpenBMC内部,再在OpenBMC内部运行该升级工具对Retimer卡进行固件升级;这里,OpenBMC是服务器特有的管理控制器,可以自动监控服务器运行状态,监控管理连接在服务器上的各种部件,记录系统告警事件。
2.先查看该机器(设备)上安装的是哪个厂商的Retimer卡,然后再手动将新版本Retimer固件通过scp命令拷贝到目标机器的BMC系统指定目录下,最后再手动执行ssh命令登录到目标机器系统下,执行升级工具进行升级。
由此可见,目前,Retimer卡固件升级方法需要人工手动参与,然而,一旦有大量机器需要进行Retimer卡固件版本更新、并且还有不同厂商的Retimer卡设备时,这样手动操作的效率极其低下,完成这一工作的时间需要很长的时间,并且也由于没有对Retimer卡的厂商信息进行校对,会带来固件与卡不匹配导致升级失败、无法启动等问题,同时,若不知道相应槽位上是否有Retimer卡就直接执行升级命令则会出现各种报错,而且会影响工作效率。
为了至少部分解决上述问题,在本实施例中,通过获取当前设备(例如,服务器)上安装的Retimer卡的厂商信息以及固件文件对应的厂商信息,判断Retimer卡和固件文件是否匹配,即,判断是否对应同一厂商,再决定进行升级,从而解决Retimer卡固件更新效率低下、易出错、易报错的问题。
考虑到Retimer卡上的指定芯片寄存器值可以用于识别Retimer卡厂商信息,在本实施例中,基于目标设备(例如,服务器)的指定Retimer卡上的指定芯片寄存器的寄存器值,可以确定第一厂商信息,即,基于Retimer卡上的指定芯片寄存器的寄存器值可以确定Retimer卡所属的厂商,这里,第一厂商信息所表示的厂商为第一厂商,以目标设备的指定Retimer卡属于第一厂商为例。
不同厂商对应的Retimer卡上的指定芯片寄存器的寄存器值可以是各厂商以统一的规则/规范自定义的,不同厂商对应不同的寄存器值,可选的,厂商与寄存器值的对应关系可以存储在OpenBMC内存中,OpenBMC可以通过12C(Inter-Integrated Circuit,串行双向总线)接口/总线与Retimer卡进行数据交互,例如,OpenBMC可以基于Retimer卡的设备地址(卡槽位置)等信息通过I2C接口读取Retimer卡上的指定芯片寄存器的寄存器值。
步骤S204,基于指定Retimer卡的固件文件,确定第二厂商信息,其中,第二厂商信息所表示的厂商为第二厂商。
考虑到固件文件与Retimer卡不匹配会导致升级失败、无法启动等问题,为了对Retimer卡的固件文件和Retimer卡是否属于同一厂商进行校验,在确定指定Retimer卡属于第一厂商的情况下,可以先基于获取到的Retimer卡的固件文件确定固件文件的厂商信息,即,固件文件的所属厂商。
可选地,基于固件文件中的指定数据(例如,固件头数据)可以确定固件文件所属的厂商,不同厂商对应不同的固件文件中的指定数据,指定数据与厂商的对应关系可以是存储在OpenBMC内存中的。
在本实施例中,以基于获取到的指定Retimer卡的固件文件,确定指定Retimer卡的固件文件属于第二厂商为例。
步骤S206,在第一厂商和第二厂商为同一预设厂商的情况下,通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作。
在确定Retimer卡和固件文件属于同一厂商的情况下,可以调用与该厂商对应的Retimer卡固件升级函数对Retimer卡执行固件升级操作。
可选地,各厂商对应的Retimer卡固件升级函数与各厂商的对应关系以及各厂商对应的Retimer卡固件升级函数可以是存储在OpenBMC内存中的,Retimer卡固件升级函数可以包括一些参数,例如Retimer卡的设备地址、固件文件的路径、固件版本等等。
通过在确定需要升级的Retimer卡和获取到的固件文件属于同一厂商的情况下,基于获取到的需要升级的Retimer卡的信息(例如,设备地址)和固件文件,调用与该厂商相应的固件升级函数对需要升级的Retimer卡执行固件升级操作。在本实施例中,在第一厂商和第二厂商为同一预设厂商的情况下,可以通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作,这里,第一厂商和第二厂商为同一厂商,第一厂商对应的目标Retimer卡固件升级函数与第二厂商对应的目标Retimer卡固件升级函数相同。
通过上述步骤,基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,指定芯片寄存器的寄存器值用于标识指定Retimer卡所属的厂商,第一厂商信息所表示的厂商为第一厂商;基于指定Retimer卡的固件文件,确定第二厂商信息,其中,第二厂商信息所表示的厂商为第二厂商;在第一厂商和第二厂商为同一预设厂商的情况下,通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作,解决了相关技术中的固件升级方法存在固件升级的效率低的问题,提高了固件升级效率。
在一个示例性实施例中,基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,包括:
S11,读取指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值;
S12,在读取到目标寄存器值、且目标寄存器值为一组预设值中的目标值的情况下,将与目标值匹配的厂商信息,确定为第一厂商信息,其中,一组预设值中的每个预设值与一个厂商信息匹配。
一般来说,每个Retimer卡上都会配置输入/输出扩展芯片寄存器(IO Expander芯片寄存器),不同厂商定义的IO Expander芯片寄存器的寄存器值一般是不同的,通过将不同厂商对应的寄存器值与厂商的对应关系存储到BMC内存中,可以得到一组与不同厂商对应的预设值(预设值可以是寄存器值本身也可以是与寄存器值对应的标识值,本实施例中对此不作限定),在基于BMC读取到指定Retimer卡上的IO Expander芯片寄存器的寄存器值(目标寄存器值)与一组预设值中的其中一个目标值对应的情况下,基于该目标值对应的厂商信息可以确定该Retimer卡的所属厂商。
例如,结合图3,在本实施例中,以目标设备中只使用了A和M两个厂商的Retimer卡,A厂卡的寄存器值为0x10,M厂卡的寄存器值为0x80为例,读取Retimer卡上用于识别Retimer卡厂商信息的IO Expander芯片寄存器值,记为reg_value(寄存器值),通过reg_value判断该Retimer卡是哪个厂商的,若reg_value等于0x10则判定为A厂卡(记为card_vendor=CARD_A),若reg_value等于0x80则判定为M厂卡(记为card_vendor=CARD_M),然后将厂商信息保存到OpenBMC下系统文件retimer_type中。
通过本实施例,通过BMC读取Retimer卡上用于识别Retimer卡厂商信息的IOExpander芯片寄存器值,可以提高Retimer卡厂商信息的获取效率和准确性。
在一个示例性实施例中,在读取指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值之后,上述方法还包括:
S21,在寄存器值读取失败的情况下,在目标设备的基板管理控制器BMC下的指定系统文件中写入指定信息,其中,指定系统文件为信号重整器类型文件,指定信息用于表示目标设备的Retimer卡槽位内未插入Retimer卡。
考虑到若不知道相应槽位上是否有Retimer卡就直接执行升级命令则会出现各种报错,在本实施例中,在读取指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值失败的情况下,认为当前槽位没有安装Retimer卡,通过在目标设备的基板管理控制器BMC下的指定系统文件中写入指定信息进行报错,即,指示目标设备的Retimer卡槽位内未插入Retimer卡。
例如,结合图4,在本实施例中,若读取失败(I2C访问失败)则认为当前槽位没有安装Retimer卡,在OpenBMC系统下文件retimer_type中写入NA(Not Available,不可用/不适用/无法获取),然后打印I2C访问报错信息并退出运行,若读取成功(I2C访问成功)则执行如图3所示步骤。
通过本实施例,在确认IO Expander芯片寄存器值读取失败的情况下,确定当前槽位没有安装Retimer卡,通过在指定位置写入指定信息进行报错,可以准确定位错误数据以便进行相应处理,提高固件升级效率。
在一个示例性实施例中,基于指定Retimer卡的固件文件,确定第二厂商信息,包括:
S31,以只读方式打开指定Retimer卡的固件文件,并将读取的指定Retimer卡的固件文件加载到目标设备的基板管理控制器BMC的BMC内存中;
S32,读取BMC内存中的指定Retimer卡的固件文件头部开始的连续N个字节,得到初始固件信息,其中,N为大于或者等于1的正整数;
S33,对初始固件信息进行移位拼接,得到移位拼接后的目标固件信息;
S34,在目标固件信息为一组预设固件信息中的目标固件信息的情况下,将与目标固件信息匹配的厂商信息,确定为第二厂商信息,其中,一组预设固件信息中的每个预设固件信息与一个厂商信息匹配。
为了便于基于BMC执行Retimer卡的固件升级操作,在从Retimer卡的制造商或官方网站上获取新版固件文件之后,可以以只读方式打开指定Retimer卡的固件文件,并将读取的指定Retimer卡的固件文件加载到目标设备的OpenBMC系统的BMC内存中。
一般情况下,固件文件的头部包含了一些特定的标识符或者固定格式的信息,其中可能包括了厂商信息,这些信息可能是以ASCII码的形式存储的,也可能以其他格式存储,本实施例中对此不做限定。
在本实施例中,从固件文件的头部获取厂商信息,可以包括以下步骤:
1.读取固件文件的头部:首先,打开固件文件,并从文件的开始位置读取连续的N个字节,N为大于或者等于1的正整数,本实施例中,N可以取3。
2.将这3个字节进行移位拼接:将这3个字节按照特定的规则进行移位拼接,形成一个字符串(目标固件信息)。移位拼接的规则可能因厂商而异,通常是将这3个字节按照ASCII码或其他编码进行拼接。
这里,在目标固件信息为一组预设固件信息中的目标固件信息的情况下,将与目标固件信息匹配的厂商信息,确定为第二厂商信息,其中,一组预设固件信息中的每个预设固件信息与一个厂商信息匹配。即,不同厂商对应的预设固件信息不同,在与各个厂商对应的一组预设固件信息中包括目标固件信息的情况下,将与目标固件信息匹配的厂商信息,确定为第二厂商信息。
例如,在本实施例中,以只读方式打开Retimer卡的固件文件,在打开文件失败的情况下,打印I2C访问报错信息并退出,在打开文件成功的情况下,将Retimer卡的固件文件加载到OpenBMC内存中,读取固件文件头部开始的连续3个字节并进行移位拼接,记为fw_header,fw(Firmware,固件版本),再根据该数值判断Retimer卡属于哪个厂商。根据两个厂商提供的信息,若fw_header等于0xA55AA5,则判定为A厂卡(记为fw_vendor=CARD_A),若fw_header等于0xE1104C则判定为M厂卡(记为fw_vendor=CARD_M)。
通过本实施例,通过读取固件文件的头数据确定固件文件所属厂商,可以提高固件文件厂商信息的获取效率和准确率。
在一个示例性实施例中,在对初始固件信息进行移位拼接,得到移位拼接后的目标固件信息之后,上述方法还包括:
S41,在目标固件信息不属于一组预设固件信息的情况下,打印目标报错信息,其中,目标报错信息用于描述指定Retimer卡的固件升级异常。
例如,在本实施例中,若fwheader为其他值就打印报错信息并退出,打印目标报错信息:固件头数据无效。
通过本实施例,在获取到的固件文件的头数据对应的目标固件信息不属于与各个厂商对应的预设固件信息的情况下,打印报错信息指示固件头数据无效,可以准确定位错误数据以便进行相应处理,提高固件升级效率。
在一个示例性实施例中,上述方法还包括:
S51,判断第一厂商信息和第二厂商信息是否为相同的厂商信息;
S52,在第一厂商信息和第二厂商信息为相同的厂商信息的情况下,将一组预设厂商信息作为当前厂商信息循环执行以下的匹配操作,其中,一组预设厂商信息中的每个厂商信息为一个预设厂商的厂商信息:在第一厂商信息和第二厂商信息与当前厂商信息相同的情况下,确定第一厂商和第二厂商为同一预设厂商,结束循环;在第一厂商信息和第二厂商信息与当前厂商信息不相同、且一组预设厂商信息中存在未执行过匹配操作的预设厂商信息的情况下,继续执行下一轮的匹配操作;在第一厂商信息和第二厂商信息与当前厂商信息不相同、且一组预设厂商信息中不存在未执行过匹配操作的预设厂商信息的情况下,结束循环;
在本实施例中,为了确保调用的Retimer卡固件升级函数是准确的,进而保证固件升级效率,在本实施例中,先判断需要升级的Retimer卡的厂商信息(第一厂商信息)和获取到的固件文件的厂商信息(第二厂商信息)是否为相同的厂商信息,在第一厂商信息和第二厂商信息为相同的厂商信息的情况下,通过依次与各个厂商对应的一组预设厂商信息进行比对确定属于哪个厂商,进而调用该厂商对应的Retimer卡固件升级函数对需要升级的Retimer卡执行固件升级操作。
在第一厂商和第二厂商为同一预设厂商的情况下,通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作,包括:
S53,在第一厂商和第二厂商为同一预设厂商的情况下,调用目标设备的基板管理控制器BMC的BMC内存中,与第一厂商对应的目标Retimer卡固件升级函数,以由目标Retimer卡固件升级函数从对应的BMC内存位置中读取出固件升级文件,并使用读取的固件升级文件执行固件升级操作。
这里,固件升级文件可以是指前述指定Retimer卡的固件文件,在指定Retimer卡对应的第一厂商和指定Retimer卡的固件文件对应的第二厂商为同一预设厂商的情况下,通过OpenBMC调用目标设备的OpenBMC内存中,与第一厂商(即,第二厂商)对应的目标Retimer卡固件升级函数,以由目标Retimer卡固件升级函数从对应的OpenBMC内存位置中读取出固件升级文件,并使用读取的固件升级文件执行固件升级操作。
例如,在本实施例中,对比Retimer卡设备的厂商信息card_vendor与固件文件的厂商信息fwvendor是否相匹配,若不匹配就打印固件无效报错信息并退出,若相匹配就进行下一步;若Retimer卡厂商信息card_vendor或固件文件信息fwvendor为A卡信息,就调用A卡的升级函数进行升级操作,若card_vendor或固件文件信息fwvendor不为A卡信息,就进行下一步;判断card_vendor或固件文件信息fwvendor是否为M卡,若不为M卡,就报错退出,打印卡与固件不匹配报错,若为M卡信息,就调用M卡的固件升级操作函数进行固件升级。
通过本实施例,通过判断Retimer卡厂商与固件文件厂商是否匹配,在确定卡厂商与固件文件厂商匹配的情况下,调用对应厂商的固件升级函数执行固件升级操作,可以避免在升级时出现固件文件与Retimer卡不符的错误,提高了设备维护效率。
在一个示例性实施例中,在通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作之后,上述方法还包括:
S61,基于目标Retimer卡固件升级函数的函数返回值,确定固件升级操作的升级操作执行结果,并打印执行结果信息,其中,执行结果信息用于指示升级操作执行结果。
为了确保固件升级操作成功并且新固件版本能够正常工作,在本实施例中,可以基于目标Retimer卡固件升级函数的函数返回值,确定固件升级操作的升级操作执行结果,即,基于函数返回值确定固件升级是否成功。
例如,在本实施例中,通过检查A卡或M卡的固件升级操作函数返回值是否为零判断固件升级操作是否成功,返回值为0指示成功,负数(乱码)表示失败,打印执行结果信息,执行结果信息用于指示升级操作执行结果。
通过本实施例,通过Retimer卡固件升级函数的函数返回值对Retimer卡固件升级是否成功进行验证,可以提高系统稳定性和可靠性,确保Retimer卡能够正常运行。
作为本申请的一种可选的示例性实施例,以服务器中只使用了Astera(简称A)和Montage(简称M)两个厂商的Retimer卡为例,对本申请实施例的固件升级方法进行解释说明。
目前,经常使用的Retimer卡来自Astera和Montage两家,但两家的Retimer卡固件文件、升级方法以及升级工具都不一样。一旦有大量机器需要进行Retimer卡固件版本更新、并且还有不同厂商的Retimer卡设备时,这样手动操作的效率极其低下,完成这一工作的时间需要很长的时间,并且也由于没有对Retimer卡的厂商信息进行校对,会带来固件与卡不匹配导致升级失败、无法启动等问题,同时,若不知道相应槽位上是否有Retimer卡就直接执行升级命令则会出现各种报错,而且会影响工作效率。
基于以上背景,本申请基于OpenBMC发明了一种Linux系统下归一化自动升级Retimer卡固件的方法,可以获取当前服务器上安装的Retimer卡厂商信息以及固件厂商信息,并判断是否匹配再决定进行升级,就可以解决Retimer卡更新固件效率低下、易出错、易报错的问题,即,在OpenBMC下提出了一种通过增加自动识别所使用的Retimer卡固件是来自哪个厂商,并判断是否可以升级的归一化自动升级Retimer卡固件的方法,从而可以有效解决上述问题。
结合图5,本申请实施例的固件升级方法可以包括如下步骤:
步骤S502,识别Retimer卡厂商信息;
读取Retimer卡上用于识别Retimer卡厂商信息的IO Expander芯片寄存器的寄存器值,判断并保存该Retimer卡的厂商信息到OpenBMC系统下retimer_type(Retimer类型)文件中,记为card_vendor(卡厂商信息)。
步骤S504,识别固件文件厂商信息;
打开Retimer厂商提供的固件文件,读取从文件头部开始的连续3个字节并进行移位拼接,再根据该数值判断Retimer卡属于哪个厂商,记为fw_vendor(固件供应商)。
步骤S506,判断Retimer卡card_vendor与固件文件fw_vendor是否都为A厂商信息;
对比Retimer卡设备的厂商信息card_vendor与固件文件的厂商信息fw_vendor是否相匹配,若不匹配就打印固件无效报错信息并退出,若相匹配就进行下一步;
若Retimer卡厂商信息card_vendor或固件文件信息fw_vendor为A卡信息,就调用A卡的升级函数进行升级操作,若card_vendor或固件文件信息fw_vendor不为A卡信息,就进行下一步。
步骤S508,判断Retimer卡card_vendor与固件文件fw_vendor是否都为M厂商信息;
判断card_vendor或固件文件信息fw_vendor是否为M卡,若不为M卡,就报错退出,若为M卡信息,就调用M卡的固件升级操作函数进行固件升级。
步骤S510,检查升级操作是否成功。
检查Retimer固件升级操作函数的执行结果,判断是否执行成功,并记录执行结果日志。
结合图6,具体地,本申请实施例的固件升级方法可以包括如下步骤:
步骤1,OpenBMC通过I2C读取Retimer卡上用于识别Retimer卡厂商信息的IOExpander芯片寄存器值,记为reg_value(寄存器值),通过reg_value判断该Retimer卡是哪个厂商的,若reg_value等于0x10则判定为A厂卡(记为card_vendor=CARD_A),若reg_value等于0x80则判定为M厂卡(记为card_vendor=CARD_M),然后将厂商信息保存到OpenBMC下系统文件retimer_type中,若reg_value等于其他值则打印寄存器数据失效并退出,若读取失败则认为当前槽位没有安装Retimer卡,在OpenBMC系统下文件retimer_type中写入NA,然后打印I2C访问报错信息并退出运行。
步骤2,以只读方式打开Retimer卡的固件文件,并加载到OpenBMC内存中,若打开文件失败则打印I2C访问报错信息并退出,若打开文件成功则读取固件文件头部开始的连续3个字节并进行移位拼接,记为fw_header,再根据该数值判断Retimer卡属于哪个厂商。根据两个厂商提供的信息,若fw_header等于0xA55AA5,则判定为A厂卡(记为固件厂商fw_vendor=CARD_A),若fw_header等于0xE1104C则判定为M厂卡(记为固件厂商fw_vendor=CARD_M),若fw_header为其他值就打印固件头数据无效报错信息并退出。
步骤3,判断Retimer卡的card_vendor以及固件文件fw_vendor是否都为A厂商信息,也即card_vendor=CARD_A与fw_vendor=CARD_A是否同时成立,若是则调用A厂商的Retimer卡固件升级函数astera_retimer_update进行升级操作,若则进行下一步。
步骤4,判断Retiner卡的card_vendor或固件文件fw_vendor是否为M厂商信息,也即card_vendor=CARD_M与fw_vendor=CARD_M是否同时成立,若是则调用M厂商的Retimer卡固件升级函数montage_retimer_update进行升级操作,若不为M厂商信息则打印卡余固件不匹配报错信息并退出。
步骤5,通过检查A卡或M卡的固件升级操作函数返回值是否为零判断固件升级操作是否成功,返回值为0指示成功,负数(乱码)表示失败,打印执行结果信息。
通过本申请实施例,通过加入读取厂商提供的固件文件头部信息并拼接组成可用于识别固件文件厂商的信息,再结合读取Retimer卡设备上的厂商识别信息,提出了一种在OpenBMC系统下的多厂商归一化自动升级Retimer卡固件的方法,即,通过新增根据不同厂商固件文件中的头部信息以及设备上可用于识别厂商信息的方式提出了一种多厂商Retimer卡归一化固件升级架构及方法,用于支持不同厂商Retimer卡固件升级,大大节省了在升级Retimer卡版本时所需要的人力、物力,并能避免在升级时出现固件文件与Retimer卡不符的错误,极大提高了服务器维护效率。
本领域技术人员可以理解的是,通过新增或添加其他厂商Retimer的设备识别信息以及固件头部信息,扩展成可支持更多不同厂商Retimer卡的固件升级工具。
需要说明的是,在本实施例中,除了考虑文件之间的依赖关系和约束条件,还可以考虑其他因素,例如设备之间的关联性、系统集成的关联性等,以建立更全面和细致的关联集合。可选地,还可以结合威胁情报和恶意行为分析,实时监控关联文件集合的安全状态,当检测到异常操作或恶意篡改时,及时触发预警和安全机制进行阻止或报警。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
根据本申请实施例的另一方面,还提供了一种固件升级装置,该装置用于实现上述实施例中所提供的固件升级方法,已经进行过说明的不再赘述。如以下所使用的,术语“模块″可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图7是本申请实施例提供的一种可选的固件升级装置的结构框图,如图7所示,该装置包括:
第一确定单元702,用于基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,指定芯片寄存器的寄存器值用于标识指定Retimer卡所属的厂商,第一厂商信息所表示的厂商为第一厂商;
第二确定单元704,用于基于指定Retimer卡的固件文件,确定第二厂商信息,其中,第二厂商信息所表示的厂商为第二厂商;
第一执行单元706,用于在第一厂商和第二厂商为同一预设厂商的情况下,通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作。
需要说明的是,该实施例中的第一确定单元702可以用于执行上述步骤S202,该实施例中的第二确定单元704可以用于执行上述步骤S204,该实施例中的第一执行单元706可以用于执行上述步骤S206。
通过本申请实施例,基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,指定芯片寄存器的寄存器值用于标识指定Retimer卡所属的厂商,第一厂商信息所表示的厂商为第一厂商;基于指定Retimer卡的固件文件,确定第二厂商信息,其中,第二厂商信息所表示的厂商为第二厂商;在第一厂商和第二厂商为同一预设厂商的情况下,通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作,进而解决了相关技术中的固件升级方法存在固件升级的效率低的问题。
在一个示例性实施例中,第一确定单元包括:
第一读取模块,用于读取指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值;
第一确定模块,用于在读取到目标寄存器值、且目标寄存器值为一组预设值中的目标值的情况下,将与目标值匹配的厂商信息,确定为第一厂商信息,其中,一组预设值中的每个预设值与一个厂商信息匹配。
在一个示例性实施例中,上述装置还包括:
写入单元,用于在读取指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值之后,在寄存器值读取失败的情况下,在目标设备的基板管理控制器BMC下的指定系统文件中写入指定信息,其中,指定系统文件为信号重整器类型文件,指定信息用于表示目标设备的Retimer卡槽位内未插入Retimer卡。
在一个示例性实施例中,第二确定单元包括:
第一执行模块,用于以只读方式打开指定Retimer卡的固件文件,并将读取的指定Retimer卡的固件文件加载到目标设备的基板管理控制器BMC的BMC内存中;
第二读取模块,用于读取BMC内存中的指定Retimer卡的固件文件头部开始的连续N个字节,得到初始固件信息,其中,N为大于或者等于1的正整数;
第二执行模块,用于对初始固件信息进行移位拼接,得到移位拼接后的目标固件信息;
第二确定模块,用于在目标固件信息为一组预设固件信息中的目标固件信息的情况下,将与目标固件信息匹配的厂商信息,确定为第二厂商信息,其中,一组预设固件信息中的每个预设固件信息与一个厂商信息匹配。
在一个示例性实施例中,上述装置还包括:
打印单元,用于在对初始固件信息进行移位拼接,得到移位拼接后的目标固件信息之后,在目标固件信息不属于一组预设固件信息的情况下,打印目标报错信息,其中,目标报错信息用于描述指定Retimer卡的固件升级异常。
在一个示例性实施例中,上述装置还包括:判断单元,用于判断第一厂商信息和第二厂商信息是否为相同的厂商信息;第二执行单元,用于在第一厂商信息和第二厂商信息为相同的厂商信息的情况下,将一组预设厂商信息作为当前厂商信息循环执行以下的匹配操作,其中,一组预设厂商信息中的每个厂商信息为一个预设厂商的厂商信息:在第一厂商信息和第二厂商信息与当前厂商信息相同的情况下,确定第一厂商和第二厂商为同一预设厂商,结束循环;在第一厂商信息和第二厂商信息与当前厂商信息不相同、且一组预设厂商信息中存在未执行过匹配操作的预设厂商信息的情况下,继续执行下一轮的匹配操作;在第一厂商信息和第二厂商信息与当前厂商信息不相同、且一组预设厂商信息中不存在未执行过匹配操作的预设厂商信息的情况下,结束循环;
第一执行单元包括:第三执行模块,用于在第一厂商和第二厂商为同一预设厂商的情况下,调用目标设备的基板管理控制器BMC的BMC内存中,与第一厂商对应的目标Retimer卡固件升级函数,以由目标Retimer卡固件升级函数从对应的BMC内存位置中读取出固件升级文件,并使用读取的固件升级文件执行固件升级操作。
在一个示例性实施例中,上述装置还包括:
第三执行单元,用于在通过调用与第一厂商对应的目标Retimer卡固件升级函数对指定Retimer卡执行固件升级操作之后,基于目标Retimer卡固件升级函数的函数返回值,确定固件升级操作的升级操作执行结果,并打印执行结果信息,其中,执行结果信息用于指示升级操作执行结果。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
根据本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序/指令,该计算机程序/指令包含用于执行流程图所示的方法的程序代码。在这样的实施例中,参考图8,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理器801执行时,执行本申请实施例提供的各种功能。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
参考图8,图8是本申请实施例提供的一种可选的电子设备的计算机系统的结构框图。
图8示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图。如图8所示,计算机系统800包括中央处理器801(Central Processing Unit,CPU),其可以根据存储在只读存储器802(Read-Only Memory,ROM)中的程序或者从存储部分808加载到随机访问存储器803(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器803中,还存储有系统操作所需的各种程序和数据。中央处理器801、在只读存储器802以及随机访问存储器803通过总线804彼此相连。输入/输出接口805(Input/Output接口,简称为I/O接口)也连接至总线804。
以下部件连接至输入/输出接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至输入/输出接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理器801执行时,执行本申请的系统中限定的各种功能。
需要说明的是,图8示出的电子设备的计算机系统800仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种固件升级方法,其特征在于,
包括:
基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,所述指定芯片寄存器的寄存器值用于标识所述指定Retimer卡所属的厂商,所述第一厂商信息所表示的厂商为第一厂商;
基于所述指定Retimer卡的固件文件,确定第二厂商信息,其中,所述第二厂商信息所表示的厂商为第二厂商;
在所述第一厂商和所述第二厂商为同一预设厂商的情况下,通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作。
2.根据权利要求1所述的方法,其特征在于,
所述基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,包括:
读取所述指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值;
在读取到目标寄存器值、且所述目标寄存器值为一组预设值中的目标值的情况下,将与所述目标值匹配的厂商信息,确定为所述第一厂商信息,其中,所述一组预设值中的每个预设值与一个厂商信息匹配。
3.根据权利要求2所述的方法,其特征在于,
在所述读取所述指定Retimer卡上的输入输出IO扩展芯片寄存器的寄存器值之后,所述方法还包括:
在寄存器值读取失败的情况下,在所述目标设备的基板管理控制器BMC下的指定系统文件中写入指定信息,其中,所述指定系统文件为信号重整器类型文件,所述指定信息用于表示所述目标设备的Retimer卡槽位内未插入Retimer卡。
4.根据权利要求1所述的方法,其特征在于,
所述基于所述指定Retimer卡的固件文件,确定第二厂商信息,包括:
以只读方式打开所述指定Retimer卡的固件文件,并将读取的所述指定Retimer卡的固件文件加载到所述目标设备的基板管理控制器BMC的BMC内存中;
读取所述BMC内存中的所述指定Retimer卡的固件文件头部开始的连续N个字节,得到初始固件信息,其中,N为大于或者等于1的正整数;
对所述初始固件信息进行移位拼接,得到移位拼接后的目标固件信息;
在所述目标固件信息为一组预设固件信息中的目标固件信息的情况下,将与所述目标固件信息匹配的厂商信息,确定为所述第二厂商信息,其中,所述一组预设固件信息中的每个预设固件信息与一个厂商信息匹配。
5.根据权利要求4所述的方法,其特征在于,
在所述对所述初始固件信息进行移位拼接,得到移位拼接后的目标固件信息之后,所述方法还包括:
在所述目标固件信息不属于所述一组预设固件信息的情况下,打印目标报错信息,其中,所述目标报错信息用于描述所述指定Retimer卡的固件升级异常。
6.根据权利要求1所述的方法,其特征在于,
所述方法还包括:判断所述第一厂商信息和所述第二厂商信息是否为相同的厂商信息;在所述第一厂商信息和所述第二厂商信息为相同的厂商信息的情况下,将一组预设厂商信息作为当前厂商信息循环执行以下的匹配操作,其中,所述一组预设厂商信息中的每个厂商信息为一个预设厂商的厂商信息:在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息相同的情况下,确定所述第一厂商和所述第二厂商为同一预设厂商,结束循环;在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息不相同、且所述一组预设厂商信息中存在未执行过所述匹配操作的预设厂商信息的情况下,继续执行下一轮的所述匹配操作;在所述第一厂商信息和所述第二厂商信息与所述当前厂商信息不相同、且所述一组预设厂商信息中不存在未执行过所述匹配操作的预设厂商信息的情况下,结束循环;
所述在所述第一厂商和所述第二厂商为同一预设厂商的情况下,通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作,包括:在所述第一厂商和所述第二厂商为同一预设厂商的情况下,调用所述目标设备的基板管理控制器BMC的BMC内存中,与所述第一厂商对应的所述目标Retimer卡固件升级函数,以由所述目标Retimer卡固件升级函数从对应的BMC内存位置中读取出固件升级文件,并使用读取的所述固件升级文件执行所述固件升级操作。
7.根据权利要求1至6中任一项所述的方法,其特征在于,
在所述通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作之后,所述方法还包括:
基于所述目标Retimer卡固件升级函数的函数返回值,确定所述固件升级操作的升级操作执行结果,并打印执行结果信息,其中,所述执行结果信息用于指示所述升级操作执行结果。
8.一种固件升级装置,其特征在于,
包括:
第一确定单元,用于基于目标设备的指定信号重整器Retimer卡上的指定芯片寄存器的寄存器值,确定第一厂商信息,其中,所述指定芯片寄存器的寄存器值用于标识所述指定Retimer卡所属的厂商,所述第一厂商信息所表示的厂商为第一厂商;
第二确定单元,用于基于所述指定Retimer卡的固件文件,确定第二厂商信息,其中,所述第二厂商信息所表示的厂商为第二厂商;
第一执行单元,用于在所述第一厂商和所述第二厂商为同一预设厂商的情况下,通过调用与所述第一厂商对应的目标Retimer卡固件升级函数对所述指定Retimer卡执行固件升级操作。
9.一种计算机可读存储介质,其特征在于,
所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法。
10.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,
所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410038719.8A CN117762453A (zh) | 2024-01-10 | 2024-01-10 | 固件升级方法及装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410038719.8A CN117762453A (zh) | 2024-01-10 | 2024-01-10 | 固件升级方法及装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117762453A true CN117762453A (zh) | 2024-03-26 |
Family
ID=90320002
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410038719.8A Pending CN117762453A (zh) | 2024-01-10 | 2024-01-10 | 固件升级方法及装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117762453A (zh) |
-
2024
- 2024-01-10 CN CN202410038719.8A patent/CN117762453A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101143679B1 (ko) | 자동 펌웨어 복원 | |
WO2019056475A1 (zh) | 测试任务自动化管理方法、装置、设备及存储介质 | |
CN105045671B (zh) | 一种智能终端的系统升级方法及装置 | |
CN117194306A (zh) | 设备信息显示方法及系统 | |
CN111045710A (zh) | 一种基于IPMI命令的SAS-Expander固件升级的方法、设备及介质 | |
CN113672306B (zh) | 服务器组件自检异常恢复方法、装置、系统及介质 | |
CN110308923A (zh) | 一种ota升级的测试方法及其系统 | |
CN116382968B (zh) | 外部设备的故障检测方法以及装置 | |
CN117762453A (zh) | 固件升级方法及装置、存储介质及电子设备 | |
CN114065887B (zh) | 一种光纤资源管理方法、装置、电子设备及存储介质 | |
CN112256554B (zh) | 一种基于场景测试用例进行测试的方法及设备 | |
CN113869108B (zh) | 一种识别硬盘背板连接的设备的方法及相关装置 | |
CN117608618B (zh) | 服务器固件升级方法及装置、存储介质和电子设备 | |
CN113377409B (zh) | 一种稳定bios更新的方法、设备及存储介质 | |
CN114443352A (zh) | 系统检修方法、装置、终端设备及可读存储介质 | |
CN118193269A (zh) | 一种服务器宕机故障位置获取方法、装置及程序产品 | |
CN116208603A (zh) | 车机升级控制方法、系统及电子设备 | |
CN116578744A (zh) | 运维知识库中运维知识的检测方法及系统、装置 | |
CN116893928A (zh) | 故障内存的监管方法、系统、终端及存储介质 | |
CN117675576A (zh) | 一种服务器固件升级方法、装置、服务器及电子设备 | |
CN117348905A (zh) | Bmc固件更新方法、系统、终端及存储介质 | |
CN116991613A (zh) | 故障修复方法、装置、用户终端、电子设备及可读介质 | |
CN118467000A (zh) | Cpld固件的更新方法及系统 | |
CN115827359A (zh) | 告警验证方法及测试机 | |
CN116414409A (zh) | 一种基于高通的多efs版本烧录的方法、装置和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |