一种死机信息的保存方法和装置与流程

文档序号:16327071发布日期:2018-12-19 05:58阅读:207来源:国知局
一种死机信息的保存方法和装置与流程

本发明涉及计算机领域,特别是涉及一种死机信息的保存方法和装置。

背景技术

死机信息,对于分析故障产生的原因有着重要的作用。一般情况下,系统会在死机发生的时候将死机信息保存到flash中,但是有时候有些死机情况比较严重,导致系统无法及时响应,从而致使在死机的时候,无法保存死机信息。将这些死机情况比较严重称之为严重死机现象,在发生严重死机现象的时候,由于无法保存死机信息导致死机信息丢失,从而使得无法进行故障分析,无法对故障进行还原分析。

针对上述问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明提供一种死机信息的保存方法和装置,用以解决现有技术中在系统异常死机重启的情况下,无法有效保存死机信息,使得后续无法对故障进行有效分析的技术问题。

为解决上述技术问题,一方面,本发明提供一种死机信息的保存方法,包括:在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位;在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中;将第二看门狗配置为软件喂狗,在第二看门狗喂狗超时的情况下,复位整板的所有器件。

可选地,在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位包括:在系统死机无响应的情况下,软件停止对上述第一看门狗进行软件喂狗;在喂狗超时的情况下,上述第一看门狗对上述cpu进行复位,并设置第一标识,其中,上述第一标识用于标识系统为异常重启。

可选地,在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中的过程中包括:确定是否成功设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中;在未成功的的情况下,重新尝试设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中,并记录重试的次数;在重试次数超出预设阈值的情况下,放弃设置第一看门狗和第二看门狗为硬件喂狗模式。

可选地,通过软件进行软件喂狗,通过可编程逻辑器件进行硬件喂狗。

可选地,上述死机信息包括以下至少之一:内存镜像信息、整板中一个或多个器件的寄存器信息。

可选地,在确定系统为异常重启的情况下,第一看门狗对cpu进行复位之前,上述方法还包括:在系统运行过程中,软件持续更新当前的栈指针到预设的内存地址;在复位整板的所有器件之后,上述方法还包括:通过查看死机时的栈指针,查看数据信息。

另一方面,本发明还提供了一种死机信息的保存装置,包括:控制模块,用于在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位;保存模块,用于在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中;复位模块,用于将第二看门狗配置为软件喂狗,在第二看门狗喂狗超时的情况下,复位整板的所有器件。

可选地,上述控制模块包括:暂停单元,用于在系统死机无响应的情况下,软件停止对上述第一看门狗进行软件喂狗;控制单元。用于在喂狗超时的情况下,上述第一看门狗对上述cpu进行复位,并设置第一标识,其中,上述第一标识用于标识系统为异常重启。

可选地,上述保存模块包括:确定单元,用于确定是否成功设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中;重试单元,用于在未成功的的情况下,重新尝试设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中,并记录重试的次数;放弃单元,用于在重试次数超出预设阈值的情况下,放弃设置第一看门狗和第二看门狗为硬件喂狗模式。

可选地,上述死机信息的保存装置还包括:更新模块,用于在确定系统为异常重启的情况下,第一看门狗对cpu进行复位之前,在系统运行过程中,软件持续更新当前的栈指针到预设的内存地址;查看模块,用于在复位整板的所有器件之后,通过查看死机时的栈指针,查看数据信息。

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

本发明有益效果如下:在确定系统异常重启的情况下,通过设置两个看门狗,通过设置第一个看门狗仅对cpu进行复位,从而使得系统可以对死机信息进行保存,然后再通过第二个看门狗实现对整板的复位,以实现系统的重启,从而使得在系统发生严重死机现象的情况下,也可以有效保存死机信息,解决了现有技术中在系统异常死机重启的情况下,无法有效保存死机信息,使得后续无法对故障进行有效分析的技术问题,达到了在系统严重死机的情况下,也可以有效保存死机信息的技术效果。

附图说明

图1是本发明实施例中死机信息的保存方法的方法流程图;

图2是本发明实施例中死机信息的保存装置的结构框图;

