嵌入式计算机系统的启动信息输出方法

文档序号:6407201阅读:188来源:国知局
专利名称:嵌入式计算机系统的启动信息输出方法
技术领域
本发明涉及计算机技术领域,特别是指一种嵌入式计算机系统的启动信息输出方法。
背景技术
嵌入式操作系统一般与特定的嵌入式中央处理器(CPU)系统硬件紧密结合,构成实时多任务的嵌入式计算机系统,例如vxWorks操作系统与PowerPC系列CPU结合构成嵌入式计算机系统。
这种计算机系统在启动时,一般需要经过如图1所示的初始化过程,包括如下步骤步骤101,系统上电后,CPU内部寄存器初始化。
步骤102,外挂存储器,即内存初始化。
步骤103,外挂存储器自检。
步骤104,将启动程序从闪存(FLASH)中拷贝到内存指定位置。
其中,如果需要的话,启动程序也可先解压缩再拷贝到内存指定位置。
步骤105,程序指针跳转到搬移后的指定位置开始执行启动程序。
启动程序的执行过程,具体包括步骤105~108步骤106,系统硬件初始化。
步骤107,操作系统初始化。
步骤108,I/O系统初始化。
等等。
与个人计算机(PC)等计算机设备类似,嵌入式计算机系统的上述启动过程也是由设置在基本输入输出系统(BIOS)中的程序引导。目前的嵌入式操作系统只有I/O系统初始化完成后,才能通过嵌入式计算机系统上调试用的串行口打印一些信息,以供用户了解系统的启动过程,因此如果在I/O系统初始化之前的启动过程中嵌入式计算机系统出现故障,则整个嵌入式计算机系统就处于一种“死机”状态,用户无法得知系统到底出了什么故障,更无从得知系统故障的具体位置。
为解决这一问题,目前主要采取的解决方案是采用点灯方式输出启动信息。一般情况下,在嵌入式计算机系统中都设置有运行指示灯,在系统启动过程中可以通过运行指示灯的闪烁频率或者多个指示灯的组合来获得系统的启动状态。
但是,这种点灯的方式只能有限地指示出嵌入式计算机系统的启动状态信息,在启动出现问题时,用户很难准确定位出故障的位置,并对故障的情况进行分析。特别是对于启动过程复杂的嵌入式系统,或者需要获知更多的启动信息的场合,更加难以适应。

