一种设备诊断方法及系统的制作方法

文档序号:6581225阅读:311来源:国知局
专利名称:一种设备诊断方法及系统的制作方法
技术领域
本发明涉及通信技术领域,尤其涉及一种设备诊断方法及系统。
背景技术
在IT及电子通信领域,为了提高设备运行的可靠性以及增强设备的可维护性,一 般都会对设备进行诊断检测,如果有错误,输出相关错误信息,后续根据这些出错信息对设 备进行维护操作。基于X86体系的设备先通过BIOS (Basic Input Output System,基本输入输出系 统)或EFI (Extensible Firmware hterface,可扩展固件接口 )启动系统,完成硬件设备 的初始化及诊断,然后再进入操作系统。以通过BIOS启动为例,为了对硬件设备进行诊断, 现有技术常采用在BIOS中加入调试程序,通过运行调试程序向0x80端口输出调试信息方 法,这些诊断信息往往比较简单,给出的信息量较少,无法对故障做出更准确的判断。为了得到更准确的诊断信息,现有技术通过一个专门的诊断程序,在操作系统下 运行或者在BIOS启动阶段通过特殊的按键触发来进行诊断检测。参见图1,系统上电后进 入BIOS程序执行,先初始化CPU,然后再对内存、PCI/PCIE、VGA等设备进行初始化,接着判 断是否有指定键按下,如果有,则进入诊断模式进行诊断,可以包括对键盘、内存、PCI设备、 硬盘等设备的诊断;如果没有指定键按下,则接着进行BIOS启动及进入0S。由于在进入诊 断模式前已经对内存、VGA等设备进行了初始化,因此,诊断完成后通过显示器将信息详细 地显示出来,这样可以让用户更精确地对设备故障进行定位,使得维护更加方便。发明人在实现本发明的过程中发现现有技术至少存在如下缺点使用0x80端口调试时,输出的信息往往过于简单,无法对故障做出准确的判断; 而使用专门诊断程序由于在BIOS操作系统下运行或在BIOS启动阶段运行,当因为内存或
PCI/PCIE (Peripheral Component Interconnect/PeripheralComponent Interconnect Express,外设连接总线/外设连接增加型总线)出现故障时,往往无法使用显示器、键盘等 设备,从而也就无法实现诊断功能。