图3是本发明实施例中系统架构示意图;

图4是本发明实施例中死机信息保存方法的方法流程图。

具体实施方式

为了解决现有技术中在系统异常死机重启的情况下,无法有效保存死机信息,使得后续无法对故障进行有效分析的技术问题,本发明提供了一种死机信息的保存方法和装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

在本例中,如图1所示,提供了一种死机信息的保存方法,可以包括如下步骤:

步骤101:在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位;

步骤102:在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中;

步骤103:将第二看门狗配置为软件喂狗,在第二看门狗喂狗超时的情况下,复位整板的所有器件。

在上例中,在确定系统异常重启的情况下,通过设置两个看门狗,通过设置第一个看门狗仅对cpu进行复位,从而使得系统可以对死机信息进行保存,然后再通过第二个看门狗实现对整板的复位,以实现系统的重启,从而使得在系统发生严重死机现象的情况下,也可以有效保存死机信息,解决了现有技术中在系统异常死机重启的情况下,无法有效保存死机信息,使得后续无法对故障进行有效分析的技术问题,达到了在系统严重死机的情况下,也可以有效保存死机信息的技术效果。

考虑到从系统死机到重启是有一个过程中,在这个过程中需要多个器件的配合,为了实现对系统信息的有效记录,以便使得各个部件可以有效配合,可以通过设置标识的方式达到这个目的。在一个实施方式中,在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位的时候,可以在系统死机无响应的情况下,软件停止对上述第一看门狗进行软件喂狗;在喂狗超时的情况下,上述第一看门狗对上述cpu进行复位,并设置第一标识,其中,上述第一标识用于标识系统为异常重启。

具体的,可编程逻辑器件可以提供两个寄存器:一个crash_flag寄存器,用于记录是否有异常重启现象;一个dump_retry寄存器,用于记录尝试进入dump模式的次数。在确定出存在异常重启情况时,就在该crash_flag寄存器中记录一个标识,用于标识系统为异常重启。例如,可以设置crash_flag寄存器初值为0;其中,对于crash_flag寄存器而言,0表示系统正常重启,1表示系统异常重启。

为了实现对死机信息的有效保存,可以通过设置第一看门狗芯片和第二看门狗芯片,通过可编程逻辑器件连接这两个新品,第一看门狗芯片连接至cpu复位信号,第二看门狗芯片连接至整板复位信号。如果第一看门狗芯片重启,仅会重启cpu,其它器件可以保持复位前的状态。

考虑到有时存在异常重启的时候,希望进行保存死机信息的状态或者模式,但是进不去的情况,如果系统一直尝试进入该模式,那么识别会导致系统混乱,为此考虑到可以设置一个重试次数,如果超出重试次数,则可以放弃,以保证系统可以有序执行。在一个实施方式中,在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中的过程中可以包括:确定是否成功设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中;在未成功的的情况下,重新尝试设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中,并记录重试的次数;在重试次数超出预设阈值的情况下,放弃设置第一看门狗和第二看门狗为硬件喂狗模式。即,确定是否成功进入异常处理模式,如果多次尝试未进入异常处理模式,那么就放弃进行异常处理模式。

在进行看门狗喂狗的时候,可以通过软件进行软件喂狗,通过可编程逻辑器件进行硬件喂狗,即,可以根据需要选择不同的喂狗方式。

上述的死机信息可以包括但不限于以下至少之一:内存镜像信息、整板中一个或多个器件的寄存器信息。

为了实现对数据的读取和查看,可以通过设置栈指针的方式进行,具体的,可以在确定系统为异常重启的情况下,第一看门狗对cpu进行复位之前,在系统运行过程中,软件持续更新当前的栈指针到预设的内存地址;这样在复位整板的所有器件之后,可以通过查看死机时的栈指针,查看数据信息。例如,可以通过查看死机时的栈指纹,进行栈回溯、查看变量、代码段和数据等信息。通过查看关键器件的寄存器信息,可以分析出问题模块的状态。

上例所提供的死机信息的保存方法可以应用在嵌入式领域,可以通过硬件设计和可编程逻辑器件编写。