发明内容
有鉴于此,本发明的主要目的在于提供一种优化的嵌入式计算机系统的启动信息输出方法,在嵌入式计算机系统启动过程中,尽可能早地详细输出用户所需的启动信息,丰富启动信息输出内容,提高启动问题定位的效率。
本发明的一种嵌入式计算机系统的启动信息输出方法,应用于嵌入式计算机系统的启动过程,设置嵌入式计算机中输出串口的每个串口寄存器地址和串口寄存器初始化值的对应关系,并包括以下两个步骤a)嵌入式计算机系统启动过程中,在完成CPU基本寄存器的初始化后,根据所述串口寄存器地址和串口寄存器初始化值的对应关系初始化所述输出串口;b)取出系统启动过程的相应信息,发送至所述输出串口的串口发送寄存器。
该方法所述初始化输出串口的过程具体包括将每个串口寄存器初始化值写入对应的串口寄存器地址中。
该方法所述设置输出串口的每个串口寄存器地址和串口寄存器初始化值的对应关系为设置输出串口的串口寄存器初始化表格,串口寄存器初始化表格中保存有每个串口寄存器地址和串口寄存器初始化值,并且每个串口寄存器地址和该串口寄存器初始化值一一对应。
该方法所述串口寄存器初始化表格中的串口寄存器地址和串口寄存器初始化值的最后一项均为表格结束标识。
该方法所述初始化输出串口过程进一步包括a1)按顺序从串口寄存器初始化表格中取出一个寄存器地址;a2)从串口寄存器初始化表格中取出当前寄存器地址对应的寄存器初始化值;a3)判断取出的当前寄存器地址和寄存器的初始化值是否都为结束标识,如果是,则结束该输出串口初始化流程;否则,将当前寄存器的初始化值写入当前寄存器地址中,返回a1)。
该方法进一步包括为需要获知启动信息的每个启动步骤,设置用于表示该启动步骤执行成功的字符串;所述步骤b)具体为在需要获知启动信息的启动步骤执行完成后,按顺序取出表示该启动步骤执行成功的字符串中的字符,并发送至串口发送寄存器。
该方法所述步骤b)具体包括b1)按顺序取出需要获取启动信息的启动步骤所涉及设备的寄存器的值,将获取的值送到串口发送寄存器。
该方法所述获取启动步骤所涉及设备的寄存器的值后进一步包括对获取的值进行筛选处理,选择其中的有用信息,执行将获取的值送到串口发送寄存器的步骤。
该方法步骤b)在需要获知启动信息的启动步骤执行完成后或启动步骤执行当中进行。
该方法所述步骤b)具体包括通过访问需要获取启动信息的启动步骤所涉及的设备,获取该设备的启动信息,将所获启动信息的值送到串口发送寄存器。
该方法所述将获取的值送到串口发送寄存器之前进一步包括将获取的值转化为ASCII码的字符形式。
该方法步骤b)所述将启动过程的相应信息发送至串口发送寄存器前进一步包括b1)判断串口发送寄存器当前是否可以发送字符,如果是,则执行将字符发送至串口发送寄存器的步骤,否则,返回步骤b1)。
该方法步骤b1)所述判断串口发送寄存器当前是否可以发送字符的过程包括读取串口状态寄存器,根据当前串口状态寄存器的值判断串口发送寄存器当前是否可以发送字符。
该方法所述输出串口为嵌入式计算机CPU的串口。
从上面所述可以看出本发明提供的嵌入式计算机系统的启动信息输出方法,通过预先建立串口寄存器初始化表格的方式,使嵌入式计算机系统的串口初始化过程在CPU完成基本的寄存器初始化后,就可以完成,进而可以开始输出系统的启动过程信息,从而使用户尽可能早和更详细地获得启动信息。并且,通过在启动步骤执行完成后,立刻输出表示该步骤执行成功的字符的简单形式,以及直接输出启动步骤执行过程中相关信息的形式,使启动信息的输出过程更加简单灵活,内容更加丰富,从而大大提高嵌入式操作系统启动过程的可视性以及启动问题定位的效率。


图1为现有嵌入式计算机系统的启动流程示意图;图2为本发明实施例中串口寄存器初始化流程示意图;图3为本发明从串口输出启动信息第一种较佳实现方式的流程示意图;图4为本发明从串口输出启动信息第二种较佳实现方式的流程示意图;图5为采用本发明方案的嵌入式计算机系统的启动流程示意图。
具体实施例方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明方案的核心思想为在嵌入式计算机系统上电,完成CPU基本寄存器初始化后,增加输出串口初始化的操作,该输出串口通常可以是CPU串口,当需要获取嵌入式计算机系统启动信息时,将需要的字符和/或寄存器值等相关的启动信息通过该初始化后的CPU串口输出,发送到PC机等设备上打印出来。
在进行启动信息输出之前,需要对嵌入式计算机系统CPU串口进行初始化。
为实现CPU串口初始化,首先要建立一个串口寄存器初始化表格,保存串口寄存器初始化值和串口寄存器地址的对应关系。
假设串口初始化过程需要对相关的N个串口寄存器进行初始化,则设置的串口寄存器初始化表格,参见表1所示。