发明内容
本发明实施例提供一种设备诊断方法和系统,用于对设备进行准确诊断,且在内 存或PCI/PCIE等设备出现故障时也能实现诊断功能。其中,一种设备诊断方法包括当系统启动后,判断是否进入诊断模式;当判断进入诊断模式时,通过执行诊断程序对设备进行诊断;当判断不进入诊断模式时,进行常规BIOS或EFI启动。其中,一种设备诊断系统包括判断单元,用于当系统启动后,判断是否进行诊断模式;诊断单元,用于当所述判断单元判断进行诊断模式后,通过执行诊断程序对设备
3进行诊断;常规启动单元,用于当所述判断单元判断不进入诊断模式时,进行常规BIOS或 EFI启动。上述技术方案中具有如下的优点本发明实施例通过在系统启动后先判断是否进入诊断模式,如果是,则进入诊断 模式,如果否,则继续执行BIOS或EFI启动,可以实现对设备的准确诊断;且当设备出现内 存或PCI/PCIE总线错误时,由于诊断程序是在BIOS启动前加载,因此,也可以实现故障的 诊断。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述 中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些 实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附 图获得其他的附图。图1为现有技术一种设备诊断方法流程图;图2为本发明实施例一方法流程图;图3为本发明实施例二方法流程图;图4为本发明实施例二步骤S204方法流程图;图5为本发明实施例三系统示意图;图6为本发明实施例三具体应用场景示意图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下将通过具体实施例和相 关附图,对本发明作进一步详细说明。实施例一本发明实施例一提供了一种设备诊断方法,参见图2,包括如下步骤S101、当系统启动后,判断是否进入诊断模式;S102、当判断进入诊断模式时,通过执行诊断程序对设备进行诊断;S103、当判断不进入诊断模式时,进行常规BIOS或EFI启动。本发明实施例中,诊断程序代码可以和系统原来的常规BIOS或EFI位于同一存储 器,如Flash、E2PR0M等存储器;也可以与BIOS或EFI位于不同的存储器,例如再为系统增 加一个存储器来存放诊断程序的代码。无论使用哪种存储方法,诊断程序代码与BIOS程序 代码(或EFI程序代码)相独立。需要说明的是,上述常规BIOS(或EFI)主要是指具有原来系统BIOS功能的 BIOS(或EFI),由于实际应用中,BIOS —般是指在操作系统(0S,OperationSystem)之前启 动的一段程序,而原先BIOS功能的那块代码、新加入的诊断程序代码以及判断程序代码都 在操作系统启动前,因此,也可以将原BIOS功能代码、诊断程序代码、判断程序代码等都看 成是一个新的BIOS。为了描述方便,本发明实施例将原BIOS部分和新的诊断模块作为两部 分进行描述。
判断是否进入诊断模式的方法可以通过外部电平触发,也可以通过软件设置的方 式来进行。在进入诊断模式后,为了加快程序执行的速度,还可以将存储器中的程序代码加 载到Cache中执行。进入诊断程序对设备进行诊断前,先进行一些系统的初始化,如对Cache、串口等 进行初始化,诊断主要包括对一些硬件设备如内存、PCI/PCIE等进行诊断,具体诊断的内容 可以根据实际应用而定,诊断完之后可以通过串口将相关的诊断信息进行输出。由于诊断 内容可以自定义,因此,可以使得诊断功能更加丰富及准确。本发明实施例通过在系统启动后先判断是否进入诊断模式,如果是,则进入诊断 模式,如果否,则继续执行BIOS或EFI启动,可以实现对设备的准确诊断;且当设备出现内 存或PCI/PCIE总线错误时,由于诊断程序是在BIOS启动前加载,因此,也可以实现故障的 诊断。实施例二本发明实施例提供了一种设备诊断方法,以设备使用BIOS启动为例,参见图3,包 括如下步骤S201、将诊断程序与BIOS程序分成两个独立的模块一起存放;这里的BIOS程序和现有的常规BIOS程序相一致,用于完成设备启动功能,通常存 储在Flash、E2PR0M等存储器。诊断程序与现有的BIOS程序相独立,即单独执行诊断程序 或BIOS程序并不会对另一个程序产生影响。诊断程序可以用C语言或其他语言实现,编译 后生成一个二进制的计算机可执行程序,然后可以将其与BIOS—起存储在同一存储器中, 也可以将其与BIOS分别存储在一个存储器中,这里的存储器可以采用Flash、或者E2PR0M 等存储器。为了在系统启动时选择运行哪个程序模块,在存储器当中还会有一段启动引导程 序,用于在系统刚刚启动时选择运行哪个程序模块。为了使用方便,可以将启动程序、BIOS 程序和诊断程序放在同一存储器当中。需要说明的是,上述BIOS主要是指具有原来系统BIOS功能的BIOS,由于实际应用 中,BIOS—般是指在操作系统((^,Operation System)之前启动的一段程序,而原先BIOS 功能的那块代码、新加入的诊断程序代码以及判断程序代码都在操作系统启动前,因此,也 可以将原BIOS功能代码、诊断程序代码、判断程序代码等都看成是一个新的BIOS ;在执行 这个新的BIOS时,先判断是否转到诊断程序,如果是,则运行诊断程序代码,如果否,执行 对设备初始化等常规BIOS启动。为了描述方便,本发明实施例将原BIOS部分和新的诊断 模块作为两部分进行描述。S202、系统启动时判断是否进入诊断模式;如果是,执行步骤S203 ;如果否,执行 步骤S206 ;判断是否进入诊断模式的方法包括但并不限于几个几种1)通过外部电平触发例如,用户如果想进行诊断模式,可以通过触发一个GPIO (General Purposelnput/Output,通用输入/输出端口 )引脚电平,电平值会被反映到设备内某个寄 存器(例如GPIO寄存器)的值,系统的启动引导程序可以通过检查设备的这些寄存器状态 来判断是进入诊断模块还是进行正常的BIOS启动。可以设置在默认情况下使用BIOS进行
5正常的启动流程,当检测到用户的命令后(触发GPIO引脚电平)就进入诊断模式。2)通过软件设置除了通过外部电平触发外,也可以通过软件设置进行触发。例如,用户在BIOS里 面设置下次启动的时候是否进入诊断模式(如在BIOS配置界面设设置一个选项用于判断 是否进入诊断模式),配置将被保存在CMOS (Complementary Metal Oxide Semiconductor, 互补金属氧化物半导体)里面,下次启动的时候就先读取CMOS中值,如果该值为有效值 (如1),则进行诊断模式,反之,进行正常的BIOS启动;读取完CMOS中的值后,将有效值进 行清除,以防下一次自动进入诊断模式。S203、将诊断程序加载到Cache中运行;Cache为高速缓冲存储器,一般集成在CPU当中。程序在Cache中运行的速度远 大于在外部存储器中运行的速度,因此,可以将诊断程序诊断模块加载到Cache中运行以 提高运行效率。同理,也可以将启动引导程序加载到Cache中运行,但因为启动引导程序运 行起来时间很短,所以无论在哪里运行都不会对性能产生太大的影响;而诊断程序相比启 动引导程序执行起来时间要长得多,所以将其加载到Cache中运行能显著提高程序运行效 率。将诊断程序加载到Cache可以通过如下方法进行首先,将存储器中的地址映射到Cache中地址;其次,CPU直接去访问Flash地址, 然后CPU到Cache中查找有没有位于刚才访问的Flash地址的代码段备份;如果没有,则将 访问的Flash地址的代码段加载到Cache。为了能让程序加载到Cache中运行,需要先将Cache配置成常规内存;一般可以 通过设置CPU相关寄存器来将Cache配置成常规内存,其中,一部分Cache用于存储程序代 码,即在程序运行过程中存储从外部存储器加载进行的程序代码;另一部分Cache被配置 成软件中的堆栈区,这样可以方便地利用高级语言(如C语言)进行编程(高级语言一般 都需要用到堆栈)。通过将诊断程序加载到Cache中运行,从而可以让CPU从Cache中取指令而不是 每次都从外部存储器中取指令,而在Cache中取令的速度远大于从外部存储器取指令的速 度,因此,大大减少了访问时间,使得程序在Cache中运行的速度相比于在外部运行时大大 提高,提高了执行效率。需要说明的是,这一步骤并非是必须的,如果某些CPU不支持将Cache配置成常规 内存或者不对运行速度进行严格要求,也可以每次都从外部存储器当中取指令运行;同时, 如果不需要用到堆栈功能(如不使用高级语言),也可以不将一部分Cache配置成软件中的 堆栈。另外,加载的程序大小不能超过Cache配置的最大值,如果超过了,只能加载 Cache配置的最大值,其余部分在外部存储器中运行。S204、运行诊断程序对设备进行诊断;参见图4,运行诊断程序可以包括如下步骤S2041、初始化 Cache ;包括使能Cache、映射在外部存储器中诊断模块的代码地址到Cache中、将一部分 设置成代码段(用于在运行时存储加载进来的诊断模块代码)及堆栈段等步骤。
S2042、初始化串口;包括使能串口、设定串口号、传输速率、数据位数、校验位数等步骤。S2042、对相关硬件设备进行诊断;主要通过对内存和PCI/PCIE等硬件设备进行诊断。对内存的诊断可以通过读取 SPD (Serial Presence Detect,串行模组存在检测)来判断哪些 DIMM(Duallnline Memory Module,双列直插内存模块)槽上面有内存条;通过DQS(Bidirectional data strobe双向 数据选通)检验来判断哪个DIMM槽上的数据线或者地址线出问题。对于硬件支持的设备 还可以通过数据读写来诊断内存条上的哪个芯片颗粒有故障(写一个数据进去,再读出来 判断是否一致)。对PCI/PCIE的诊断可以核对设备上的厂商号和设备号,检查是否多了设备,检查 控制寄存器、IO和Memory寄存器等等。诊断程序开始会建立一个包括设备上所有PCI/PCIE 设备信息的表,这些信息包括设备名称、PCI总线号、设备号、功能号、芯片丝印等,通过检查 如果发现错误,则可以根据这个信息表查出是哪个芯片出现了故障,具体得到芯片的名称 及丝印等信息。诊断程序的诊断硬件设备并不局限于上述内存和PCI/PCIE,用户可以根据实际需 求来自定义需要诊断的硬件设备。S205、将诊断结果通过串口进行打印由于此时显示器等硬件还不能正常工作,因此,可以将诊断得到的故障信息通过 串口进行打印输出。如果有其他可以的信息输出方法,也可以采用其他方法进行信息输出。S206、进行常规BIOS启动;此步骤跟现有技术的常规BIOS启动类似,包括内存初始化、PCI/PCIE初始化、VGA 初始化;启动完BIOS后进行入操作系统0S。上述具体的操作流程与现有技术类似,在此不 再赘述。需要说明的是,在步骤S205之后,可以暂停程序,等待用户进行操作;也可以根据 诊断结果判断是否进入BIOS,例如,当发现问题时,不进入BIOS ;如果没问题,则进行正常 的BIOS启动。本发明另一实施例当中,如果设备采用EFI架构进行启动时,也可以参考上述步 骤S021将诊断程序与EFI模块分离,然后判断是否进行入诊断模式,如果是,则对设备进行 诊断;如果否,则进行正常的EFI启动。本发明实施例通过在系统启动后先判断是否进入诊断模式,如果是,则进入诊断 模式,如果否,则继续执行BIOS或EFI启动,可以实现对设备的准确诊断;同时,通过将诊断 程序与BIOS启动分开执行,即使内存或PCI/PCIE等硬件出现问题时,也能进行诊断。本发明实施例还将CPU的Cache配置成常规内存,在运行诊断程序时将诊断程序 先从存储器中加载到Cache,然后在Cache中运行程序,从而可以加快运行速度,提高了诊 断效率。实施例三本发明实施例提供了一种设备诊断系统,包括判断单元31,用于当系统启动后,判断是否进行诊断模式;诊断单元32,用于当所述判断单元判断进行诊断模式后,通过执行诊断程序对设备进行诊断;常规启动单元33,用于当所述判断单元判断不进入诊断模式时,进行常规BIOS或 EFI启动。本发明实施例还可以包括存储单元34,用于存储程序代码,所述存储单元包括第一存储单元341,用于存储判断单元执行程序的代码;第二存储单元342,用于存储所述诊断程序的代码;第三存储单元343,用于存储BIOS或EFI程序的代码;所述存储单元可以使用Flash,或E2PR0M等存储器;其中,所述诊断程序的代码和 所述BIOS或EFI程序的代码为两段独立的程序代码。第二存储单元342和第三存储单元343可以使用同一存储器,或者也可以使用不 同的存储器来实现。为了使用方法,可以将第一存储单元341、第二存储单元342和第三存 储单元343都使用同一存储器来实现。其中,判断单元31判断是否进入诊断模式的方法可以通过外部电平触发,也可以 通过软件设置的方法来进行。为了加快程序执行的速度,还可以将CPU的Cache配置成常规内存,将第二存储单 元中的程序代码加载到Cache中运行。诊断单元32对设备的诊断主要包括对一些硬件设备如内存、PCI/PCIE等进行诊 断,具体的内容可以根据实际应用而定,由于诊断内容可以自定义,因此,可以使得诊断功 能更加丰富及准确。诊断单元32还可以在诊断完成后暂停程序,等待用户操作;或者根据诊断结果判 断是否进入BIOS启动。本发明实施例还包括输出单元35,用于将诊断完之后将相关信息进行输出;输出单元35可以通过使用串口进行输出,如果有其他可以的信息输出方法,也可 以采用其他方法进行信息输出。上述判断单元,诊断单元,常规启动单元,输出单元等模块可以使用硬件处理器或 相关逻辑器件来实现,例如使用CPU或其他具有处理功能的芯片实现,其中,可以每个单元 可以单独使用一个硬件处理器,也可以多个单元共同使用一个硬件处理器。参见图6,为本发明实施例在x86系统中的一个具体应用框图,上述判断单元、诊 断单元以及常规启动单元都可以用CPU实现,存储单元用Flash存储器实现,输出单元用串 口实现;在系统启动时,CPU首先判断是否进行诊断模式,这里通过外部电平触发,引起南 桥相关寄存器值变化,对这些寄存器的值进行检测后判断是否进入诊断模式;如果判断进 入诊断模式,则对相关硬件设备进行诊断,主要包括内存、PCI/PCIE等设备,也可以包括键 盘、显示器等其他设备;诊断完成后,再通过串口将相关的信息进行输出;如果判断不进入 诊断模式,则进行常规的BIOS或EFI启动。这里的存储单元使用Flash实现,其中,诊断程序的代码和BIOS或EFI程序的 代码为两个独立的代码,但都存储在同一块Flash当中;在实际应用中,也可以使用两个 Flash进行存放;且Flash也可以使用E2PR0M等其他存储器代替。本发明实施例通过在系统启动后先判断是否进入诊断模式,如果是,则进入诊断模式,如果否,则继续执行BIOS或EFI启动,可以实现对设备的准确诊断;同时,通过将诊断 程序与BIOS启动分开执行,即使内存或PCI/PCIE等硬件出现问题时,也能进行诊断。本发明实施例还将CPU的Cache配置成常规内存,在运行诊断程序时将诊断程序 先从存储器中加载到Cache,然后在Cache中运行程序,从而可以加快运行速度,提高了诊 断效率。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以 通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质 中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁 碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。上列较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应 理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种设备诊断方法,其特征在于,包括 当系统启动后,判断是否进入诊断模式;当判断进入诊断模式时,通过执行诊断程序对设备进行诊断; 当判断不进入诊断模式时,进行常规BIOS或EFI启动。
2.如权利要求1所述的方法,其特征在于通过外部电平触发,或者软件方式判断是否进入诊断模式。
3.如权利要求1所述的方法,其特征在于所述诊断程序代码与所述BIOS或EFI的程序代码相独立。
4.如权利要求1所述的方法,其特征在于执行所述诊断程序时,将所述诊断程序的代码加载到Cache中执行。
5.如权利要求1所述的方法,其特征在于所述通过执行诊断程序对设备进行诊断前还包括对Cache、串口进行初始化。
6.如权利要求1所述的方法,其特征在于通过串口将所述诊断程序对设备进行诊断后的结果进行输出。
7.一种设备诊断系统,其特征在于,包括判断单元,用于当系统启动后,判断是否进行诊断模式;诊断单元,用于当所述判断单元判断进行诊断模式后,通过执行诊断程序对设备进行 诊断;常规启动单元,用于当所述判断单元判断不进入诊断模式时,进行常规BIOS或EFI启动。
8.如权利要求7所述的设备诊断系统,其特征在于所述判断单元通过外部电平触发,或者软件方式判断是否进入诊断模式。
9.如权利要求7所述的设备诊断系统,其特征在于,还包括 存储单元,用于存储程序代码,所述存储单元包括 第一存储单元,用于存储判断单元执行程序代码;第二存储单元,用于存储所述诊断程序代码; 第三存储单元,用于存储BIOS或EFI程序代码。
10.如权利要求9所述的设备诊断系统,其特征在于 所述诊断程序代码与所述BIOS或EFI程序代码相独立。
11.如权利要求9所述的方法,其特征在于所述诊断单元对设备进行诊断时,将所述诊断程序的代码加载到Cache中执行。
12.如权利要求9所述的方法,其特征在于所述通过执行诊断程序对设备进行诊断前还包括对Cache、串口进行初始化; 诊断完成后,对诊断后的结果通过串口进行输出。
全文摘要
本发明实施例公开了一种设备诊断方法和系统,其中,所述设备诊断方法包括当系统启动后,判断是否进入诊断模式;当判断进入诊断模式时,通过执行诊断程序对设备进行诊断;当判断不进入诊断模式时,进行常规BIOS或EFI启动。本发明实施例通过在系统启动后先判断是否进入诊断模式,如果是,则进入诊断模式,如果否,则继续执行常规BIOS或EFI启动,可以实现对设备的准确诊断;且当设备出现内存或PCI/PCIE总线错误时,由于诊断程序是在BIOS启动前加载,因此,也可以实现故障的诊断。
文档编号G06F11/22GK102081562SQ20091018848
公开日2011年6月1日 申请日期2009年11月30日 优先权日2009年11月30日
发明者常琳, 李羿, 王飞舟, 陶林 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1