基于同一发明构思,本发明实施例中还提供了一种死机信息的保存装置,如下面的实施例上述。由于死机信息的保存装置解决问题的原理与死机信息的保存方法相似,因此死机信息的保存装置的实施可以参见死机信息的保存方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图2是本发明实施例的死机信息的保存装置的一种结构框图,如图2所示,可以包括:控制模块201、保存模块202和复位模块203,下面对该结构进行说明。

控制模块201,用于在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位;

保存模块202,用于在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中;

复位模块203,用于将第二看门狗配置为软件喂狗,在第二看门狗喂狗超时的情况下,复位整板的所有器件。

在一个实施方式中,控制模块201可以包括:暂停单元,用于在系统死机无响应的情况下,软件停止对上述第一看门狗进行软件喂狗;控制单元。用于在喂狗超时的情况下,上述第一看门狗对上述cpu进行复位,并设置第一标识,其中,上述第一标识用于标识系统为异常重启。

在一个实施方式中,保存模块202可以包括:确定单元,用于确定是否成功设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中;重试单元,用于在未成功的的情况下,重新尝试设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中,并记录重试的次数;放弃单元,用于在重试次数超出预设阈值的情况下,放弃设置第一看门狗和第二看门狗为硬件喂狗模式。

在一个实施方式中,上述死机信息的保存装置还可以包括:更新模块,用于在确定系统为异常重启的情况下,第一看门狗对cpu进行复位之前,在系统运行过程中,软件持续更新当前的栈指针到预设的内存地址;查看模块,用于在复位整板的所有器件之后,通过查看死机时的栈指针,查看数据信息。

在本例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如下步骤:

s1:在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位;

s2:在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中;

s3:将第二看门狗配置为软件喂狗,在第二看门狗喂狗超时的情况下,复位整板的所有器件。

即,在确定系统异常重启的情况下,通过设置两个看门狗,通过对第一个看门狗仅对cpu进行复位,从而使得系统可以对死机信息进行保存,然后再通过第二个看门狗实现对整板的复位,以实现系统的重启,从而使得在系统发生严重死机现象的情况下,也可以有效保存死机信息,解决了现有技术中在系统异常死机重启的情况下,无法有效保存死机信息,使得后续无法对故障进行有效分析的技术问题,达到了在系统严重死机的情况下,也可以有效保存死机新呃技术效果。

考虑到从系统死机到重启是有一个过程中,在这个过程中需要多个器件的配合,为了实现对系统信息的有效记录,以便使得各个部件可以有效配合,可以通过设置标识的方式达到这个目的。在一个实施方式中,在确定系统为异常重启的情况下,控制第一看门狗对cpu进行复位的时候,可以在系统死机无响应的情况下,软件停止对上述第一看门狗进行软件喂狗;在喂狗超时的情况下,上述第一看门狗对上述cpu进行复位,并设置第一标识,其中,上述第一标识用于标识系统为异常重启。

具体的,可编程逻辑器件可以提供两个寄存器:一个crash_flag寄存器,用于记录是否有异常重启现象;一个dump_retry寄存器,用于记录尝试进入dump模式的次数。在确定出存在异常重启情况时,就在该crash_flag寄存器中记录一个标识,用于标识系统为异常重启。例如,可以设置crash_flag寄存器初值为0;其中,对于crash_flag寄存器而言,0表示系统正常重启,1表示系统异常重启。

为了实现对死机信息的有效保存,可以通过设置第一看门狗芯片和第二看门狗芯片,通过可编程逻辑器件连接这两个新品,第一看门狗芯片连接至cpu复位信号,第二看门狗芯片连接至整板复位信号。如果第一看门狗芯片重启,仅会重启cpu,其它器件可以保持复位前的状态。