表1表1中,每个串口寄存器地址对应该串口寄存器的初始化值,初始化值中包括设定的串口运行模式等信息。在表格结尾处的0xFFFFFFFF表示寄存器初始化表格的结束,该表示结束的0xFFFFFFFF也可以采取其它值代替,只要保证该值不会与表格前面的项相同即可。表1左侧的序号1~N+1只是为了方便理解,序号本身不是表格的元素。
实际保存时,表1中的每个串口寄存器地址和串口寄存器的初始化值各占32位(bit),将表1的内容按串口寄存器地址、该串口寄存器初始化值、下一个串口寄存器地址、下一个串口寄存器初始化值......的顺序依次进行保存。
嵌入式计算机系统上电启动过程中,在完成图1所示步骤101的CPU基本的内部寄存器初始化后,BIOS即可以开始执行CPU串口初始化,即对N个串口寄存器进行初始化。串口寄存器的初始化流程参见图2所示,具体包括以下步骤步骤201,指针指向表1的头地址,即串口寄存器1的地址。
步骤202,取指针当前位置的32bit值,即当前的寄存器地址放入通用寄存器R2中。
步骤203~204,指针加4;取指针当前位置的32bit值,即当前寄存器的值放入通用寄存器R3中。
步骤205~206,比较R2和R3当前的值,判断R2和R3当前的值是否均为0xFFFFFFFF,如果是,则跳出流程,串口寄存器的初始化过程结束;否则,进入步骤207。
步骤207,将R3的值写入R2值对应的地址中。
步骤208,指针加4,返回步骤202。
其中,上述的通用寄存器可以根据实际情况进行选择,不一定为这里所举例的R2和R3。另外,本实施例中每个寄存器地址和寄存器值都为32bit,并且依次排列,因此在读取下一个寄存器地址或寄存器值时,都需要指针加4。本领域技术人员不难看出,这里的寄存器地址和寄存器值所占bit位数,以及进行存储时的排列顺序也可以采取其它方式,只要保证寄存器地址和寄存器值的对应关系不变,每次取值时指针的指示正确即可。
串口初始化过程完成以后,嵌入式计算机系统即可输出用户所需要的系统启动信息。根据用户所需获知的内容不同,启动信息的输出可以采取两种方式一种方式是系统只需在图1所示每个步骤的初始化过程完成后,通过串口输出一个表示该步骤执行成功的字符串即可,这样用户就可以根据嵌入式计算机系统在启动的每个步骤中是否输出有表示该步骤成功的字符串,确定系统启动过程中故障发生的位置;另一种方式是系统直接将当前启动所获得的信息经筛选、处理后,转化成ASCII的字符形式通过串口输出,以便用户通过输出的字符进行分析。下面分别举例对这两种实现方式进行说明。
第一种启动信息输出方式的较佳方案如下预先为需要获知启动信息的每个步骤,制定表示该步骤执行成功的字符串,例如在CPU寄存器初始化完成后可以输出“Completed to init CPUregisters”,以表示CPU寄存器初始化完成。本领域技术人员不难看出,字符串的内容也可以采用缩写、符号等多种形式,也允许出现两个或两个以上步骤采用同一个字符串表示执行成功的情况,只要用户可以进行识别区分即可。
完成串口的初始化后,即可通过串口输出表示启动过程中某个步骤执行成功的字符串。该串口输出字符的过程参见图3所示,具体包括以下步骤步骤301,指针指向表示该步骤执行成功字符串的开始位置。
步骤302~303,读取串口状态寄存器;根据串口状态寄存器的值判断是否可以发送字符,如果是,则进入步骤304,否则,返回步骤302。
其中,串口状态寄存器用于指示串口发送寄存器的状态,在其中保存有表示串口发送寄存器的状态值,因此可以通过读取串口状态寄存器中数据判断串口发送寄存器的状态。
步骤304,取出指针当前位置的字符送至串口发送寄存器,例如如果在CPU寄存器初始化完成后,从表示CPU寄存器在初始化完成的字符串“Completed to init CPU registers”中按顺序先取出当前指针指向的字符“C”发送至串口发送寄存器。
步骤305,判断当前字符串的字符是否已发送完,如果是,则结束流程;否则,进入步骤306。
步骤306,指针指向该字符串的下一字符,返回步骤302。
上述步骤301~306的串口输出字符过程,可以在计算机系统启动过程中被多次调用执行。比如如果在CPU内部寄存器初始化完成以后,即进行了串口初始化,则立刻就可以执行上述步骤301~306,输出“Completed toinit CPU registers”表示CPU内部寄存器初始化成功;在下一个启动步骤外挂存储器初始化过程完成后,可以再次调用执行上述步骤301~306,输出表示外挂存储器初始化执行成功的相应字符串,以后步骤以此类推,这样如果嵌入式计算机系统在启动过程中发生“死机”,则用户可以根据当前最后输出的字符串内容,很容易判断出当前发生故障的位置应该是该最后输出的字符串步骤的下一步。当然,不一定每个启动步骤完成后都输出表示该步骤执行成功的字符串,也可以采取间隔某几个步骤后,再输出一次字符串;或只在某些较为重要或容易发生故障的步骤后输出字符串等方式。
串口输出字符过程的具体实施时的较佳实现方式是将所述201~208的串口初始化过程和步骤301~306的过程,编写成汇编程序的串口初始化接口函数和串口输出字符的接口函数,并将该串口初始化接口函数和至少一个串口输出字符的接口函数嵌入BIOS中计算机系统启动程序的相应位置。这样嵌入式计算机系统在启动时,系统CPU就可以通过调用BIOS中的计算机系统启动程序,自动执行所述的串口输出字符功能。其中,所述串口输出字符的接口函数可以输出表示每个步骤完成的字符串,这些字符串可以事先按系统启动顺序通过编译手段将其作为常量数据放在程序的相应数据段中。
本发明第二种启动信息的输出方案,还可以直接将当前启动的数值信息转化成ASCII的字符形式通过串口输出出去,例如把启动过程中某个步骤涉及启动设备寄存器的值转化成ASCII的字符形式直接通过串口输出。参见图4所示,该过程具体包括以下步骤步骤401,取出当前启动步骤涉及设备的寄存器的值。
这里,设备寄存器的值一般为32bit。
步骤402,将该值通过移位的方式分为8段,每段4bit。
步骤403,指针指向第一段值。
步骤404~407,取出指针当前所在段的4bit二进制值转化为十六进制值,判断转化后的值是否小于10,如果是,则把转化后的值加上0x30,转化为ASCII码的数值字符;否则,把转化后的值加上0x57,转化为ASCII码的a、b、c、d、e、f等字母字符。
步骤408~409,将转化后得到的字符送到串口发送寄存器,判断是否还有数值未发出,如果是,则指针加4,返回步骤404;否则,结束流程。
如此,通过本方案可以实现将计算机系统启动各步骤中原来为数值形式的各种启动信息进行输出。从而不仅便于用户确定故障位置,还可以为用户提供更多的信息,有利于用户分析故障原因。
采用本方式时,由于通常执行从数值转换为字符的过程所用的时间远远超过串口发送寄存器发送数据的时间,因此,一般不必进行如步骤302~303所示的串口发送寄存器状态判断过程,当然,如果需要,在步骤406/407与步骤408之间,增加步骤302~303所示的串口发送寄存器状态判断过程也是可以的。
与所述第一种启动信息输出的实现方式类似,上述步骤的过程也可以编写成接口函数,嵌入在BIOS中计算机系统启动程序的相应位置,与计算机系统的启动程序一起执行。并且,也可被多次在任意启动步骤后被调用执行,另外该第二种启动信息输出方式还可以在启动步骤进行当中被执行,从而在执行启动步骤的同时,输出当前步骤的动态信息,从而更加体现启动信息输出的实时性,能够使用户获得更多的启动信息。并且,本方案也可以先对获得的启动信息进行筛选,只选择有用的启动信息输出。
而且,采用该第二种启动信息输出的方式不仅可以输出启动设备寄存器的所有值,还可以只输出需要关心的值,如当外挂存储器,即内存自检时,如果自检错误,则可通过调用上述第二种启动信息输出的方式,根据内存出错位置的地址,可以只将内存自检出错时的地址值、及写入和读出的数据值转化为ASCII码的字符形式输出。
上述的两种启动信息输出的方式也可以结合起来共同发挥作用,比如在有些步骤中只输出表示该步骤执行成功的字符串,在另一些步骤中通过第二种方式输出更详细的启动信息;或者在某些步骤执行当中通过第二种方式将启动的数值信息转化成字符后输出,而在这些步骤执行完成后,再输出一次表示该步骤执行成功的字符串;还可以在某些步骤执行完成后,既输出启动的数值信息,又输出表示该步骤执行成功的字符串等。
上述的启动信息输出过程中都是以字符形式输出的,本领域技术人员应该看出,必要时,直接采用数值的形式输出所需启动信息也是可以的。
这样,以图1所示的嵌入式计算机系统启动流程为例,采用本发明方案后嵌入式计算机系统的启动过程参见图5所示,在CPU基本寄存器初始化后,即可以进行输出串口的初始化,使之作为信息输出通道。此后便可在嵌入式计算机系统的启动过程中随时输出所需的启动信息。当然,所述输出串口的初始化过程也不一定在CPU基本寄存器初始化的步骤后立刻执行,在以后的任意两个启动步骤之间执行也是可以的。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则下,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种嵌入式计算机系统的启动信息输出方法,应用于嵌入式计算机系统的启动过程,其特征在于,设置嵌入式计算机中输出串口的每个串口寄存器地址和串口寄存器初始化值的对应关系,并包括以下两个步骤a)嵌入式计算机系统启动过程中,在完成CPU基本寄存器的初始化后,根据所述串口寄存器地址和串口寄存器初始化值的对应关系初始化所述输出串口;b)取出系统启动过程的相应信息,发送至所述输出串口的串口发送寄存器。
2.根据权利要求1所述的方法,其特征在于,所述初始化输出串口的过程具体包括将每个串口寄存器初始化值写入对应的串口寄存器地址中。
3.根据权利要求2所述的方法,其特征在于,所述设置输出串口的每个串口寄存器地址和串口寄存器初始化值的对应关系为设置输出串口的串口寄存器初始化表格,串口寄存器初始化表格中保存有每个串口寄存器地址和串口寄存器初始化值,并且每个串口寄存器地址和该串口寄存器初始化值一一对应。
4.根据权利要求3所述的方法,其特征在于,所述串口寄存器初始化表格中的串口寄存器地址和串口寄存器初始化值的最后一项均为表格结束标识。
5.根据权利要求4所述的方法,其特征在于,所述初始化输出串口过程进一步包括a1)按顺序从串口寄存器初始化表格中取出一个寄存器地址;a2)从串口寄存器初始化表格中取出当前寄存器地址对应的寄存器初始化值;a3)判断取出的当前寄存器地址和寄存器的初始化值是否都为结束标识,如果是,则结束该输出串口初始化流程;否则,将当前寄存器的初始化值写入当前寄存器地址中,返回a1)。
6.根据权利要求1所述的方法,其特征在于,进一步包括为需要获知启动信息的每个启动步骤,设置用于表示该启动步骤执行成功的字符串;所述步骤b)具体为在需要获知启动信息的启动步骤执行完成后,按顺序取出表示该启动步骤执行成功的字符串中的字符,并发送至串口发送寄存器。
7.根据权利要求1所述的方法,其特征在于,所述步骤b)具体包括b1)按顺序取出需要获取启动信息的启动步骤所涉及设备的寄存器的值,将获取的值送到串口发送寄存器。
8.根据权利要求7所述的方法,其特征在于,所述获取启动步骤所涉及设备的寄存器的值后进一步包括对获取的值进行筛选处理,选择其中的有用信息,执行将获取的值送到串口发送寄存器的步骤。
9.根据权利要求7所述的方法,其特征在于,步骤b)在需要获知启动信息的启动步骤执行完成后或启动步骤执行当中进行。
10.根据权利要求1所述的方法,其特征在于,所述步骤b)具体包括通过访问需要获取启动信息的启动步骤所涉及的设备,获取该设备的启动信息,将所获启动信息的值送到串口发送寄存器。
11.根据权利要求7或10所述的方法,其特征在于,所述将获取的值送到串口发送寄存器之前进一步包括将获取的值转化为ASCII码的字符形式。
12.根据权利要求1所述的方法,其特征在于,步骤b)所述将启动过程的相应信息发送至串口发送寄存器前进一步包括b1)判断串口发送寄存器当前是否可以发送字符,如果是,则执行将字符发送至串口发送寄存器的步骤,否则,返回步骤b1)。
13.根据权利要求12所述的方法,其特征在于,步骤b1)所述判断串口发送寄存器当前是否可以发送字符的过程包括读取串口状态寄存器,根据当前串口状态寄存器的值判断串口发送寄存器当前是否可以发送字符。
14.根据权利要求1所述的方法,其特征在于,所述输出串口为嵌入式计算机CPU的串口。
全文摘要
本发明公开了一种嵌入式计算机系统的启动信息输出方法,该方法主要包括以下步骤设置嵌入式计算机中央处理器(CPU)串口的每个串口寄存器地址和串口寄存器初始化值的对应关系,在嵌入式计算机系统启动过程中,在完成CPU最基本的寄存器初始化后,根据所述串口寄存器地址和串口寄存器初始化值的对应关系初始化所述串口以作为信息输出通道;取出系统启动过程中的各种需要信息,通过所述输出串口的串口发送寄存器发送出去。本发明方案在嵌入式计算机系统启动过程中,能够更快、更详细地输出用户所需的启动信息,丰富了启动信息输出内容,提高了启动问题定位的效率。
文档编号G06F9/445GK1713142SQ20041004873
公开日2005年12月28日 申请日期2004年6月15日 优先权日2004年6月15日
发明者郑朝晖, 周文旻, 邹桓浩 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1