引导程序的升级方法和装置的制作方法

文档序号:6337613阅读:369来源:国知局
专利名称:引导程序的升级方法和装置的制作方法
技术领域
本发明涉及通信领域,具体而言,涉及一种引导程序的升级方法和装置。
背景技术
早期的嵌入式设备中,引导程序(B00TR0M) —般是一次性写入只读存储器(ROM或 FLASH),不考虑在线升级。为了应对复杂的应用需求,嵌入式设备开始支持引导程序的在线升级。目前支持引导程序升级的嵌入式设备采用的方案大致上有以下共同点1、设置两个或多个弓I导程序存储区。2、设置一个公用的参数区。3、由硬件提供引导程序存储区地址的切换,并可由引导程序控制。上面第3个特点说明目前通用的双引导程序或多引导程序升级方案都需要硬件提供地址切换的能力。对硬件有这一要求的原因在于,嵌入式引导程序在编译时必须指定其运行时所处的地址,引导程序编译好后,必须把它存放到正确的地址上工作。这样在一般升级方案种造成两个弓I导程序都需要在一个地址上运行的局面。所以需要引入硬件提供地址切换的配合来解决哪个引导程序被选中工作,那个引导程序所在的存储区域就被切换到正确的地址上。这一类方案因为对硬件有特殊要求,增加了硬件复杂度,应用场合也受到了限制。

