一种服务器电源不间断输出的固件刷新方法和系统与流程

文档序号:23101176发布日期:2020-11-27 13:09阅读:150来源:国知局
一种服务器电源不间断输出的固件刷新方法和系统与流程

本发明服务器电源技术领域,特别涉及一种服务器电源不间断输出的固件刷新方法和系统。



背景技术:

psu中包含mcu,mcu中运行控制电压变换和通讯功能的程序,mcu中的程序称为固件。psu出厂后,如果发现原程序存在bug或者客户发生需求变更,就需要升级psu中的固件。初始化程序是在psu运行主程序之前执行的一段小程序,通过这段小程序,我们可以初始化硬件设备i/o,并建立内存空间映射。

现有技术中,psu通过在线刷新的方式升级固件时,现有方案是先擦除flash中的原有固件,然后写入新的固件,写入完成后运行新的固件。如图1给出了现有技术中psu通过在线刷新的方式升级固件的方法流程图。现有技术中,psu开始擦除flash中的原有固件后,由于flash中没有用来执行电压转换的固件,因此psu在线刷新过程中无法提供功率输出。对服务器来说,正在刷新的psu无法提供功率输出,就必须有另一台psu为服务器的工作提供能量,所以使用psu在线刷新功能的服务器至少需要配置两台psu,也就是冗余电源配置。冗余电源配置本身是为了提高服务器的供电可靠性,但是,在psu固件刷新过程中,有一个psu无法提供输出,电源的冗余性丢失,只能工作在单电源供电的状态下,降低了服务器整体的供电可靠性。



技术实现要素:

为了解决上述技术问题,本发明提出一种服务器电源不间断输出的固件刷新方法和系统,实现服务器电源在不间断输出的固件在线刷新。

为实现上述目的,本发明采用以下技术方案:一种服务器电源不间断输出的固件刷新方法,包括以下步骤:

一种服务器电源不间断输出的固件刷新方法,包括以下步骤:

接收固件刷新的命令;

所述固件包括第一固件以及与第一固件为镜像关系的第二固件;对第二固件进行刷新,并在所述第二固件刷新时,第一固件运行使电源保持输出。

进一步的,所述第二固件刷新完成后得到第三固件,根据第三固件和第一固件分别对i/o和内存初始化的需求区别,对第三固件和第一固件之间差异部分进行初始化。

进一步的,所述对第三固件和第一固件之间差异部分进行初始化后,从第一固件切换至第三固件。

进一步的,所述从第一固件切换至第三固件后,根据预设地址读取静态随机存取存储器中的运行变量,使第三固件和第一固件衔接。

进一步的,所述根据预设地址读取静态随机存取存储器中的运行变量的方法为:

在静态随机存取存储器中设置判定切换的flag变量和切换地址变量;

在第二固件刷新完成后,将判定切换的flag变量置于1,使第一固件运行至当前主循环最后时,跳转至切换地址变量指向的位置;所述位置为第三固件运行主循环的初始位置;

在所述第三固件运行主循环的第一个循环中,从静态随机存取存储器中读取第一固件所需迭代计算的变量,进而做到第三固件和第一固件衔接。

进一步的,所述第一固件所需迭代计算的变量包括堆栈追踪器、补偿计算和计时器。

本发明还提出了一种服务器电源不间断输出的固件刷新系统,包括接收模块、固件存储模块和刷新模块;

所述接收模块用于接收固件刷新的命令;

所述固件存储模块用于存储第一固件和存储与第一固件为镜像关系的第二固件;

所述刷新模块用于对第二固件进行刷新,并在所述第二固件刷新时,第一固件运行使电源保持输出。

进一步的,所述系统还包括:初始化模块、切换模块和衔接模块;

所述初始化模块用于第二固件刷新完成后得到第三固件,根据第三固件和第一固件分别对i/o和内存初始化的需求区别,对第三固件和第一固件之间差异部分进行初始化;

所述切换模块用于对第三固件和第一固件之间差异部分进行初始化后,从第一固件切换至第三固件;

所述衔接模块用于从第一固件切换至第三固件后,根据预设地址读取静态随机存取存储器中的运行变量,使第三固件和第一固件衔接。

一种处理设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现一种服务器电源不间断输出的固件刷新方法的步骤。

一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现一种服务器电源不间断输出的固件刷新方法的步骤。

发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:

本发明提出了一种服务器电源不间断输出的固件刷新方法和系统,该方法包括:接收固件刷新的命令;其中,固件包括第一固件以及与第一固件为镜像关系的第二固件;对第二固件进行刷新,并在第二固件刷新时,第一固件运行使电源保持输出。第二固件刷新完成后得到第三固件,根据第三固件和第一固件分别对i/o和内存初始化的需求区别,对第三固件和第一固件之间差异部分进行初始化。对第三固件和第一固件之间差异部分进行初始化后,从第一固件切换至第三固件。从第一固件切换至第三固件后,根据预设地址读取静态随机存取存储器中的运行变量,使第三固件和第一固件衔接。基于本发明提出的一种服务器电源不间断输出的固件刷新方法,还提出了一种服务器电源不间断输出的固件刷新系统、处理器和一种可读存储介质。本发明中为了避免擦除存储设备中的第一固件之后没有可以运行的固件,在第二固件进行刷新时,第一固件保持运行,使电源不中断输出,第二固件为第一固件的镜像固件。通过对初始化的区分处理,避免在第一固件和第三固件切换过程中初始化导致的输出中断。通过变量地址固定化处理,将第一固件运行过程中的堆栈追踪器、补偿计算、计时器等变量无缝继承到第三固件,实现服务器电源在不间断输出的固件在线刷新。

附图说明

如图1为现有技术中psu通过在线刷新的方式升级固件的方法流程图;