考虑到有时存在异常重启的时候,希望进行保存死机信息的状态或者模式,但是进不去的情况,如果系统一直尝试进入该模式,那么识别会导致系统混乱,为此考虑到可以设置一个重试次数,如果超出重试次数,则可以放弃,以保证系统可以有序执行。在一个实施方式中,在cpu复位后,设置第一看门狗和第二看门狗为硬件喂狗模式,将死机信息保存至闪存中的过程中可以包括:确定是否成功设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中;在未成功的的情况下,重新尝试设置第一看门狗和第二看门狗为硬件喂狗模式将死机信息保存至闪存中,并记录重试的次数;在重试次数超出预设阈值的情况下,放弃设置第一看门狗和第二看门狗为硬件喂狗模式。即,确定是否成功进入异常处理模式,如果多次尝试未进入异常处理模式,那么就放弃进行异常处理模式。

在进行看门狗喂狗的时候,可以通过软件进行软件喂狗,通过可编程逻辑器件进行硬件喂狗,即,可以根据需要选择不同的喂狗方式。

上述的死机信息可以包括但不限于以下至少之一:内存镜像信息、整板中一个或多个器件的寄存器信息。

为了实现对数据的读取和查看,可以通过设置栈指针的方式进行,具体的,可以在确定系统为异常重启的情况下,第一看门狗对cpu进行复位之前,在系统运行过程中,软件持续更新当前的栈指针到预设的内存地址;这样在复位整板的所有器件之后,可以通过查看死机时的栈指针,查看数据信息。例如,可以通过查看死机时的栈指纹,进行栈回溯、查看变量、代码段和数据等信息。通过查看关键器件的寄存器信息,可以分析出问题模块的状态。

下面结合一个具体实施例对上述死机信息的保存方法和装置进行说明,然而,值得注意的是,该具体实施例仅是为了更好地说明本申请,并不构成对本申请的不当限定。

为了解决现有的死机处理过程存在的cpu彻底失去响无法记录死机信息的问题,在本例中,通过在系统完全失去响应时恢复系统,并记录死机信息,以达到严重死机情况发生时记录死机信息的目的。

在系统正常运行的时候,不断更新当前栈的指针到内存中,在系统需要异常重启的时候,进入异常处理模式(简称为dump模式),在该异常处理模式中保存死机信息,其中,死机信息可以包括:完整的内存镜像和关键器件寄存器状态信息等。

基于上述构思,在本例中提供了一种保存死机信息的方法,以便在不影响系统正常重启的情况下,能够在严重死机现象发生的情况下,保存死机信息用于故障分析。可以包括如下步骤:

s1:可编程逻辑器件连接两片看门狗芯片,第一片看门狗芯片接至cpu复位信号,第二片看门狗芯片接至整板的复位信号(即,包含cpu和其它所有器件的复位信号)。如果第一片看门狗芯片重启,那么只会重启cpu,其他器件(例如:ddr、dsp等)的状态可保持复位前的状态。

s2:通过可编程逻辑器件,控制看门狗芯片的配置。可编程逻辑器件提供两个寄存器:一个crash_flag寄存器,用于记录是否有异常重启现象;一个dump_retry寄存器,用于记录尝试进入dump模式的次数。

可编程逻辑器件的初值配置为:第一片看门狗芯片和第二片看门狗芯片都配置为硬件喂狗,由可编程逻辑器件进行喂狗;crash_flag寄存器初值为0;dump_retry寄存器初值为0。其中,对于crash_flag寄存器而言,0表示系统正常重启,1表示系统异常重启。

s3:系统boot阶段,在代码迁移至内存之前,读取crash_flag寄存器,判断是否有异常重启。crash_flag=1,表示系统上次重启为异常重启,那么进入异常处理模式(即,dump模式),进入步骤s4;crash_flag=0,表示系统上次重启为正常重启,继续正常运行,进入步骤s5:。在代码迁移至内存之前进行判断,可以防止boot修改内存内容,即,如果上次重启时异常重启导致,此时内存内容与异常发生时相同。

s4:尝试进入dump模式:

1)如果进入dump模式成功,那么将第一片看门狗芯片和第二片看门狗芯片都配置为硬件喂狗,设置dump_retry=0,并保存死机信息(例如:完整的内存镜像和关键器件寄存器状态等)到flash中。在保存操作结束之后,配置可编程逻辑器件寄存器crash_flag=0,并将第一片看门狗芯片配置为软件喂狗,复位整板所有器件,重新进入步骤s3。此时,死机信息(即,完整内存镜像等)与异常发生时是相同的。