发明内容
针对相关技术中第一引导程序和第二引导程序都需要在一个地址上运行从而需要引入硬件提供地址切换的问题而提出本发明,为此,本发明的主要目的在于提供一种引导程序的升级方法和装置,以解决上述问题。为了实现上述目的,根据本发明的一个方面,提供了一种引导程序的升级方法。根据本发明的引导程序的升级方法包括在可擦除存储器中划分第一引导程序区和第二引导程序区,其中第一引导程序区中存储有用于正常引导的第一引导程序,第二引导程序区中存储有待升级的第二引导程序;确定使用第二引导程序引导成功;确定第二引导程序为升级后的引导程序。进一步地,第一引导程序的起始地址为第一引导程序区开始的位置,第二引导程序的起始地址为第二引导程序区开始的位置。进一步地,在确定使用第二引导程序引导成功之前,上述方法还包括判断第二引导程序的版本号是否高于第一引导程序的版本号;如果判断结果为是,则使用第二引导程序引导。进一步地,在确定使用第二引导程序引导成功之前,上述方法还包括判断是否设置与第二引导程序对应的引导失败标志,其中引导失败标志用于指示使用第二引导程序引导失败;如果判断结果为否,则使用第二引导程序引导。
进一步地,在使用第二引导程序引导之后,上述方法还包括判断是否设置与第二引导程序对应的引导等待标志,其中引导等待标志用于指示等待使用第二引导程序引导; 如果判断结果为是,则设置与第二引导程序对应的引导进行标志,其中引导进行标志用于指示正在使用第二引导程序进行引导。进一步地,在使用第二引导程序引导之后,上述方法还包括判断是否设置与第二引导程序对应的引导进行标志,其中引导进行标志用于指示正在使用第二引导程序进行引导;如果判断结果为是,则设置与第二引导程序对应的引导失败标志,其中引导失败标志用于指示使用第二引导程序引导失败。进一步地,在设置与第二引导程序对应的引导失败标志之后,上述方法还包括重启并使用第一引导程序进行引导。进一步地,在确定使用第二引导程序引导成功之后,上述方法还包括判断是否设置与第二引导程序对应的引导进行标志,其中引导进行标志用于指示正在使用第二引导程序进行引导;如果判断结果为是,则设置与第二引导程序对应的引导成功标志,其中引导成功标志用于指示使用第二引导程序弓I导成功。进一步地,第一引导程序区和第二引导程序区均为512KByte。为了实现上述目的,根据本发明的另一个方面,提供了一种引导程序的升级装置。根据本发明的引导程序的升级装置包括划分模块,用于在可擦除存储器中划分第一引导程序区和第二引导程序区;第一存储模块,用于在第一引导程序区中存储用于正常引导的第一引导程序;第二存储模块,用于在第二引导程序区中存储待升级的第二引导程序;第一确定模块,用于确定使用第二引导程序引导成功;第二确定模块,用于确定第二引导程序为升级后的引导程序。通过本发明,第一引导程序区和第二引导程序区均具有明确的地址,从而使得第一引导程序和第二引导程序具有互不相同的地址,解决了相关技术中第一引导程序和第二引导程序都需要在一个地址上运行从而需要引入硬件提供地址切换的问题,进而可以避免硬件地址切换的引入,降低硬件复杂度,提高用户体验。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1是根据本发明实施例的引导程序的升级方法的流程图;图2是根据本发明实施例的文件编译合并过程的示意图;图3是根据本发明实施例的引导程序的选择控制方法的流程图;图4是根据本发明实施例的FLASH空间划分的示意图;图5是根据本发明实施例的引导程序在线升级方法的流程图;图6是根据本发明实施例的引导程序的升级装置的结构框图。
具体实施例方式需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供了一种引导程序的升级方法。图1是根据本发明实施例的引导程序的升级方法的流程图,如图1所示,包括如下的步骤S102至步骤S106。步骤S102,在可擦除存储器中划分第一引导程序区和第二引导程序区,其中第一引导程序区中存储有用于正常引导的第一引导程序,第二引导程序区中存储有待升级的第二引导程序。步骤S104,确定使用第二引导程序弓I导成功。步骤S106,确定第二引导程序为升级后的引导程序。相关技术中,第一引导程序和第二引导程序都需要在一个地址上运行,从而需要引入硬件提供地址切换。本发明实施例中,第一引导程序区和第二引导程序区均具有明确的地址,从而使得第一引导程序和第二引导程序具有互不相同的地址,进而可以避免硬件地址切换的引入,降低硬件复杂度,提高用户体验。需要说明的是,上述可擦除存储器可以优选的为FLASH。优选地,第一引导程序的起始地址为第一引导程序区开始的位置,第二引导程序的起始地址为第二引导程序区开始的位置。图2是根据本发明实施例的文件编译合并过程的示意图,如图2所示,可以通过如下的第一步至第三步进行文件的编译合并。第一步,指定B00TR0M工作地址(后面称为R0M_BASE_ADRS)为第一 B00TR0M区起始地址(后面称为R0M_ADRS_1ST),编译生成二进制的B00T1. bin。 第二步,指定R0M_BASE_ADRS为第二 B00TR0M区起始地址(后面称为R0M_ ADRS_2ND),编译生成二进制的B00T2. bin。第三步,把上两步生成的B00TR0M合并成一个二进制文件B00TR0M. bin。B00T1. bin被填充到起始地址为0开始的位置,B00T2. bin被填充到起始地址为512KBbyte开始的位置。需要说明的是,在本发明的实现过程中,上述第一引导程序区可以为第一 B00TR0M 区,也可以为第二 B00TR0M区。具体地,当第一引导程序区为第一 B00TR0M区或第二 B00TR0M 区时,第二引导程序区相应的为第二 B00TR0M区或第一 B00TR0M区。优选地,在确定使用第二引导程序引导成功之前,上述方法还包括判断第二引导程序的版本号是否高于第一引导程序的版本号;如果判断结果为是,则使用第二引导程序引导。优选地,在确定使用第二引导程序引导成功之前,上述方法还包括判断是否设置与第二引导程序对应的引导失败标志,其中引导失败标志用于指示使用第二引导程序引导失败;如果判断结果为否,则使用第二引导程序引导。优选地,在使用第二引导程序引导之后,上述方法还包括判断是否设置与第二引导程序对应的引导等待标志,其中引导等待标志用于指示等待使用第二引导程序引导;如果判断结果为是,则设置与第二引导程序对应的引导进行标志,其中引导进行标志用于指示正在使用第二引导程序进行引导。优选地,在使用第二引导程序引导之后,上述方法还包括判断是否设置与第二引导程序对应的引导进行标志,其中引导进行标志用于指示正在使用第二引导程序进行引导;如果判断结果为是,则设置与第二引导程序对应的引导失败标志,其中引导失败标志用于指示使用第二引导程序引导失败。优选地,在设置与第二引导程序对应的引导失败标志之后,上述方法还包括重启并使用第一引导程序进行引导。优选地,在确定使用第二引导程序引导成功之后,上述方法还包括判断是否设置与第二引导程序对应的引导进行标志,其中引导进行标志用于指示正在使用第二引导程序进行引导;如果判断结果为是,则设置与第二引导程序对应的引导成功标志,其中引导成功标志用于指示使用第二引导程序弓I导成功。具体地,上述对第一引导程序和第二引导程序的选择控制可以通过选择控制程序实现,该选择控制程序可以存储在由上述FLASH划分出的选择控制区中,该选择控制区可以独自占用一个FLASH块。另外,上述选择控制程序中可以包含上述第一引导程序和第二引导程序的存在标志、版本号、试运行状态、起始地址等信息。具体地,第一引导程序和第二引导程序的试运行状态包括“等待试运行”、“正在试运行”、“试运行成功”、“试运行失败”4种值。下面分别对典型情况下第一引导程序和第二弓I导程序试运行状态的变化情况进行描述。1、在线升级B00TR0M后,设置试运行状态为“等待试运行”。2、设备启动时,如果发现B00TR0M试运行状态为“等待试运行”则选择该B00TR0M 运行,并将其改为“正在试运行”。3、设备启动时,如果发现B00TR0M试运行状态为“正在试运行”,则将其修改为“试运行失败”。4、设备引导成功后,检查试运行状态,如果发现B00TR0M试运行状态为“正在试运行”,则将其修改为“试运行成功”。图3是根据本发明实施例的引导程序的选择控制方法的流程图,如图3所示,包括如下的步骤S302至步骤S324。步骤S302,上电启动基本配置(romlnit. s中)。步骤S304,设置堆栈指针(这步后可以调用C函数)。步骤S306,读取引导选择控制区。步骤S308,检查第一、第二引导程序参数区的试运行状态,如果为“正在试运行”即改为“试运行失败”。步骤S310,判断第二引导程序区的存在标志是否有效,如果是,则进行步骤S312, 否则进行步骤S324。步骤S312,判断第二引导程序区试运行标志是否为“等待试运行”,如果是,则进行步骤S314,否则进行步骤S316。步骤S314,把第二引导程序试运行标志改为“正在试运行”,然后进行步骤S322。步骤S316,判断第一引导程序区试运行标志是否为“等待试运行”,如果是,则进行步骤S318,否则进行步骤S320。步骤S318,判断第二引导程序区版本号是否大于第一区版本号,如果是,则进行步骤S322,否则进行步骤S324。步骤S320,把第一引导程序试运行标志改为“正在试运行”,然后进行步骤S324。步骤S322,从第二引导程序启动。
步骤S324,从第一引导程序启动。本优选实施例在嵌入式设备上实现了基于两个引导程序的安全的可回退的引导程序升级。优选地,第一引导程序区和第二引导程序区均为512KByte。 图4是根据本发明实施例的FLASH空间划分的示意图,如图4所示,包括第一引导程序区、第二引导程序区和引导选择控制区,其中第一引导程序区和第二引导程序区均为 512Kbyte,引导选择控制区为128Kbyte。需要说明的是,新设备初次使用时,需要使用特殊工具将引导程序写入FLASH。需要先擦除FLASH,然后把B00TR0M. bin文件写入第一引导程序区和第二引导程序区的空间。 此时因为引导选择控制区为空,第二引导程序区的内容会被忽略。本发明还提供了一种在线升级引导程序的方法。图5是根据本发明实施例的引导程序在线升级方法的流程图,如图5所示,包括如下的步骤S502至步骤S516。步骤S502,在线升级。步骤S504,读取引导选择控制区。步骤S506,判断第二引导程序版本号是否大于第一引导程序版本号,如果是,则进行步骤S512,否则进行步骤S508。步骤S508,选择BOOT, bin文件的前半部分写入第一引导程序区。步骤S510,设置第一引导程序的试运行状态为“等待试运行”,然后进行步骤 S516。步骤S512,选择BOOT, bin文件的后半部分写入第二引导程序区。步骤S514,设置第二引导程序的试运行状态为“等待试运行”。步骤S516,结束。根据引导选择控制区选择从B00TR0M. bin文件中选择B00T1. bin或B00T2. bin写入对应的第一引导程序区或第二引导程序区,并重新设置引导选择控制区。下面将结合实例对本发明实施例的实现过程进行详细描述。某嵌入式设备中,采用了本方法实现了可安全升级、可回退的双B00TR0M。硬件上,该设备采用64MByte FLASH作为启动芯片(由片选0信号选中)。首先,在FLASH中分配了片内地址为0 512KByte的区间作为第一 B00TR0M区, 片内地址为512K IMByte的区间作为第二 B00TR0M区,片内地址为IM (1M+128K)Byte 区间作为BOOT选择控制区。然后,在软件上加入图3和图5中的实现。本系统软件上基于vxWorks系统。包括以下几点第一、BOOT区选择功能代码在汇编代码romlnit. s中增加,具体位置为初始化好 SP指针之后和跳转到romStart函数之前。此处堆栈指针已配置可以调用C函数,本功能部分代码由汇编实现,如读写判断状态字,复杂的部分由C函数实现,如改写“试运行状态”等字段。实现细节如图3。第二、在B00TR0M加载image映像成功之后和跳转到image运行之前,增加修改 “试运行状态”的代码。能运行至此处说明B00TR0M是功能正常的,在这里直接把“试运行状态”修改为“试运行成功”即可。
第三、应用程序(即image映像)中增加在线升级B00TR0M的代码。该部分代码对位置无特殊要求,以一个函数形式增加到sysLib. c中。函数实现如图5。最后,修改编译脚本,以编译出两个文件合并。基于原来的MakefiIe新增两个makefile 文件,分别为 mkbootl,mkboot2。Mkbootl 中指定 R0M_BASE_ADRS 为 R0MADRS_1ST,Mkboot2 中指定 R0M_BASE_ADRS 为 R0MADRS_2ND。再增加一个批处理文件,mkboot. bat,该文件中主要由3条命令使用mkbootl作为 makefile 编译 B00TR0M,使用 mkboot2 作为 makefile 编译 B00TR0M,文件合并。文件合并的工具为在VC下自行编写。新设备初次使用时,使用特殊的FLASH在线烧录工具把B00TR0M. bin写入到FLASH 的第一 B00TR0M区和第二 B00TR0M区,不用设置BOOT选择参数区。启动后,设备从第一 B00TR0M区启动。进行第一次升级后,设备从第二 B00TR0M区启动。此过程为一次正常的升级过程。进行第二次升级后,设备从第一 B00TR0M区启动。此过程为一次正常的升级过程。继续进行第三次升级,重启设备10秒钟后(此时正从第二 B00TR0M区启动中)再次重启,设备从第一 B00TR0M区启动,查看第二 B00TR0M区试运行状态被设置为“试运行失败”。此过程为一次升级失败及回退的过程。使用情况完全符合预期。需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。本发明实施例提供了一种引导程序的升级装置,该引导程序的升级装置可以用于实现上述引导程序的升级方法。图6是根据本发明实施例的引导程序的升级装置的结构框图,包括划分模块61,第一存储模块62,第二存储模块63,第一确定模块64,第二确定模块 65。下面对其结构进行详细描述。划分模块61,用于在可擦除存储器中划分第一引导程序区和第二引导程序区;第一存储模块62,连接至划分模块61,用于在划分模块61划分的第一引导程序区中存储用于正常引导的第一引导程序;第二存储模块63,连接至划分模块61,用于在划分模块61划分的第二引导程序区中存储待升级的第二引导程序;第一确定模块64,连接至第二存储模块 63,用于确定使用第二存储模块63存储的第二引导程序引导成功;第二确定模块65,连接至第一确定模块64和第二存储模块63,用于在第一确定模块64确定第二引导程序引导成功之后,确定第二存储模块63存储的第二引导程序为升级后的引导程序。需要说明的是,上述可擦除存储器可以优选的为FLASH。综上所述,根据本发明的上述实施例,提供了一种引导程序的升级方法和装置。由于第一引导程序区和第二引导程序区均具有明确的地址,从而使得第一引导程序和第二引导程序具有互不相同的地址,解决了相关技术中第一引导程序和第二引导程序都需要在一个地址上运行从而需要引入硬件提供地址切换的问题,进而可以避免硬件地址切换的引入,降低硬件复杂度,提高用户体验需要说明的是,装置实施例中描述的引导程序的升级装置对应于上述的方法实施例,其具体的实现过程在方法实施例中已经进行过详细说明,在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种引导程序的升级方法,其特征在于,包括在可擦除存储器中划分第一引导程序区和第二引导程序区,其中所述第一引导程序区中存储有用于正常引导的第一引导程序,所述第二引导程序区中存储有待升级的第二引导程序;确定使用所述第二引导程序引导成功;确定所述第二引导程序为升级后的弓I导程序。
2.根据权利要求1所述的方法,其特征在于,所述第一引导程序的起始地址为所述第一引导程序区开始的位置,所述第二引导程序的起始地址为所述第二引导程序区开始的位置。
3.根据权利要求1所述的方法,其特征在于,在确定使用所述第二引导程序引导成功之前,所述方法还包括判断所述第二引导程序的版本号是否高于所述第一引导程序的版本号;如果判断结果为是,则使用所述第二引导程序引导。
4.根据权利要求1所述的方法,其特征在于,在确定使用所述第二引导程序引导成功之前,所述方法还包括判断是否设置与所述第二引导程序对应的引导失败标志,其中所述引导失败标志用于指示使用所述第二引导程序引导失败;如果判断结果为否,则使用所述第二引导程序引导。
5.根据权利要求3或4所述的方法,其特征在于,在使用所述第二引导程序引导之后, 所述方法还包括判断是否设置与所述第二引导程序对应的引导等待标志,其中所述引导等待标志用于指示等待使用所述第二引导程序引导;如果判断结果为是,则设置与所述第二引导程序对应的引导进行标志,其中所述引导进行标志用于指示正在使用所述第二弓I导程序进行引导。
6.根据权利要求3或4所述的方法,其特征在于,在使用所述第二引导程序引导之后, 所述方法还包括判断是否设置与所述第二引导程序对应的引导进行标志,其中所述引导进行标志用于指示正在使用所述第二引导程序进行引导;如果判断结果为是,则设置与所述第二引导程序对应的引导失败标志,其中所述引导失败标志用于指示使用所述第二引导程序弓I导失败。
7.根据权利要求6所述的方法,其特征在于,在设置与所述第二引导程序对应的引导失败标志之后,所述方法还包括重启并使用所述第一引导程序进行引导。
8.根据权利要求1所述的方法,其特征在于,在确定使用所述第二引导程序引导成功之后,所述方法还包括判断是否设置与所述第二引导程序对应的引导进行标志,其中所述引导进行标志用于指示正在使用所述第二引导程序进行引导;如果判断结果为是,则设置与所述第二引导程序对应的引导成功标志,其中所述引导成功标志用于指示使用所述第二引导程序弓I导成功。
9.根据权利要求1所述的方法,其特征在于,所述第一引导程序区和所述第二引导程序区均为512KByte。
10.一种引导程序的升级装置,其特征在于,包括划分模块,用于在可擦除存储器中划分第一引导程序区和第二引导程序区; 第一存储模块,用于在所述第一引导程序区中存储用于正常引导的第一引导程序; 第二存储模块,用于在所述第二引导程序区中存储待升级的第二引导程序; 第一确定模块,用于确定使用所述第二引导程序引导成功; 第二确定模块,用于确定所述第二引导程序为升级后的引导程序。
全文摘要
本发明公开了一种引导程序的升级方法及装置,该方法包括在可擦除存储器中划分第一引导程序区和第二引导程序区,其中第一引导程序区中存储有用于正常引导的第一引导程序,第二引导程序区中存储有待升级的第二引导程序;确定使用第二引导程序引导成功;确定第二引导程序为升级后的引导程序。本发明可以避免硬件地址切换的引入,降低硬件复杂度,提高用户体验。
文档编号G06F9/445GK102486733SQ201010572320
公开日2012年6月6日 申请日期2010年12月3日 优先权日2010年12月3日
发明者陈久松 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1