如图2为本发明实施例1一种服务器电源不间断输出的固件刷新方法流程图;

如图3为本发明实施例2一种服务器电源不间断输出的固件刷新系统示意图。

为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

实施例1

本发明实施例1提出了一种服务器电源不间断输出的固件刷新方法,实现了服务器电源在不间断输出的固件在线刷新。

如图2给出了本发明实施例1一种服务器电源不间断输出的固件刷新方法流程图。

在步骤s201中,接收固件刷新的命令,固件开始刷新。

在步骤s202中,其中,固件包括第一固件以及与第一固件镜像关系的第二固件,对第二固件进行刷新,并在第二固件刷新时,第一固件运行使电源保持输出。在本发明实施例1中,第一固件所在的存储模块为flasha,与第一固件对称镜像关系的第二固件所在存储模块为flashb。

在步骤s203中,执行“擦除flashb中的第二固件->在flashb中写入新固件即为第三固件”,在flashb的擦除和更新过程中,flasha中第一固件内容不变,可以正常运行。

在步骤s204中,判断写入是否成功,如果写入成功,执行步骤s205,如果写入失败,执行步骤s209。

在步骤s205中,在第二固件刷新完成后,对第三固件和第一固件之间变更部分初始化。

本发明中简化主程序前的初始化代码,仅将主程序中必需的i/o和内存映射放入初始化代码中,并提供两种初始化程序,分情况处理。第一种情况是psu第一次上电开机运行旧程序,初始化i/o并建立内存映射;第二种情况是psu更新固件并运行新的主程序,由于更新固件前已经完成了i/o初始化和内存映射,因此,仅需在跳转前比较第三固件和第一固件分别对i/o和内存初始化的需求区别,未变更的部分不用重新初始化,固件更新一般不修改i/o和内存初始化内容,因此,固件更新完成后,一般不需要重新初始化。

运行flasha中的第一固件,保持电源输出,直到切换为flashb中的第三固件,切换时间小于10us。

在步骤s206中,第一固件切换至第三固件,运行第三固件,其中切换时间小于10us。在本发明实施例1中,运行flashb中的第三固件。

在步骤s207中,根据预设地址读取静态随机存取存储器中的运行变量,使第三固件和第一固件衔接。在现有技术中对变量地址缺少统一规划,部分变量在sram(静态随机存取存储器)中的存储位置是在子程序运行前确定,程序运行完成后地址回收,并在下次运行时重新确定变量地址,导致第一固件的变量地址和第三固件的变量地址不对应,变量数值无法继承。

为了实现第一固件与第三固件之间的无缝衔接,保障服务器电源的不间断输出,还需要在sram(静态随机存取存储器)内设置判定切换的flag变量和切换地址变量,在程序主循环的最后增加条件判定,如果判定切换的flag变量数值为1,则跳出当前程序主循环,并跳转到切换地址变量所指向的位置继续运行。

本发明实施例1中,flashb区内的第二固件刷新完成后,将切换flag变量置1,第一固件运行至当前主循环最后一行后,就会跳转到刷新后固件主循环初始位置继续运行,刷新后固件主循环运行时,在第一个循环中就能够从sram中读取第一固件所存储的堆栈追踪器、补偿计算、计时器等需要迭代计算的变量,与第一固件的最后一个循环无缝衔接。

在步骤s208中,实现服务器电源的不间断输出。

在步骤s209中,运行flasha中的第一固件。

在步骤s210中,保持电源输出。

在步骤s211中,等待下次刷新。

在步骤s212中,固件刷新完成。

本发明将flash分为a区和b区,不仅可以实现不间断输出的固件在线刷新,还能避免刷新过程中出现意外导致的固件损坏。按照现有方案,擦除flasha中的第一固件之后,如果在写入第三固件过程中发生数据传输通讯故障或者单片机供电故障,第三固件无法按照预期成功写入,会导致整个mcu中没有可以使用的固件,mcu无法执行功能,psu损坏,服务器在很长一段时间内只能处于单个电源供电的状态,供电可靠性低。按照本发明flash分区方案,由于flashb擦除和写入过程中,flasha中的第一固件始终完好运行,如果传输过程中发生意外情况导致flashb中没有写入完整的固件,mcu可以继续运行flasha中的第一固件,不影响服务器的正常工作。

实施例2

基于本发明提出的一种服务器电源不间断输出的固件刷新方法,还提出了一种服务器电源不间断输出的固件刷新系统,如图3给出了本发明实施例2一种服务器电源不间断输出的固件刷新系统示意图。该系统包括接收模块、固件存储模块和刷新模块;接收模块用于接收固件刷新的命令;固件存储模块用于存储第一固件和存储与第一固件为镜像关系的第二固件;刷新模块用于对第二固件进行刷新,并在第二固件刷新时,第一固件运行使电源保持输出。

系统还包括:初始化模块、切换模块和衔接模块;初始化模块用于第二固件刷新完成后得到第三固件,根据第三固件和第一固件分别对i/o和内存初始化的需求区别,对第三固件和第一固件之间差异部分进行初始化;切换模块用于对第三固件和第一固件之间差异部分进行初始化后,从第一固件切换至第三固件;衔接模块用于从第一固件切换至第三固件后,根据预设地址读取静态随机存取存储器中的运行变量,使第三固件和第一固件衔接。

本发明还提出了一种处理设备,包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序时实现一种服务器电源不间断输出的固件刷新方法的步骤。

本发明还提出了一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现一种服务器电源不间断输出的固件刷新方法的步骤。

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制。对于所属领域的技术人员来说,在上述说明的基础上还可以做出其它不同形式的修改或变形。这里无需也无法对所有的实施方式予以穷举。在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1