本发明涉及嵌入式技术领域,特别涉及一种norflash嵌入式设备的启动方法及装置。
背景技术:
随着技术的发展,串行外设接口或非门闪存(serialperipheralinterfacenorflash,spinorflash)逐渐取代了并行接口或非门闪存(parallelnorflash),且大容量的norflash(一般指超过16mb的norflash)成为主流。大容量norflash可在3-byte与4-byte模式切换,以32mb的norflash为例,cpu在3-byte模式下只能访问前16mb的地址空间,一般需要修改地址扩展寄存器,从地址0~16mb地址切换16~32mb地址,用于访问后16mb的地址空间。
引导程序是嵌入式程序上电或复位后需要执行的第一行代码,在cpu与相关硬件初始化后将系统(kernel)或固化的嵌入式程序加载至内存中,然后启动操作系统,一般放在0x000000h地址处。
当设备在运行应用程序过程中,由于一些致命异常需要进行重启,若此时cpu正在读写flash后16mb的地址空间,且cpu未能将用于模式切换回3-byte模式的指令完整执行,则cpu将仍停留在16~32mb的地址空间,无法读到0x000000h地址处的引导程序,导致设备无法启动。
技术实现要素:
本发明提供一种norflash嵌入式设备的启动方法及装置,用于保证norflash嵌入式设备能够正常启动,提高norflash嵌入式设备的可靠性。
第一方面,本发明提供一种norflash嵌入式设备的启动方法,包括:
在cpu需要重启时,确定所述cpu当前读取的norflash的地址;
若所述cpu当前读取的norflash的地址位于所述norflash的前16mb地址中,则读取并执行所述norflash的第一指定地址处的第一引导程序;
否则,读取并执行所述norflash的第二指定地址处的第二引导程序。
本实施方式,通过在norflash的第二指定地址处放置第二引导程序,使得cpu在需要重启且未能切换到0-16mb地址空间时,可以从第二指定地址处读取到引导程序,从而使系统正常启动,提高了norflash嵌入式设备的可靠性。
可选的,所述第一引导程序与所述第二引导程序相同。
本实施方式,在第二指定地址处放置一份和第一指定地址处的第一引导程序的完全一样的程序,这样cpu在读写flash16mb以后地址空间的过程中发生重启事件时,不需要切换回前16mb地址空间也能读取到第一引导程序,完成重启。
可选的,所述第二引导程序包含地址跳转指令,所述地址跳转指令用于使所述cpu跳转至所述norflash的第一指定地址处;
在读取并执行所述norflash的第二指定地址处的第二引导程序时,若读取到所述跳转指令,则基于所述跳转指令跳转至所述norflash的第一指定地址处执行所述第一引导程序。
本实施方式,在第二指定地址处放置包含地址跳转指令的第二引导程序,这样cpu在读写flash16mb以后地址空间的过程中发生重启事件时,可通过执行该第二引导程序切换回前16mb地址空间,读取到第一引导程序,完成重启。
可选的,所述第二引导程序包含所述第一引导程序中的部分指令,所述部分指令用于对外设进行初始化。
本实施方式,可以保证cpu在读写flash16mb以后地址空间的过程中发生重启事件时,能够读取到0地址处的部分指令,保证设备稳定运行,以实现后续0地址的跳转。
可选的,在确定所述cpu当前读取的norflash的地址之前,还包括:
在确定看门狗定时器超时时,确定cpu需要重启。
本实施方式,可以看门狗定时器超时导致cpu需要重启且未能切换到0-16mb地址空间时,从第二指定地址处读取到引导程序,从而使系统正常启动,提高了norflash嵌入式设备的可靠性。
可选的,所述第一指定地址具体为0x000000h,所述第二指定地址具体为01000000h。
第二方面,本发明提供一种norflash嵌入式设备的启动装置,包括:
确定单元,用于在所述装置需要重启时,确定所述装置当前读取的norflash的地址;
处理单元,用于若所述装置当前读取的norflash的地址位于所述norflash的前16mb地址中,则读取并执行所述norflash的第一指定地址处的第一引导程序;否则,读取并执行所述norflash的第二指定地址处的第二引导程序。
可选的,所述第一引导程序与所述第二引导程序相同。
可选的,所述第二引导程序包含地址跳转指令,所述地址跳转指令用于使所述装置跳转至所述norflash的第一指定地址处;
所述处理单元用于:在读取并执行所述norflash的第二指定地址处的第二引导程序时,若读取到所述跳转指令,则基于所述跳转指令跳转至所述norflash的第一指定地址处执行所述第一引导程序。
可选的,所述第二引导程序包含所述第一引导程序中的部分指令,所述部分指令用于对外设进行初始化。
可选的,所述确定单元还用于:
在确定所述cpu当前读取的norflash的地址之前,在确定看门狗定时器超时时,确定cpu需要重启。
可选的,所述第一指定地址具体为0x000000h,所述第二指定地址具体为01000000h。
第三方面,本发明提供一种norflash嵌入式设备的启动装置,包括处理器和存储器,所述处理器和所述存储器通信连接;
所述存储器用于存储计算机执行指令,当所述处理器执行所述指令时,使所述装置执行本发明实施例第一方面或第一方面的任一种可选的实施方式所述的方法。
第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行本发明实施例第一方面或第一方面的任一种可选的实施方式所述的方法。
本发明提供的一个或多个技术方案,至少具有如下技术效果或优点:
本发明技术方案通过在norflash的第二指定地址处放置第二引导程序,使得cpu在需要重启且未能切换到0-16mb地址空间时,可以从第二指定地址处读取到引导程序,从而使系统正常启动,提高了norflash嵌入式设备的可靠性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为16mb以下norflash设备的正常上电的流程图;
图2为16mb以下norflash设备的软复位的流程图;
图3为大容量norflash的一次读写过程的流程图;
图4为本发明实施例中norflash嵌入式设备的启动方法的流程图;
图5为本发明实施例中第二引导程序存放位置的示意图;
图6为本发明实施例中一种可能的norflash嵌入式设备启动过程流程图;
图7为本发明实施例中norflash嵌入式设备的启动装置的结构示意图;
图8为本发明实施例中norflash嵌入式设备的启动装置的结构示意图。
具体实施方式
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互组合。
需要理解的是,在本发明实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。在本发明实施例的描述中“多个”,是指两个或两个以上。
本发明实施例中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
随着技术的发展以及对pcb空间的要求,spinorflash逐渐取代了parallelnorflash,且大容量(这里特指16mb以上)成为主流。大容量norflash可在3-byte与4-byte模式切换,由于兼容性等因素,大多数芯片上电默认为3-byte模式。而cpu在3-byte模式下,只能访问16mb的地址空间,一般需要修改地址扩展寄存器,从地址0~16mb地址空间切换到16mb以后的地址空间。
引导程序(bootloader)是嵌入式程序上电或复位后需要执行的第一行代码,在cpu与相关硬件初始化后将系统(kernel)或固化的嵌入式程序加载至内存中,然后启动操作系统,引导程序通常放在norflash的0x00000000h地址处。
嵌入式设备的启动顺序分正常上电和软复位两种情况,图1为16mb以下norflash设备的正常上电的流程图,图2为16mb以下norflash设备的软复位的流程图,图3为大容量norflash的一次读写过程的流程图。
通过图1、图2和图3可以推论出:当设备在app运行过程中,由于某种原因(比如看门狗超时)需要重启,若此时正在读写flash16mb以后的地址空间(即处于s31->s32阶段),且由于重启cpu未能将用于把模式切换回3-byte模式的代码指令完整执行(即s33未执行),则会导致cpu仍然停留在flash16mb以后的地址空间,cpu将无法在读取到0地址处的引导程序,导致设备无法启动。
针对现有技术中norflash嵌入式设备存在无法启动的隐患,本发明实施例提供一种norflash嵌入式设备的启动方法及装置,用于保证norflash嵌入式设备能够正常启动,提高norflash嵌入式设备的可靠性。
参照图4,该norflash嵌入式设备的启动方法包括:
s41:在cpu需要重启时,确定所述cpu当前读取的norflash的地址;若所述cpu当前读取的norflash的地址位于所述norflash的前16mb地址中,则执行步骤s42;否则执行步骤s43;
s42:读取并执行所述norflash的第一指定地址处的第一引导程序;
s43:读取并执行所述norflash的第二指定地址处的第二引导程序。
在本发明实施例中,导致cpu需要重启的原因可以有多种,本发明实施例不做具体限制。比如:在确定所述cpu当前读取的norflash的地址之前,在确定看门狗定时器超时时,确定cpu需要重启。
在本发明实施例中,所述第一指定地址具体可以为0x000000h,所述第二指定地址具体可以为01000000h。当然,在具体实施例中由于芯片的不同,第一地址和第二地址的具体取值还可以有其他的可能性,本发明实施例不做具体限制。在本文接下来的描述中,主要以第一指定地址具体为0x000000h、第二指定地址具体为01000000h为例,进行详细说明。
在本发明实施例中,为了保证norflash嵌入式设备100%正常启动,在norflash的01000000h地址处的第二引导程序,如图5所示。在具体实施过程中,第二引导程序的具体实现方式至少包括以下两种:
方式1:所述第一引导程序与所述第二引导程序相同。
即在01000000h地址处放置一份和0x000000h地址处的第一引导程序的完全一样的程序,这样cpu在读写flash16mb以后地址空间的过程中发生重启事件时,不需要切换回前16mb地址空间也能读取到第一引导程序,完成重启。
方式2:所述第二引导程序包含地址跳转指令,所述地址跳转指令用于使所述cpu跳转至所述norflash的0x000000h地址处。
第二引导程序具体可以由第一引导程序的部分指令和地址跳转指令组成,所述第一引导程序的部分指令主要用于对外设进行初始化,例如对cpu、硬盘、内存等硬件进行初始参数的设置。当cpu在读取并执行所述norflash的01000000h地址处的第二引导程序时,先读取并执行该部分指令,保证设备继续运行不停止,然后读取该跳转指令,基于执行该跳转指令跳转至所述norflash的0x000000h地址处执行所述第一引导程序,完成重启。
在上述方案中,通过在norflash的第二指定地址处放置第二引导程序,使得cpu在需要重启且未能切换到0-16mb地址空间时,可以从第二指定地址处读取到引导程序,从而使系统正常启动,提高了norflash嵌入式设备的可靠性。
为了更加清楚地理解本发明实施例技术方案,下面举一种可能的norflash嵌入式设备启动过程,参照图6,该启动过程包括:
(1)设备上电;
(2)从flash0地址处读取第一引导程序;
(3)读取kernel代码引导内核系统;
(4)读取app代码启动app运行;
(5)设备软重启,从flash0地址读取第一引导程序或者从flash16mb地址处读取第二以引导程序,重复步骤(3)至步骤(5)。
由于16mb地址处存放了一份备份u-boot代码,当flash在重启过程中,未能切换到0-16mb地址空间时,cpu会从当前0地址(即16mb地址)处读取到第二引导程序,从而使系统正常启动,提高了norflash嵌入式设备的稳定性。
基于同一发明构思,本发明实施例还提供一种norflash嵌入式设备的启动装置,参照图7,包括:
确定单元51,用于在所述装置需要重启时,确定所述装置当前读取的norflash的地址;
处理单元52,用于若所述装置当前读取的norflash的地址位于所述norflash的前16mb地址中,则读取并执行所述norflash的第一指定地址处的第一引导程序;否则,读取并执行所述norflash的第二指定地址处的第二引导程序。
可选的,所述第一引导程序与所述第二引导程序相同。
可选的,所述第二引导程序包含地址跳转指令,所述地址跳转指令用于使所述装置跳转至所述norflash的第一指定地址处;
所述处理单元52用于:在读取并执行所述norflash的第二指定地址处的第二引导程序时,若读取到所述跳转指令,则基于所述跳转指令跳转至所述norflash的第一指定地址处执行所述第一引导程序。
可选的,所述第二引导程序包含所述第一引导程序中的部分指令,所述部分指令用于对外设进行初始化。
可选的,所述确定单元51还用于:
在确定所述cpu当前读取的norflash的地址之前,在确定看门狗定时器超时时,确定cpu需要重启。
可选的,所述第一指定地址具体为0x000000h,所述第二指定地址具体为01000000h。
本发明所述方法和装置基于同一发明构思,由于方法及装置解决问题的原理相似,以上各单元所执行操作的具体实现方式可以参照本发明实施例上述norflash嵌入式设备的启动方法中对应的步骤,因此装置与方法的实施可以相互参见,重复之处不再赘述。
基于同一发明构思,本发明实施例还提供一种norflash嵌入式设备的启动装置,参照图8,包括处理器61和存储器62,所述处理器61和所述存储器62通信连接;
所述存储器62用于存储计算机执行指令,当所述处理器61执行所述指令时,使所述装置执行本发明实施例所述的norflash嵌入式设备的启动方法。
基于同一发明构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述指令在计算机上运行时,使得计算机执行本发明实施例所述的norflash嵌入式设备的启动方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。