CN108701036A - 一种启动Boot的方法、CPU及单板 - Google Patents

一种启动Boot的方法、CPU及单板 Download PDF

Info

Publication number
CN108701036A
CN108701036A CN201680082286.XA CN201680082286A CN108701036A CN 108701036 A CN108701036 A CN 108701036A CN 201680082286 A CN201680082286 A CN 201680082286A CN 108701036 A CN108701036 A CN 108701036A
Authority
CN
China
Prior art keywords
boot
address
backup
starting
cpu
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
Application number
CN201680082286.XA
Other languages
English (en)
Inventor
徐炜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN108701036A publication Critical patent/CN108701036A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Abstract

本发明的实施例公开一种启动Boot的方法、CPU及单板,涉及计算机领域,能够提高Boot启动的可靠性。具体方案如下:CPU安装于单板上,单板包括存储器,存储器中存储有至少两个引导Boot备份,至少两个Boot备份中,相邻两个Boot备份的偏移地址为预设值,其中偏移地址为相邻两个Boot备份的起始地址之间的间隔,CPU确定偏移地址,并按照预设顺序逐一根据偏移地址启动至少两个Boot备份,直到有一个Boot备份启动成功。本发明用于CPU以及单板的制造。

Description

一种启动Boot的方法、CPU及单板 技术领域
本发明涉及计算机领域,尤其涉及一种启动Boot的方法、CPU及单板。
背景技术
许多电子设备中都安装有具有一定计算、处理功能的单板,例如无线通信领域的基站以及其它网元中、轨道交通领域内的各种信号控制设备中,都安装有具备各种定制化功能的单板。通常单板包括中央处理器(全称:Central Processing Unit,简称:CPU)以及存储器,存储器可以是非易失性存储器(全称:non-volatile memory),用于存储定制的操作系统、单板启动所需的引导程序(全称:Boot)代码等。
为保证单板正常启动,可以对Boot进行备份,当一个Boot备份启动失败时,尝试启动另一个Boot备份。在一种现有技术的方案中,Boot包括两个备份,结合图1所示,两个备份分别为一级BootRom(简称:L1BootRom)以及二级BootRom(简称:L2BootRom)。L1BootRom和L2BootRom是两个相同版本或者不同版本的备份,例如两个均为最新版本的Boot备份,或者其中一个为最新版本的Boot备份,另一个为出厂版本备份。L1BootRom包括Bootstrap,位于L1BootRom的开头部分,CPU上电后首先加载Bootstrap,完成最简单的初始化和启动跳转判断。
结合图1中实线箭头所示的执行流程,CPU上电后从L1BootRom的起始地址开始执行,在执行完Bootstrap部分后,跳转至L2BootRom的起始地址开始执行,尝试启动L2BootRom备份。如果L2BootRom备份启动失败,最终导致单板本次启动失败,则CPU复位并重新从L1BootRom跳转到L2BootRom备份,尝试再次启动L2BootRom备份。
结合图1中虚线箭头所示的执行流程,当再一次执行到BootStrap时,BootStrap判断启动L2BootRom备份的失败次数,如果达到预定次数则跳转至L1BootRom备份。因此,如果L2BootRom备份不能正常启动,那么单板还可以尝试启动L1BootRom备份,以完成单板启动。
进一步地,BootRom可以有两个以上备份,启动时首先尝试其中一个,当满足失败条件后尝试另外一个。然而,如果L1BootRom备份在Bootstrap段的代码存在错误,L1BootRom备份无法完成跳转和计数,这种情况下即使有再多的Boot备份都没有意义,Boot启动一定会失败,并最终导致单板启动失败。因此,现有技术中启动Boot的方法可靠性不足,易导致单板启动失败。
发明内容
本申请提供一种启动Boot的方法、CPU及单板,能够提高Boot启动的可靠性。
为达到上述目的,本申请采用如下技术方案:
第一方面,提供一种启动Boot的方法,应用于CPU,所述CPU安装于单板上。
所述CPU包括片内启动逻辑,片内启动逻辑定义了Boot备份的数量、偏移地址以及尝试启动Boot备份的先后顺序。其中Boot备份的数量大于或者等于2,偏移地址是指相邻两个Boot备份的起始地址之间的间隔。
所述单板包括存储器,单板开发人员或者生产商,根据CPU支持的Boot备份数量以及偏移地址,在所述存储器中存入Boot备份。
所述CPU通过所述片内启动逻辑执行所述启动Boot的方法,具体包括:确定所述偏移地址;按照预设顺序逐一根据偏移地址启动所述至少两个Boot备份,直到有一个Boot备份启动成功。就是说CPU以片内启动逻辑所定义的先后顺序,采用逐一尝试的方式启动Boot备份,如果一个Boot备份启动失败,则尝试启动另一个Boot备份。各个Boot备份的启动相互独立互无影响,从而克服因为一个Boot备份启动失败而导致不能启动另一个Boot备份的问题,这样在至少两个Boot备份中,只要有一个备份能够正常启动就能够保证Boot启动,由此提高了Boot启动的可靠性。
结合第一方面,在一种可能的实现方式中,根据预配置的硬件指示信号确定所述偏移地址,启动Boot过程中,CPU第一个访问的地址可以是0地址。或者,CPU第一个访问的地址可以是非0地址,当 非0地址对应的Boot备份启动失败时,再尝试启动0地址对应的Boot备份。
结合第一方面,在普通启动Boot的应用场景中,可以直接尝试启动一个Boot备份,或者在对进行校验之后再尝试启动该Boot备份。
结合第一方面,在安全启动Boot的应用场景中,对一个Boot备份经过数字签名校验之后,再尝试启动该Boot备份。
第二方面,提供一种CPU,所述CPU包括片内启动逻辑。CPU上电后,通过片内启动逻辑,执行第一方面所提供的启动Boot的方法。
结合第二方面,在第一种可能的实现方式中,CPU包括:确定单元和Boot启动控制单元,其中确定单元,用于确定所述偏移地址,Boot启动控制单元,用于按照预设顺序逐一根据所述偏移地址启动所述至少两个Boot备份,直到有一个Boot备份启动成功。
第三方面,提供一种单板,所述单板包括CPU以及存储器,其中CPU为第二方面所提供的CPU,存储器中存储有至少两个Boot备份。所述CPU通过执行第一方面所提供的启动Boot的方法,启动Boot并进一步启动单板的操作系统、应用程序等软件。
附图说明
图1为现有技术中启动Boot备份的流程示意图;
图2为本发明的实施例所提供的启动Boot的方法流程示意图;
图3为本发明的实施例所提供的CPU的结构示意图;
图4为本发明的实施例所提供的单板的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
单板启动过程中,需要先后启动Boot和操作系统。Boot在某些情况下可能会被篡改或者发生比特位跳变,从而导致Boot代码出现错误。例如无线通信系统中,基站内的功能单板可能会被入侵,并被恶意篡改。 或者,由于单板电压跳变、器件老化等原因,导致Boot中的某些比特位会发生跳变。
Boot代码关键位置的错误可能会导致Boot启动失败,并进一步导致单板启动失败。通过对Boot进行备份,当一个Boot备份启动失败时,可以尝试启动另一个Boot备份,以保证单板正常启动。然而并非只要有Boot备份就能够万无一失,现有技术中启动Boot时,即使有一个Boot备份的代码没有出错,能够正常启动,也可能因为不能跳转到该备份而导致Boot启动失败。本发明的目的在于提供一种启动Boot的方法、CPU及单板,克服由于一个Boot备份启动失败而导致不能启动另一个Boot备份的问题,以保证只要有一个Boot备份能够启动时,就能够正常启动Boot,从而提高Boot启动的可靠性。
实施例一
本发明的实施例一提供一种启动Boot的方法,应用于CPU,CPU包括片内启动逻辑,片内启动逻辑具体可以是片内硬件电路,或者还可以是片内启动代码,或者是两者的结合。CPU上电后通过片内启动逻辑执行启动Boot的方法,参照图2所示,启动Boot的方法包括以下步骤:
201、确定偏移地址。
CPU安装于单板上,单板包括存储器,存储器为非易失性存储器,例如闪存(全称:flash memory)。存储器中存储有至少两个Boot备份。
片内启动逻辑支持从两个或者两个以上的上电位置读取Boot备份的代码。其中上电位置是指片内启动逻辑开始运行时,读取Boot备份的代码的起始地址。一个上电位置对应一个Boot备份,通过从不同上电位置读取不同Boot备份的代码,以启动不同的Boot备份。
片内启动逻辑相邻的两个上电位置之间的地址间隔大小为偏移地址。存储器中存储的至少两个Boot备份中,相邻两个Boot备份各自的起始地址之间的间隔大小也为偏移地址。也就是说,当一个Boot备份启动失败时,片内启动逻辑跳转到另一Boot备份,尝试启动另一Boot备份。一个Boot备份启动失败包括没有执行该Boot备 份或者在执行该Boot备份时出现异常导致该Boot备份没有启动成功。可以理解的是,偏移地址可以为1个,也可以为多个,具体可以由实际系数设计需求确定。比如,第一个Boot备份和第二个Boot备份之间的间隔大小为X,第二个Boot备份和第三个Boot备份之间的间隔大小为X+1,…第n-1个Boot备份和第n个Boot备份之间的间隔大小为X+n-2,又或者间隔大小的变化其他预定的规则,在此不予赘述。
例如,在开始执行Boot备份前对Boot备份做正确性校验,若未通过校验则不启动该Boot备份,则认为该Boot备份启动失败。其中正确性校验是为了确定Boot备份的内容是否严格正确所做的校验,包括哈希值校验或者循环冗余校验等。如果比特位跳变的情况,则Boot备份不能通过正确性校验。
或者,通过正确性校验后开始执行该Boot备份,但是执行过程中出现异常,导致该Boot备份没有正常启动,则认为该Boot备份启动失败。
又或者,不对Boot备份的做正确性校验就直接开始执行Boot备份,由于执行过程中出现异常,导致该Boot备份没有正常启动,也认为该Boot备份启动失败。
CPU上电后,片内启动逻辑启动第一个上电位置对应的Boot备份,如果该Boot备份启动失败,那么在CPU重置后,片内启动逻辑从第一个上电位置跳转到第二个上电位置,尝试启动第二个上电位置对应的Boot备份。需要特别说明的是,第一个上电位置对应的Boot备份(第一个访问的Boot备份),起始地址可以为0,也可以为不为0,取决于片内启动逻辑所定义的尝试启动的顺序。
在片内启动逻辑进行跳转之前,首先需要确定偏移地址的具体值是多少,本实施例提供两种具体的确定偏移地址的方式如下:
第一种方式,CPU上电后,片内启动逻辑从flash中读取偏移地址。或者进一步地,片内启动逻辑可以从flash读取每一个Boot备份的起始地址,这样开发人员可以自定义偏移地址或起始地址。
第二种方式,CPU上电后根据预配置的硬件指示信号确定偏移 地址。在一种具体的应用场景中,上电位置的数量、偏移地址的大小以及尝试启动Boot备份的先后顺序均由片内启动逻辑定义。
例如,片内启动逻辑定义至少两个备选偏移地址,备选偏移地址的数量即为上电位置的数量。以备选偏移地址的数量为2的情况为例,两个备选偏移地址的取值分别为2兆和4兆。CPU设置有用于指示偏移地址的管脚,用于接收单板输入的硬件指示信号,比如上拉对应2兆、下拉对应4兆。单板设计人员根据实际需要从2兆或者4兆中选择其一作为偏移地址的取值,按照所选定偏移地址的取值在存储器中存储2个Boot备份,并配置相应的硬件指示信号。比如Boot备份的大小在2兆和4兆之间,那么选择偏移地址的取值为4兆,在向存储器写入2个Boot备份时,第一个Boot备份对应的起始地址为0,第二个Boot备份起始地址取值为1×4兆。同时,单板上配置将指示偏移地址的管脚下拉的输入信号。CPU上电后,单板向该管脚输入预配置的硬件指示信号,片内启动逻辑从该管脚读取该预配置的硬件指示信号,根据硬件指示信号确定偏移地址。
当然,根据上电位置的数量的不同,用于指示偏移地址的管脚的数量也不同。例如,上电位置的数量为4,则备选偏移地址的数量为4,需要用2个管脚来指示4个备选偏移地址中具体哪个为偏移地址。
另外,当用于指示偏移地址的管脚可以有多个时,可以直接向管脚输入表示偏移地址取值的二进制代码。例如管脚数量为10,单板直接向10个管脚输入10位二进制代码,指示偏移地址的取值。比如,10个管脚输入均为1,代表偏移地址的取值为2的10次方,即1024兆。
或者,在CPU外围设置可擦除可编辑逻辑器件(全称:Erasable Programmable Logic Device,简称:EPLD),预配置的硬件指示信号可以是EPLD中固定的寄存器值,片内启动逻辑通过读取EPLD中固定的寄存器值确定偏移地址。
202、按照预设顺序逐一根据偏移地址启动至少两个Boot备份,直到有一个Boot备份启动成功。
CPU上电后,片内启动逻辑开始运行,片内启动逻辑通过CPU预配置的硬件指示信号确定偏移地址,然后按照预设顺序逐一启动存储器中的Boot备份,直到有一个Boot备份启动成功。上电位置的数量、偏移地址的大小以及尝试启动Boot备份的先后顺序均由片内启动逻辑定义,本发明的实施例中,预设顺序是指由片内启动逻辑所定义的,对全部Boot备份逐一尝试启动的顺序。例如,Boot备份的数量为3,分别用数字1、2和3代表3个上电位置各自对应的起始地址,其中数字1对应的起始地址为0地址。CPU上电后的第一个上电位置可以是3个上电位置中的任意一个,那么预设顺序可以是3个上电位置的6种排列方式中的一种,即可以是1-2-3、1-3-2、2-1-3、2-3-1、3-1-2、3-2-1中的任一种。
以第一Boot备份和第二Boot备份为例进行说明。其中,第二Boot备份为按照预设顺序,位于第一Boot备份之后且与第一Boot备份相邻的Boot备份。需要说明的是,这里的相邻是指执行顺序先后相邻,而非存储位置的相邻。
第一Boot备份的起始地址为第一地址,第二Boot备份的起始地址为第二地址。第一地址取值为偏移地址的M倍,第二地址取值为偏移地址的N倍,M和N为不相等的两个预设值,M和N均大于或者等于0。
例如,偏移地址的取值为4兆,Boot备份的数量为3,3个Boot备份的起始地址取值分别为0×4兆、1×4兆和2×4兆。第一地址可以为3个地址中的任意一个,第二地址为3个地址中除第一地址之外的任意一个。
片内启动逻辑根据偏移地址确定第一地址,并尝试启动第一Boot备份。当第一Boot备份启动失败时,根据偏移地址确定第二地址,并启动第二Boot备份。依次类推,直到有一个Boot备份启动成功。
可以理解的是,CPU上电后也可以从flash中读取偏移地址,按照偏移地址和启动顺序逐一尝试启动Boot备份。或者,在另一种 可能的情况中,偏移地址的存储及获得并非必要的,CPU上电后从flash中直接读取第一Boot备份的起始地址,然后尝试启动第一Boot备份。若第一Boot备份启动失败,再从flash中直接读取第二Boot备份的起始地址,然后尝试启动第二Boot备份。可以理解的是,这两种方式仍可以和本发明实施例中提到的正确性校验的方案相结合,也可以和前述提到的上电位置对应的Boot备份的起始地址为非0地址的方案相结合。
需要说明的是,本发明的实施例中存储有至少两个Boot备份的存储器,可以是单个的非易失性存储器芯片,也可以是一个以上的非易失性存储器芯片。以flash芯片为例,至少两个Boot备份存储于至少一个flash芯片内,其中至少一个flash芯片中,一个flash芯片内存储有至少一个Boot备份。在CPU和至少一个flash芯片之间设置闪存控制逻辑电路,CPU通过闪存控制逻辑电路访问至少一个flash芯片。
通过至少一个flash芯片存储Boot备份的好处在于,flash芯片不断向容量更大、价格更便宜的趋势发展,但是其可靠性却参差不齐。因此可以采用可靠性不同的flash芯片分别存储不同的Boot备份。
例如,第一Boot备份为新版本的Boot备份,第二Boot备份为出厂版本的Boot备份,且单板在后期的使用中不对第二Boot备份进行升级。如果第一Boot备份正确无误,就能够启动新版本的Boot。如果如果第一Boot备份启动失败,在启动出厂版本的Boot,即第二Boot备份。这种情况下,可以将第二Boot备份的数据量做的相对小,存储在价格高同时可靠性也高的flash芯片内,而第一Boot备份的数据量可以相对较大,存储在价格低同时可靠性也相对较低的flash芯片内。
本发明的实施例所提供的启动Boot的方法,CPU包括片内启动逻辑,CPU上电后运行片内启动逻辑,片内启动逻辑确定偏移地址,根据偏移地址,逐一启动Boot备份,直到有一个Boot备份启动成功。片内启动逻辑支持两个或者两个以上上电位置,不同Boot备份 各自独立互无影响,不会因为一个Boot备份启动失败而导致不能启动另一个Boot备份,因此只要有一个Boot备份能够正常启动,就能够保证Boot启动,由此提高了Boot启动的可靠性。
实施例二
结合实施例一,本发明的实施例二提供另一种启动Boot的方法,应用于CPU,本实施例中结合安全启动的应用场景进行说明。
在对安全性要求较高的应用场景中,需要单板支持安全启动。安全启动要求单板从上电开始所启动的程序都应该通过数字签名校验。包括Boot和操作系统在内的程序,在启动之前都需经过数字签名校验,校验失败则程序不能启动,单板停止本次启动。
结合图1所示现有技术中的执行流程,在L1BootRom启动之前CPU要对其进行数字签名校验,如果L1BootRom未通过校验,由于不能实现从L1BootRom向其它备份的跳转,Boot启动一定会失败,继而导致单板安全启动失败。本发明的实施例二所提供的启动Boot的方法,目的在于克服由于一个Boot备份未通过校验而导致不能对其它Boot备份进行校验的问题,参照图2所示,启动Boot的方法包括以下步骤:
201、确定偏移地址。
与实施例一中步骤201相同,此处不再赘述。
202、按照预设顺序逐一根据偏移地址安全启动至少两个Boot备份,直到有一个Boot备份安全启动成功。
在安全启动的应用场景中,CPU片内启动逻辑包括片内启动代码,片内启动代码包括启动校验代码以及Boot备份数字签名的公钥。CPU上电后,运行片内启动逻辑的校验代码,读取某一个Boot备份的数字签名,并使用公钥对该Boot备份进行数字签名校验。安全启动Boot备份,即Boot备份在通过数字签名校验后启动成功。
片内启动逻辑支持从两个或者两个以上的上电位置读取Boot备份的代码。一个上电位置对应一个Boot备份,通过从不同上电位 置读取不同Boot备份的代码,片内启动逻辑可以对至少两个Boot备份中的每个Boot备份分别进行数字签名校验。也就是说,当一个Boot备份未通过数字签名校验时,片内启动逻辑跳转到另一Boot备份,对另一Boot备份进行数字签名校验。
例如,CPU上电后,片内启动逻辑对第一个上电位置对应的Boot备份进行数字签名校验,如果该Boot备份未通过校验,那么在CPU重置后,片内启动逻辑根据偏移地址进行跳转,对第二个上电位置对应的Boot备份进行数字签名校验。当然,在安全启动的应用场景中,除了对Boot备份做数字签名校验外,还可以对Boot备份做正确性校验。
以第一Boot备份和第二Boot备份为例进行说明。其中,第一Boot备份的起始地址为第一地址,第二Boot备份的起始地址为第二地址,第一地址和第二地址分别为两个不同的上电位置,且第一地址为片内启动逻辑开始运行时默认的上电位置。第一地址取值为偏移地址的M倍,第二地址取值为偏移地址的N倍,M和N为不相等的两个预设值,M和N均大于或者等于0。
CPU上电后,片内启动逻辑确定第一地址,从第一Boot备份读取数字签名,对第一Boot备份进行数字签名校验和正确性校验。
当第一Boot备份通过校验(数字签名校验和正确性校验均通过)时,启动第一Boot备份。当第一Boot备份是CPU上电后校验的第一个Boot备份时,以第一Boot备份为新版本的Boot备份为宜,如果校验通过,就能够启动新版本的Boot。
当第一Boot备份未通过校验时(数字签名校验和正确性校验其中任一项未通过),片内启动逻辑确定第二地址,从第二Boot备份读取数字签名,对第二Boot备份进行校验。当第二Boot备份通过校验时,启动第二Boot备份。可选的,第二Boot备份为出厂版本,第二Boot备份起始地址为0地址。当第一Boot备份的新版本启动失败时,启动第二Boot备份的出厂版本,第二Boot备份起始地址为非0地址。
至少两个引导Boot备份中,除了第一Boot备份和第二Boot备份之外,还包括第三Boot备份,第三Boot备份为新版本Boot备份。如果第二Boot备份未通过校验,片内启动逻辑可以再对第三Boot备份进行校验。
或者,还可以通过另一种方式启动第三Boot备份,即当第二Boot备份能够正常启动时,由第二Boot备份对第三Boot备份进行校验,如果第三Boot备份通过校验,则指示第三Boot备份启动。这么做的好处在于,第二Boot备份为出厂版本,其功能相比新版本Boot备份往往不够完善,因此第二Boot备份对第三Boot备份进行校验且第三Boot备份通过校验后,启动第三Boot备份启动,这样就可以启动新版本的Boot备份。
需要特别说明一点,Boot备份的代码包括引导部分和非引导部分,在片内启动逻辑对第三Boot备份进行校验且通过的情况下,片内启动逻辑跳转到第三Boot备份的引导部分,启动第三Boot备份。在第二Boot备份对第三Boot备份进行校验且通过的情况下,指示第三Boot备份启动时,由于第二Boot备份已经运行完成引导部分,因此直接跳转到第三Boot备份的非引导部分继续执行。
本发明的实施例所提供的启动Boot的方法中,CPU上电后运行片内启动逻辑,片内启动逻辑确定偏移地址,根据偏移地址,逐一对至少两个Boot备份进行校验,直到有一个Boot备份安全启动成功。或者,片内启动逻辑根据至少两个Boot备份的起始地址,逐一对所述Boot备份进行校验,直到有一个Boot备份安全启动成功。或者,片内启动逻辑根据上电位置对应的Boot备份的起始地址(非0)对所述Boot备份进行校验,若失败,则根据偏移地址,逐一对其他Boot备份进行检验,至少两个Boot备份进行校验,直到有一个Boot备份安全启动成功。片内启动逻辑支持两个或者两个以上上电位置,可以对各个Boot备份独立地进行校验,不会因为一个Boot备份校验失败而导致不能对另一个Boot备份进行校验,因此只要有一个Boot备份能够通过校验且正常启动,就能够正常启动Boot,由此提高了 Boot启动的可靠性。
基于图2所对应的实施例,本发明的实施例还提供一种CPU,CPU用于安装于单板上,所述单板包括存储器,所述存储器中存储有至少两个引导Boot备份,所述至少两个Boot备份中,相邻两个Boot备份的偏移地址为预设值,其中所述偏移地址为相邻两个Boot备份的起始地址之间的间隔。
CPU包括片内启动逻辑,片内启动逻辑具体可以是片内硬件电路,或者还可以是片内启动代码,或者是两者的结合。
硬件电路可以是集成于CPU内部的特定集成电路(英文全称:Application Specific Integrated Circuit,英文简称:ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
片内启动代码可以是存储于CPU内部的固化的代码,CPU上电后,调用片内启动代码,执行本发明的实施例所提供的启动Boot的方法中,CPU所执行的步骤。或者片内启动代码与片内硬件电路相配合,共同完成启动Boot的方法中CPU所执行的步骤,具体包括以下两种方式:
第一种方式,CPU确定偏移地址并根据偏移地址逐一尝试启动Boot备份。例如,CPU片内启动逻辑定义上电位置的数量、偏移地址的大小以及尝试启动Boot备份的先后顺序。CPU上电后确定偏移地址,按照预设顺序逐一根据偏移地址启动Boot备份,以及对Boot备份进行正确性校验和数字签名校验,直到有一个Boot备份启动成功。
第二种方式,CPU上电后从flash中读取Boot备份的起始地址,并尝试启动起始地址对应的Boot备份。若一个Boot备份启动失败,则读取下一Boot备份的起始地址,尝试启动下一Boot备份,直到有一个Boot备份启动成功。
可以理解的是,这两种方式可以和本发明实施例中提到的正确性校验的方案相结合,也可以和前述提到的上电位置对应的Boot备份的起始地址为非0地址的方案相结合。
结合图3所示,在一种可能的实施方式中,CPU30包括:
确定单元301,用于确定偏移地址。
Boot启动控制单元302,用于按照预设顺序逐一根据偏移地址启动至少两个Boot备份,直到有一个Boot备份启动成功。
可选的,确定单元301,具体用于根据预配置的硬件指示信号确定偏移地址。
可选的,启动Boot过程中,Boot启动控制单元302访问的第一个Boot备份对应的起始地址不为0。
可选的,至少两个Boot备份包括第一Boot备份和第二Boot备份。
Boot启动控制单元302,具体用于根据偏移地址确定第一地址,并对第一Boot备份进行校验。当第一Boot备份通过校验时,启动第一Boot备份。其中,第一地址为第一Boot备份的起始地址,第一地址为偏移地址的M倍,M为大于或者等于0的整数,且M为预设值。
Boot启动控制单元302,还用于当第一Boot备份未通过校验时,根据偏移地址确定第二地址,并根据第二地址对第二Boot备份进行校验,当第二Boot备份通过校验时,启动第二Boot备份。其中,第二地址为第二Boot备份的起始地址,第二地址为偏移地址的N倍,N为大于或者等于0的整数,且N为不等于M的预设值。
可选的,至少两个Boot备份包括第一Boot备份和第二Boot备份。
Boot启动控制单元302,具体用于根据偏移地址确定第一地址,并启动第一Boot备份。其中,第一地址为第一Boot备份的起始地址,第一地址为偏移地址的M倍,M为大于或者等于0的整数,且M为预设值。
Boot启动控制单元302,还用当第一Boot备份启动失败时,根据偏移地址确定第二地址,并启动第二Boot备份。其中,第二地址为第二Boot备份的起始地址,第二地址为偏移地址的N倍,N为大 于或者等于0的整数,且N为不等于M的预设值。
可选的,CPU30外围设置有EPLD 303。
确定单元301,具体用于读取EPLD 303中的寄存器值,将寄存器值作为偏移地址的取值。
可选的,CPU30设置有用于接收硬件指示信号的管脚。
确定单元301,具体用于读取单板向管脚输入的二进制代码,并根据二进制代码确定偏移地址。
可选的,CPU30还包括存储单元304,用于存储至少两个备选偏移地址。
确定单元301,具体用于根据二进制代码,从至少两个备选偏移地址中确定其一为偏移地址。
可选的,确定单元301,具体用于将二进制代码的取值作为偏置地址的取值。
本发明的实施例所提供的CPU,CPU包括片内启动逻辑,CPU上电后运行片内启动逻辑,片内启动逻辑确定偏移地址,根据偏移地址,逐一启动Boot备份,直到有一个Boot备份启动成功。片内启动逻辑支持两个或者两个以上上电位置,不同Boot备份各自独立互无影响,不会因为一个Boot备份启动失败而导致不能启动另一个Boot备份,因此只要有一个Boot备份能够正常启动,就能够保证Boot启动,由此提高了Boot启动的可靠性。
基于图3所对应的实施例,本发明的实施例还提供一种单板,参照图4所示,单板40包括CPU401以及存储器402。
其中,CPU401为图4所对应的实施例中所描述的CPU401。
存储器402中存储有至少两个引导Boot备份,至少两个Boot备份中,相邻两个Boot备份的偏移地址为预设值,偏移地址为相邻两个Boot备份的起始地址之间的间隔。
可选的,至少两个引导Boot备份包括第一Boot备份、第二Boot备份以及第三Boot备份。
当第一Boot备份启动失败,且第二Boot备份启动后,第二Boot 用于对第三Boot备份进行校验,当第三Boot备份通过校验时,指示第三Boot备份启动。
可选的,第一Boot备份以及第三Boot备份为新版本Boot备份,第二Boot备份为出厂版本Boot备份。
可选的,存储器402包括至少一个闪存芯片403,图4所示为包括3个闪存芯片403的情况。至少两个Boot备份存储于至少一个闪存芯片403内。其中至少一个闪存芯片403中,一个闪存芯片403内存储有至少一个Boot备份。
单板40还包括闪存控制逻辑电路404,CPU401通过闪存控制逻辑电路404访问至少一个闪存芯片。
本发明的实施例所提供的单板,包括CPU以及存储器,CPU上电后确定偏移地址,根据偏移地址,逐一启动存储器中所存储的Boot备份,直到有一个Boot备份启动成功。CPU支持两个或者两个以上上电位置,不同Boot备份各自独立互无影响,不会因为一个Boot备份启动失败而导致不能启动另一个Boot备份,因此只要有一个Boot备份能够正常启动,就能够保证Boot启动,由此提高了Boot启动的可靠性,并进一步提高了单板启动的可靠性。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (22)

  1. 一种启动Boot的方法,应用于中央处理器CPU,其特征在于,所述CPU安装于单板上,所述单板包括存储器,所述存储器中存储有至少两个引导Boot备份,所述至少两个Boot备份中,相邻两个Boot备份的偏移地址为预设值,其中所述偏移地址为相邻两个Boot备份的起始地址之间的间隔,所述CPU包括片内启动逻辑,所述CPU通过所述片内启动逻辑执行所述启动Boot的方法,所述启动Boot的方法包括:
    确定所述偏移地址;按照预设顺序逐一根据偏移地址启动所述至少两个Boot备份,直到有一个Boot备份启动成功。
  2. 根据权利要求1所述的启动Boot的方法,其特征在于,所述确定所述偏移地址包括:
    根据预配置的硬件指示信号确定所述偏移地址。
  3. 根据权利要求1或2所述的启动Boot的方法,其特征在于,启动Boot过程中,所述CPU访问的第一个Boot备份对应的起始地址不为0。
  4. 根据权利要求1-3中任意一项所述的启动Boot的方法,其特征在于,所述至少两个Boot备份包括第一Boot备份和第二Boot备份,所述根据所述偏移地址,按照预设顺序逐一启动所述至少两个Boot备份,包括:
    根据所述偏移地址确定第一地址,并对所述第一Boot备份进行校验;其中,所述第一地址为所述第一Boot备份的起始地址,所述第一地址为所述偏移地址的M倍,M为大于或者等于0的整数,且M为预设值;
    当所述第一Boot备份通过校验时,启动所述第一Boot备份;
    当所述第一Boot备份未通过校验时,根据所述偏移地址确定第二地址,并根据所述第二地址对所述第二Boot备份进行校验,当所述第二Boot备份通过校验时,启动所述第二Boot备份;其中,所述第二地址为所述第二Boot备份的起始地址,所述第二地址为所述偏 移地址的N倍,N为大于或者等于0的整数,且N为不等于M的预设值。
  5. 根据权利要求1-3中任意一项所述的启动Boot的方法,其特征在于,所述至少两个Boot备份包括第一Boot备份和第二Boot备份,所述根据所述偏移地址,按照预设顺序逐一启动所述至少两个Boot备份,包括:
    根据所述偏移地址确定第一地址,并启动所述第一Boot备份;其中,所述第一地址为所述第一Boot备份的起始地址,所述第一地址为所述偏移地址的M倍,M为大于或者等于0的整数,且M为预设值;
    当所述第一Boot备份启动失败时,根据所述偏移地址确定第二地址,并启动所述第二Boot备份;其中,所述第二地址为所述第二Boot备份的起始地址,所述第二地址为所述偏移地址的N倍,N为大于或者等于0的整数,且N为不等于M的预设值。
  6. 根据权利要求2-5任一项所述的启动Boot的方法,其特征在于,所述CPU外围设置有可擦除可编辑逻辑器件EPLD;
    所述根据预配置的硬件指示信号确定所述偏移地址,包括:
    读取所述EPLD中的寄存器值,将所述寄存器值作为所述偏移地址的取值。
  7. 根据权利要求2-5任一项所述的启动Boot的方法,其特征在于,
    所述CPU设置有用于接收所述硬件指示信号的管脚;
    所述根据预配置的硬件指示信号确定所述偏移地址,包括:
    读取所述单板向所述管脚输入的二进制代码;
    根据所述二进制代码确定所述偏移地址。
  8. 根据权利要求7所述的启动Boot的方法,其特征在于,所述CPU的片内启动逻辑定义至少两个备选偏移地址;
    所述根据所述二进制代码确定所述偏移地址,包括:
    根据所述二进制代码,从所述至少两个备选偏移地址中确定其一 为所述偏移地址。
  9. 根据权利要求7或8所述的启动Boot的方法,其特征在于,所述根据所述二进制代码确定所述偏移地址,包括:
    将所述二进制代码的取值作为所述偏置地址的取值。
  10. 一种中央处理器CPU,所述CPU用于安装于单板上,所述单板包括存储器,所述存储器中存储有至少两个引导Boot备份,所述至少两个Boot备份中,相邻两个Boot备份的偏移地址为预设值,其中所述偏移地址为相邻两个Boot备份的起始地址之间的间隔;所述CPU包括:
    确定单元,用于确定所述偏移地址;
    Boot启动控制单元,用于按照预设顺序逐一根据所述偏移地址启动所述至少两个Boot备份,直到有一个Boot备份启动成功。
  11. 根据权利要求10所述的CPU,其特征在于,
    所述确定单元,具体用于根据预配置的硬件指示信号确定所述偏移地址。
  12. 根据权利要求10或11所述的CPU,其特征在于,
    启动Boot过程中,所述Boot启动控制单元访问的第一个Boot备份对应的起始地址不为0。
  13. 根据权利要求10-12任一项所述的CPU,其特征在于,所述至少两个Boot备份包括第一Boot备份和第二Boot备份;
    所述Boot启动控制单元,具体用于根据所述偏移地址确定第一地址,并对所述第一Boot备份进行校验;当所述第一Boot备份通过校验时,启动所述第一Boot备份;其中,所述第一地址为所述第一Boot备份的起始地址,所述第一地址为所述偏移地址的M倍,M为大于或者等于0的整数,且M为预设值;
    所述Boot启动控制单元,还用于当所述第一Boot备份未通过校验时,根据所述偏移地址确定第二地址,并根据所述第二地址对所述第二Boot备份进行校验,当所述第二Boot备份通过校验时,启动所述第二Boot备份;其中,所述第二地址为所述第二Boot备份的起始 地址,所述第二地址为所述偏移地址的N倍,N为大于或者等于0的整数,且N为不等于M的预设值。
  14. 根据权利要求10-12任一项所述的CPU,其特征在于,所述至少两个Boot备份包括第一Boot备份和第二Boot备份;
    所述Boot启动控制单元,具体用于根据所述偏移地址确定第一地址,并启动所述第一Boot备份;其中,所述第一地址为所述第一Boot备份的起始地址,所述第一地址为所述偏移地址的M倍,M为大于或者等于0的整数,且M为预设值;
    所述Boot启动控制单元,还用当所述第一Boot备份启动失败时,根据所述偏移地址确定第二地址,并启动所述第二Boot备份;其中,所述第二地址为所述第二Boot备份的起始地址,所述第二地址为所述偏移地址的N倍,N为大于或者等于0的整数,且N为不等于M的预设值。
  15. 根据权利要求11-14任一项所述的CPU,其特征在于,所述CPU外围设置有可擦除可编辑逻辑器件EPLD;
    所述确定单元,具体用于读取所述EPLD中的寄存器值,将所述寄存器值作为所述偏移地址的取值。
  16. 根据权利要求11-14任一项所述的CPU,其特征在于,所述CPU设置有用于接收所述硬件指示信号的管脚;
    所述确定单元,具体用于读取所述单板向所述管脚输入的二进制代码,并根据所述二进制代码确定所述偏移地址。
  17. 根据权利要求16所述的CPU,其特征在于,所述CPU还包括存储单元,用于存储至少两个备选偏移地址;
    所述确定单元,具体用于根据所述二进制代码,从所述至少两个备选偏移地址中确定其一为所述偏移地址。
  18. 根据权利要求16或17所述的CPU,其特征在于,
    所述确定单元,具体用于将所述二进制代码的取值作为所述偏置地址的取值。
  19. 一种单板,其特征在于,所述单板包括中央处理器CPU以 及存储器;
    其中,所述CPU为权利要求10-18任一项所述的CPU;
    所述存储器中存储有至少两个引导Boot备份,所述至少两个Boot备份中,相邻两个Boot备份的偏移地址为预设值,所述偏移地址为相邻两个Boot备份的起始地址之间的间隔。
  20. 根据权利要求19所述的单板,其特征在于,所述至少两个引导Boot备份包括第一Boot备份、第二Boot备份以及第三Boot备份;
    当所述第一Boot备份启动失败,且所述第二Boot备份启动后,所述第二Boot用于对所述第三Boot备份进行校验,当所述第三Boot备份通过校验时,指示所述第三Boot备份启动。
  21. 根据权利要求20所述的单板,其特征在于,
    所述第一Boot备份以及所述第三Boot备份为新版本Boot备份,所述第二Boot备份为出厂版本Boot备份。
  22. 根据权利要求19-21任一项所述的单板,其特征在于,
    所述存储器包括至少一个闪存芯片,所述至少两个Boot备份存储于所述至少一个闪存芯片内;其中所述至少一个闪存芯片中,一个闪存芯片内存储有至少一个Boot备份;
    所述单板还包括闪存控制逻辑电路,所述CPU通过所述闪存控制逻辑电路访问所述至少一个闪存芯片。
CN201680082286.XA 2016-02-23 2016-02-23 一种启动Boot的方法、CPU及单板 Pending CN108701036A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2016/074331 WO2017143513A1 (zh) 2016-02-23 2016-02-23 一种启动Boot的方法、CPU及单板

Publications (1)

Publication Number Publication Date
CN108701036A true CN108701036A (zh) 2018-10-23

Family

ID=59685793

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680082286.XA Pending CN108701036A (zh) 2016-02-23 2016-02-23 一种启动Boot的方法、CPU及单板

Country Status (2)

Country Link
CN (1) CN108701036A (zh)
WO (1) WO2017143513A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110007971A (zh) * 2019-03-25 2019-07-12 联想(北京)有限公司 一种信息处理方法及装置、设备、存储介质
CN111143131A (zh) * 2019-12-26 2020-05-12 中国电子科技集团公司第五十八研究所 对操作系统进行备份热启动的系统

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114610415B (zh) * 2022-03-23 2024-01-16 北京经纬恒润科技股份有限公司 一种程序启动方法、系统、存储介质及电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1501621A (zh) * 2002-11-18 2004-06-02 华为技术有限公司 一种系统安全启动方法
CN102135891A (zh) * 2010-01-21 2011-07-27 杭州华三通信技术有限公司 可实现引导启动的系统及引导启动控制装置和方法
CN102135927A (zh) * 2011-04-29 2011-07-27 杭州华三通信技术有限公司 一种基于nand flash的系统引导方法和装置
CN102388365A (zh) * 2011-09-27 2012-03-21 华为技术有限公司 一种处理器启动方法及装置
CN102736933A (zh) * 2012-05-16 2012-10-17 中兴通讯股份有限公司 Boot文件加载方法及装置
CN103116511A (zh) * 2013-01-29 2013-05-22 烽火通信科技股份有限公司 基于单个flash存储芯片的双启动方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100472442C (zh) * 2006-03-02 2009-03-25 中兴通讯股份有限公司 一种对固件程序进行在线升级的装置及其方法
CN102509047B (zh) * 2011-11-09 2014-08-27 北京赛科世纪数码科技有限公司 校验机顶盒中程序代码的方法和系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1501621A (zh) * 2002-11-18 2004-06-02 华为技术有限公司 一种系统安全启动方法
CN102135891A (zh) * 2010-01-21 2011-07-27 杭州华三通信技术有限公司 可实现引导启动的系统及引导启动控制装置和方法
CN102135927A (zh) * 2011-04-29 2011-07-27 杭州华三通信技术有限公司 一种基于nand flash的系统引导方法和装置
CN102388365A (zh) * 2011-09-27 2012-03-21 华为技术有限公司 一种处理器启动方法及装置
CN102736933A (zh) * 2012-05-16 2012-10-17 中兴通讯股份有限公司 Boot文件加载方法及装置
CN103116511A (zh) * 2013-01-29 2013-05-22 烽火通信科技股份有限公司 基于单个flash存储芯片的双启动方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110007971A (zh) * 2019-03-25 2019-07-12 联想(北京)有限公司 一种信息处理方法及装置、设备、存储介质
CN111143131A (zh) * 2019-12-26 2020-05-12 中国电子科技集团公司第五十八研究所 对操作系统进行备份热启动的系统
CN111143131B (zh) * 2019-12-26 2022-08-12 中国电子科技集团公司第五十八研究所 对操作系统进行备份热启动的系统

Also Published As

Publication number Publication date
WO2017143513A1 (zh) 2017-08-31

Similar Documents

Publication Publication Date Title
US6651188B2 (en) Automatic replacement of corrupted BIOS image
US8683457B1 (en) Updating firmware of an electronic device by storing a version identifier in a separate header
US9027014B2 (en) Updating firmware compatibility data
CN100582799C (zh) 电子设备诊断方法和系统
US8943302B2 (en) Method of flashing bios using service processor and computer system using the same
US7900036B2 (en) System and method for implementing boot/recovery on a data processing sysem
CN107480011B (zh) Bios切换装置
CN110874467B (zh) 信息处理方法、装置、系统以及处理器、存储介质
US10909247B2 (en) Computing device having two trusted platform modules
CN110928499A (zh) 一种芯片内嵌的flash存储器、芯片以及芯片的启动方法
KR20120123507A (ko) 장비의 리부트 이유를 기록하는 장치 및 방법
CN108701036A (zh) 一种启动Boot的方法、CPU及单板
US20130080751A1 (en) Method and device for updating bios program for computer system
CN112083961B (zh) 嵌入式芯片的引导加载方法
US9594623B2 (en) System on chip and method of updating program code on a system on chip
CN100498728C (zh) 用于确定一组健康的处理器和用来引导系统的关联固件的系统和方法
CN113590209B (zh) 芯片启动控制方法、芯片及电子设备
WO2021012170A1 (zh) 固件启动方法、设备及计算机可读存储介质
CN116820528A (zh) 固件版本升级方法、装置、芯片和电子设备
KR101844095B1 (ko) 부트로더 실행 방법 및 장치
US7076643B2 (en) Method and apparatus for providing revision identification numbers
US11586504B2 (en) Electronic apparatus and boot method thereof
CN105278993B (zh) 一种基于Linux系统的驱动模块升级方法及装置
CN111857882B (zh) 可扩展的ssd开卡固件加载方法、装置、计算机设备及存储介质
US7895577B2 (en) Device for testing the structural coverage of a software program and a method implementing the device

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20181023

RJ01 Rejection of invention patent application after publication