发明内容
有鉴于此,本发明的目的在于提供一种嵌入式设备的固件升级方法及嵌入式***,通过重新构造嵌入式***的整体结构,从而简捷且安全的实现启动器的升级。
为实现上述目的,有如下技术方案:
一种嵌入式设备的固件升级方法,所述方法包括:
自嵌入式芯片闪存的上电起始位起划分出触发区;将启动器分解为触发器和下载器,将所述触发器保存到所述触发区中;
从嵌入式芯片闪存中划分出彼此独立擦写的下载区和应用区;将所述下载器保存至下载区;将应用程序保存至所述应用区,并在所述应用区中保存引导器;
当出现针对应用区的下载指令,则触发器触发所述下载区中的下载器更新应用固件;当出现针对下载区的下载指令,则所述触发器触发所述应用区中的引导器更新下载器固件。
所述从嵌入式芯片闪存中划分出彼此独立擦写的下载区和应用区具体为:
从嵌入式芯片闪存中划分出第一区作为下载区,并将所述下载区的地址范围发送至触发器;
从嵌入式芯片闪存中划分出第二区作为应用区,并将所述应用区的地址范围发送至触发器。
所述触发器触发所述下载区中的下载器更新应用固件具体为:
触发器从所述下载区的地址范围中调用所述下载器,并令所述下载器根据应用区的下载指令,进行应用固件的下载。
所述触发器触发所述应用区中的引导器更新下载器固件具体为:
触发器从所述应用区的地址范围中调用所述引导器,并令所述引导器根据下载区的下载指令,进行下载器固件的下载。
所述方法还包括:
从嵌入式芯片闪存中划分出第三区作为驱动区,并将所述驱动区的地址范围发送至触发器;将驱动程序保存至所述驱动区;
当出现针对驱动区的下载指令,触发器从所述下载区的地址范围中调用所述下载器,并令所述下载器根据驱动区的下载指令,进行驱动固件的下载。
一种嵌入式***,所述***具体为:
在嵌入式芯片闪存的上电起始位起划分出触发区;将启动器分解为触发器和下载器,将所述触发器保存到所述触发区中;从嵌入式芯片闪存中划分出彼此独立擦写的下载区和应用区;将所述下载器保存至下载区;将应用程序保存至所述应用区,并在所述应用区中保存引导器;
所述触发器用于,在出现针对应用区的下载指令时,触发所述下载区中的下载器更新应用固件;或在出现针对下载区的下载指令时,触发所述应用区中的引导器更新下载器固件。
所述***还包括:
分区模块,用于在嵌入式芯片闪存的上电起始位起划分出触发区;从嵌入式芯片闪存中划分出第一区作为下载区,并将所述下载区的地址范围发送至触发器;从嵌入式芯片闪存中划分出第二区作为应用区,并将所述应用区的地址范围发送至触发器。
所述触发器触发所述下载区中的下载器更新应用固件具体为:
触发器从所述下载区的地址范围中调用所述下载器,并令所述下载器根据应用区的下载指令,进行应用固件的下载。
所述触发器触发所述应用区中的引导器更新下载器固件具体为:
触发器从所述应用区的地址范围中调用所述引导器,并令所述引导器根据下载区的下载指令,进行下载器固件的下载。
所述分区模块还用于:
从嵌入式芯片闪存中划分出第三区作为驱动区,并将所述驱动区的地址范围发送至触发器;将驱动程序保存至所述驱动区;
则所述触发器还用于,在出现针对驱动区的下载指令时,从所述下载区的地址范围中调用所述下载器,并令所述下载器根据驱动区的下载指令,进行驱动固件的下载。
通过以上技术方案可知,本发明存在的有益效果是:通过重新构建***,将触发器保存在上电起始位的触发区中,避免了***崩溃的发生,并且不增加***的复杂程度;独立擦写的下载区和应用区能够实现相互引导下载更新程序,实现稳定的应用程序更新和下载器更新。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为实现嵌入式设备中安全稳定的启动器升级,防止升级过程中意外掉电导致***崩溃,并且不额外的增加***的复杂程度;本实施例中对于嵌入式***的结构进行了重新的设计和构造。参见图1所示,为本发明实施例所述嵌入式***的具体实施例。本实施例中所述***具体结构如以下描述:
首先,本实施例中将所述启动器(bootloader)拆分为触发器(boot)和下载器(loader)两部分。所述启动器原本用于触发下载的流程,使***开始下载应用程序的固件升级包;而拆分后,所述触发器将用于触发下载流程开始,下载器则用于引导下载的过程。
同时本实施例中将利用划分模块自嵌入式芯片闪存的上电起始位起划分出触发区,将所述触发器保存到所述触发区中。所述上电起始位,就是闪存重新上电后首先开始运行的存储位置。本实施例中从上电起始位开始,取连续的若干存储空间作为触发区,所述触发区的大小应不小于触发器的大小;并且所述触发区独立擦写,这保证了触发区中保存的触发器不会在闪存其他内容更新时被擦除。
因为所述触发器是为***运行的起点,***运行以及固件的升级流程均由触发器触发开启,所以一旦闪存中触发器被擦除,***即会崩溃。这也是现有技术当中,各种导致***崩溃情况的主要原因所在。而且一般的启动器升级过程当中,主要是对启动器中的下载器进行升级,触发器本身往往不发生变化。
所以本实施例中,将启动器拆分,并且将所述触发器独立的保存在触发区中,所产生的影响有两个:一是将触发器保存在一个独立的触发区中,保证了触发器不被误删,使触发器的安全性得到保障,不受其他任何闪存擦写操作的影响;二是触发区位于上电起始位,所以一旦***上电,触发器就能够被自动执行,无需通过其他程序来查询触发器的位置,使得触发器的执行不受到其他程序的限制。
这样一来,无论闪存中执行任何擦写操作,或者发生意外掉电导致任何程序的丢失,触发器始终安全的保存在触发区中,一旦重新上电就能够被有效执行。本实施例中通过上述的设计规避了***崩溃的风险。
然后,本实施例中还将利用划分模块从嵌入式芯片闪存中划分出彼此独立擦写的下载区和应用区。所述启动器的另一部分——下载器即保存在所述下载区中;而***中的应用程序均被早存在应用区中。所述下载区和应用区也是彼此独立擦写的。
由于下载区和应用区存在彼此独立擦写的特点,所以利用下载区中的下载器可以引导下载应用区中的应用程序,完成应用区中内容的擦写与程序更新;这一点基本等同于现有技术中应用程序固件升级的原理。
反之,如果在所述应用区中额外的保存一个引导器,也可以同时实现利用所述引导器引导下载所述下载区中的下载器,完成下载区中内容的擦写与程序更新。
本实施例中,基本上将传统的启动器整体升级,演变为对启动器中下载器的升级。而所述下载器的升级过程中,便可以利用上述特点,调用应用区中的引导器完成下载器的升级。这也是本实施例中实现下载器固件升级的原理。
具体从实现方式上来说,***中的划分模块从嵌入式芯片闪存中划分出第一区作为下载区,并将所述下载区的地址范围发送至触发器;从嵌入式芯片闪存中划分出第二区作为应用区,并将所述应用区的地址范围发送至触发器。这样一来,触发器便明确了所述下载区和所述应用区的具体地址,从而能够直接实现对于下载区中下载器或者应用区中引导器的调用。
另外,本实施例中除了在闪存中划分出下载区和应用区之外,还可以额外的划分出一个驱动区,用来保存各种驱动程序。所述驱动区在整体技术方案中与应用区的作用非常类似。也就是利用划分模块从嵌入式芯片闪存中划分出第三区作为驱动区,并将所述驱动区的地址范围发送至触发器;将驱动程序保存至所述驱动区。
由此,本实施例中实现了对于所述***的重新构建,即划分出四个独立擦写的区域,触发区位于上电起始位,用来保存触发器,防止***崩溃;下载区、应用区和驱动区的地址范围均发送到触发器中;下载区中保存下载器,能够引导完成应用区和驱动区中程序的下载更新;反之应用区或者驱动区中也可以保存引导器,能够反向的完成下载区中下载器的程序更新。
通过以上技术方案可知,本实施例中所述***存在的有益效果是:通过重新构建***,将触发器保存在上电起始位的触发区中,避免了***崩溃的发生,并且不增加***的复杂程度;独立擦写的下载区和应用区能够实现相互引导下载更新程序,实现稳定的应用程序更新和下载器更新。
基于以上实施例中所述***,后续实施例将具体的描述在上述***中,具体实现固件升级的方法流程。
参见图2所示,为本发明所述固件升级方法的具体实施例,亦是基于上述***实现应用程序和下载器二者固件升级的具流程。所以本实施例中不再对所述***的结构进行重复描述。本实施例中所述方法包括以下步骤:
步骤201、***上电,启动触发器。
由于所述触发区位于闪存的上电起始位,所以***上电后,保存在上电起始位的触发器立刻被读取,进而自动启动。启动后的触发器可以接收来自***的指令。
步骤202、判断下载器是否正常,若下载器不正常则生成针对下载区的下载指令。
触发器的启动保证了***的正常运行,避免的***的崩溃。不过要保证***正常功能的完善,还需要确保下载器不出现异常。所以触发器启动之后,需要先判断下载器是否正常。
如果下载器由于前次升级过程中意外掉电而出现异常或者丢失等情况,或者下载器需要进行固件升级更新,则必须首先重新下载正确版本的下载器。为实现正确版本下载器的下载,***中将生成一个针对下载区的下载指令。
反之若下载器正常,则直接进入步骤204。
步骤203、触发器从所述应用区的地址范围中调用所述引导器,并令所述引导器根据下载区的下载指令,进行下载器固件的下载。
本实施例中,由于下载区与应用于独立擦写,所以下载区中的异常情况并不影响应用区的正常运行。所以下载器的下载可以应用区的引导器引导完成。出现针对下载区的下载指令之后,触发器便从所述应用区的地址范围中调用所述引导器,以针对下载区的下载指令控制所述引导器进行下载器固件的下载。
下载后的下载器固件重新保存到所述下载区中,所述下载器即恢复正常。
步骤204、当出现针对应用区的下载指令,触发器从所述下载区的地址范围中调用所述下载器。
下载器正常后,***可读取应用程序,使嵌入式设备实现相应的功能。而在所述应用程序需要固件升级的情况下,***还会生成一个针对应用区的下载指令,以开启应用程序的固件升级过程。
此时,触发器从所述下载区的地址范围中调用所述下载器,利用针对下载区的下载指令控制所述下载器进行应用固件的下载,进而完成应用程序的更新。
步骤205、当出现针对驱动区的下载指令,触发器从所述下载区的地址范围中调用所述下载器,并令所述下载器根据驱动区的下载指令,进行驱动固件的下载。
本实施例中,同理可以实现对于驱动区中驱动程序的更新。
通过以上技术方案可知,本实施例存在的有益效果是:具体的描述了独立擦写的下载区和应用区实现相互引导下载更新程序的过程,使得本发明整体技术方案更加完整,公开更加充分。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。