2)如果进入dump模式失败,那么此时可编程逻辑器件未重启,第一片看门狗芯片为软件喂狗,第二片看门狗芯片为硬件喂狗。因此,固定重启时间后(随选用器件的不同,重启时间不同)cpu再次重启,重新进入步骤s3,此时crash_flag=1,表明重试进入dump模式。将重试次数记录到dump_retry。当重试次数大于3次,可以配置可编程逻辑器件寄存器crash_flag=0,dump_retry=0,表示系统放弃进入dump模式。

s5:boot继续正常运行,boot阶段配置crash_flag=1。等到软件可以进行软件喂狗阶段(一般为内核阶段),配置两片看门狗芯片,第一片看门狗芯片配置为软件喂狗,由软件进行喂狗,第二片看门狗芯片配置为硬件喂狗,由可编程逻辑器件进行喂狗,并且在当前执行函数入栈时,不断更新堆栈指针存到固定内存地址中。

s6:运行过程中可能碰到以下三种重启情况:

1)死机重启:可以认为是异常重启,此时,第一片看门狗芯片没有软件喂狗,固定重启时间后(随选用器件的不同,重启时间不同)cpu重启,其他器件不重启,此时除cpu,其它器件都将保持重启前的状态,在本例中主要是要保存内存和关键器件的寄存器信息。将回到步骤s3,由于此时crash_flag=1,最终将进入dump模式中保存死机信息。

2)手动重启:可以认为是正常重启,此时通过软件配置crash_flag=0,整板所有器件复位,将回到步骤s3。

3)断电重启:可以认为是正常重启,整板所有器件断电重启,将回到步骤s3.。

通过上例的保存死机信息的方法,可以在系统无响应的死机情况下,有效地保存死机信息。

下面以一个具体实例进行说明如下:

在本例中,如图3所示。除了使用系统主体外,主要由可编程逻辑器件(可以是cpld或fpga等器件,下文简称逻辑器件)和两片看门狗芯片(下文中简称看门狗1和看门狗2)组成。

逻辑器件输出两路看门狗输入信号(mdi_1,mdi_2),分别输入到两片看门狗芯片的看门狗输入(mdi)管脚,看门狗1的输出rest管脚连接至系统的cpu复位信号(cpureset),看门狗2的输出复位管脚(reset)连接至系统的整板复位信号(systemreset)。

在本实例中,以死机异常发生,系统无响应的情况为例进行说明,结合图4所示,保存死机信息方法的具体包括如下步骤:

步骤s1:系统运行过程中,软件不断更新当前栈指针到固定的内存地址,当系统死机无响应时,软件停止喂狗,喂狗超时之后,看门狗1对cpu进行复位。此时crash_flag=1。

步骤s2:cpu复位后,进入boot阶段,在代码迁移至内存之前,读取crash_flag,因为crash_flag=1,表明系统为异常重启,进入异常处理模式(dump模式)。

步骤s3:进入dump模式,将看门狗1和看门狗2都配置为硬件喂狗模式,dump_retry=0,保存完整内存镜像信息和关键器件(dsp等)寄存器信息到flash中。保存操作结束后,写逻辑器件寄存器crash_flag=0,看门狗2配置为软件喂狗,喂狗超时后,系统将复位整板所有器件。

步骤s4:整板复位后,系统重启,进入boot阶段,在代码迁移至内存之前,读取crash_flag,因为crash_flag=0,表明系统进入正常启动阶段。

步骤s5:系统正常启动后,可以通过读flash查看保存的死机信息。通过查看死机时的栈指针,可以进行栈回溯、查看变量、代码段和数据等信息;通过查看关键器件的寄存器信息,可以分析出问题模块的状态。

在上例中,通过硬件设计和软件编写,解决了现有的系统死机完全无反应,来不及保存死机信息的情况下,死机信息丢失的问题,且实现起来不会影响系统的正常运行,实现起来较为简单。

显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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