发明内容
有鉴于此,本发明的主要目的在于提供一种嵌入式设备的启动方法,提高了嵌入式设备启动的可靠性。
本发明的另一个目的在于提供一种嵌入式设备的升级方法,在简化设备硬件系统中存储器外围电路的同时,使嵌入式设备能够实现安全升级。
为达到上述目的,本发明的技术方案是这样实现的:
一种嵌入式设备的启动方法,将设备内部用于存储镜像数据的闪存划分为控制信息区、第一镜像区及第二镜像区三个逻辑分区;其中,控制信息区中包括有当前镜像区状态标志、第一镜像区的属性及第二镜像区的属性;第一镜像区及第二镜像区中均包括有镜像数据及镜像加载计数器;该方法还包括:
a、检查每个镜像区的镜像加载计数器值是否超过预设阈值,若超过,则将该镜像区设置为无效,然后执行步骤b;否则,直接执行步骤b;
b、读取所选择的当前镜像区状态标志,判断所述镜像区是否为主用,若为备用,则执行步骤c;否则,执行步骤d;
c、判断备用镜像区的镜像数据是否可用,若可用,则执行步骤d,否则,退出本次启动过程,等待对该备用镜像区进行升级;
d、将可用的镜像数据以及与硬件相关的初始启动代码加载到所述嵌入式设备的内存中。
其中,所述步骤d之前进一步包括:将所述待加载镜像区的镜像加载计数器值加1。
所述步骤d之后进一步包括:将所述镜像区的镜像加载计数器值清零。
所述控制信息区设置于闪存内的任一位置。
所述第一镜像区与第二镜像区的容量相同。
所述当前镜像区状态标志为主用状态或备用状态。
所述第一镜像区及第二镜像区的属性,至少包括存储第一镜像区和第二镜像区的起始位置、长度、有效性、版本号。
所述镜像数据包括使嵌入式设备进行工作的软件、软件运行所需工作空间及用户数据所占的空间。
所述镜像加载计数器的计数过程为:当镜像数据成功加载到内存,则计数值清零;否则若装载失败,则镜像加载计数值自动加1。
一种嵌入式设备的软件升级方法,将设备内部用于存储镜像数据的闪存划分为控制信息区、第一镜像区及第二镜像区三个逻辑分区;其中,控制信息区中包括有当前镜像区状态标志、第一镜像区的属性及第二镜像区的属性;第一镜像区及第二镜像区中均包括有镜像数据及镜像加载计数器;该方法还包括:
A、选定待升级的镜像区,并将该镜像区设置为无效;
B、将升级文件写入所述镜像区;
C、升级文件完全写入镜像区后,将所述镜像区设置为有效。
其中,步骤B之后进一步包括:
B1、判断写入的升级文件是否完整,若不完整,则返回步骤B;否则,执行步骤C。
步骤B1所述判断写入升级文件是否完整,具体为:比较源升级文件与镜像数据文件的字节数是否一致,若一致,则写入的升级文件是完整的;否则,升级文件不完整。
所述控制信息区设置于闪存内的任一位置。
所述第一镜像区与第二镜像区的容量相同。
所述当前镜像区状态标志为主用状态或备用状态。
所述第一镜像区及第二镜像区的属性,至少包括存储第一镜像区和第二镜像区的起始位置、长度、有效性、版本号。
所述镜像数据包括使嵌入式设备进行工作的软件、软件运行所需工作空间及用户数据所占的空间。
本发明所提供的嵌入式设备的启动方法及升级方法,具有以下优点:
1)本发明采用对单片闪存进行逻辑分区的方法,简化了硬件电路设计的复杂性。
2)本发明采用对闪存进行逻辑分区的方法,划分出的第一镜像区与第二镜像区容量大小完全相同,为两个镜像区实现相互备份以及安全升级提供了客观条件。
3)本发明仅采用一片闪存芯片,就能实现以往用两片不同存储器才能完成的工作,节约了嵌入式设备的成本。
4)本发明的升级方法,可以任选第一镜像区或第二镜像区进行升级,打破了以往嵌入式设备在安全模式下不能升级的惯例,增强了嵌入式设备的易用性。
具体实施方式
下面结合附图及本发明的实施例对本发明的方法作进一步详细的说明。
图1为本发明实施例中闪存的存储空间逻辑划分示意图,如图1所示,将闪存的存储空间进行逻辑分区,划分为:控制信息区、第一镜像区及第二镜像区三部分;其中,第一镜像区和第二镜像区的大小、结构完全相同,两者差别仅在于在闪存中所处的位置不同。
对闪存的存储空间进行逻辑分区以及确定各个分区所占存储空间的大小,需要考虑如下几个因素:
将当前嵌入式设备工作所需的软件的字节数、软件运行所需工作空间的字节数以及用户数据所占空间的字节数,三者之和作为镜像文件所需的存储空间,即镜像区的大小。根据镜像区的大小估算嵌入式设备所需闪存的存储容量,然后加上少量控制信息所需的容量,共同确定应该选用多大容量的闪存芯片。目前已有存储容量为1M、2M、4M、8M、16M、32M、64M、128M、256M字节等甚至容量更大的单片闪存芯片,由于闪存芯片存储容量越大价格就越高,选用的芯片容量过小,不能满足嵌入式设备的工作需求;选用的芯片容量过大,又会增加不必要的成本、造成资源浪费,所以需综合考虑容量与成本。
这里,所述根据镜像区的大小估算嵌入式设备所需闪存的存储容量,具体为:两倍的镜像区存储容量,再加上大小不超过1M字节的控制信息的容量之和,以小于但接近已有某种容量的芯片为最佳。例如,如果镜像文件的大小为14M左右,对应的就应该选用32M的单片闪存芯片作为该嵌入式设备的存储器。
在应用中,把所述32M的单片闪存的存储空间划分为三个逻辑分区,一种典型的分法是:为控制信息区分配1M的空间,称为控制信息区;然后将剩余的存储空间平均分为两部分:第一镜像区分配15.5M、第二镜像区分配15.5M。控制信息区的位置可位于第一镜像区和第二镜像区之间,也可以设置在闪存内部存储空间的一端。
图2为本发明实施例中图1的控制信息区内部逻辑结构示意图,如图2所示,控制信息区包括:当前镜像区状态标志、第一镜像区的属性、第二镜像区的属性。其中,
当前镜像区状态标志,用于指示当前闪存中的第一镜像区及第二镜像区处于主用状态还是备用状态。若指示第一镜像区处于主用状态,且该镜像区是有效的,则设备启动时将第一镜像区的内容调入设备内存中运行,将第二镜像区作为备份;反之,则将第二镜像区的内容调入设备内存中运行,将第一镜像区作为备份。
第一镜像区的属性,用于存储第一镜像区的起始位置、长度、有效性、版本号等信息。
第二镜像区的属性,用于存储第二镜像区的起始位置、长度、有效性、版本号等信息。
图3为本发明实施例中图1的第一或第二镜像区内部逻辑结构示意图,如图3所示,第一镜像区或第二镜像区中包括镜像数据、镜像加载计数器。其中,
镜像数据,包括使嵌入式设备进行工作的软件、软件运行所需工作空间以及用户数据所占的空间。
镜像加载计数器,用于对第一或第二镜像区的镜像数据被装入内存时的装载次数进行计数,当镜像数据装载成功,则计数值清零;若装载失败,则将镜像加载计数值自动加1。
若该镜像数据加载的失败次数超过某个预设阈值,则将该镜像数据所属的镜像区设置为无效,然后再选择从另一个镜像区读取镜像数据加载。此时,也可以对加载失败的镜像区进行更新或选择升级,以恢复完整的镜像数据,这样,至少保证一个镜像区是可用的,从而实现设备的镜像数据的备份功能。
例如:在设备升级过程中,对第一镜像区的镜像数据进行更新,需要先将第一镜像区设置为无效,然后对该第一镜像区进行升级,待升级结束后,再将该第一镜像区重新设置为有效。这样,即使升级过程中出现意外导致升级失败,也可以保证第二镜像区是安全的、完整的备份,从而避免灾难性后果的发生。
图4为本发明实施例中嵌入式设备的启动过程示意图,如图4所示,该过程包括以下步骤:
步骤401:检查每个镜像区的镜像加载计数值是否超过预设阈值,若超过,则执行步骤402;否则,执行步骤403。
步骤402:将所述镜像区设置为无效,然后执行步骤403。
这里,所述设置无效具体是:将所述镜像区属性中有效性一项的值设置为无效状态。
步骤403:读取当前所选中的镜像区的状态标志。
这里,从控制信息区中获得当前镜像区的状态标志,镜像区的状态有两种:主用状态、备用状态。
步骤404:判断该镜像区是否为主用状态,若为备用状态,则执行步骤405;否则,执行步骤407。
这里,所述判断该镜像区为主用还是备用,是根据当前镜像区状态指示标志进行的。嵌入式设备启动时,会自动将最近一次正常运行时所用的镜像区保存为主用状态。通常,主用状态的镜像区的镜像数据默认是完整的、可用的。
此时,需将所述主用镜像区的镜像加载计数器值增加1。
步骤405:判断备用镜像数据是否有效,若无效,则执行步骤406;否则,执行步骤407。
这里,所述判断备用镜像数据是否有效,是通过验证镜像区的镜像数据是否完整实现的,若镜像数据完整,则判定该镜像区为可用;否则判定为不可用。
步骤406:判定本次加载过程失败,结束启动过程,等待对该镜像区进行软件升级。
这里,需要将所述当前待加载镜像区的镜像加载计数器值增加1。
由于当前镜像数据不可用,系统进入瘫痪状态,此时,可选择将该嵌入式设备进入升级模式,对设备进行软件升级。
步骤407:将有效镜像数据加载到设备内存中,待系统启动后调用应用程序,执行相应的功能。
闪存中包含有一段与硬件相关的初始启动代码,通常该代码放在闪存内部存储空间地址的起始位置。当镜像数据加载到设备内存时,所述初始启动代码随着镜像数据一起装入内存中。
系统启动后,将所述镜像区的镜像加载计数器值清零,此时该设备可以开始正常工作。
以下是对图4中步骤406所述对嵌入式设备进行软件升级过程的详细描述。
图5为本发明实施例中对嵌入式设备进行软件升级的过程示意图,如图5所示,该方法包括:
步骤501:选定待升级的镜像区,并将该镜像区设置为无效。
步骤502:将升级文件写入闪存的对应镜像区。
步骤503:判断写入的升级文件是否完整,若不完整,则返回步骤502;否则,执行步骤504。
这里,所述判断写入的升级文件是否完整,是比较源升级文件与镜像数据文件的字节数是否一致,若一致,则认为写入的升级文件是完整的;否则,判定所写入的升级文件不完整,需要重新写入。
步骤504:将所述镜像区设置为有效,升级过程结束。
当升级过程意外中断,导致本次升级失败,可以重复步骤501~步骤504对所选择的镜像区再次进行升级。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。