故障保护固件更新的制作方法
【专利摘要】一种更新电子装置的方法。所述装置具有被划分成至少三个非重叠部分,即引导程序映象部分、更新器映象部分和应用映象部分的非易失性存储器。所述方法包括擦除所述非易失性存储器的应用映象部分,接收固件更新,将所述固件更新写入到所述应用映象部分内,对所述电子装置重新引导,判断应用程序和更新器程序之一处于所述应用映象部分内,在判断应用程序处于所述应用映象部分内时执行所述应用程序,在判断更新器程序处于所述应用映象部分内时擦除所述非易失性存储器的更新器映象部分,并且将所述更新器程序从应用映象部分移到更新器映象部分。
【专利说明】故障保护固件更新
【背景技术】
[0001]本发明涉及嵌入装置中的固件的更新。具体而言,本发明涉及借助最小的存储器覆盖区对嵌入装置中的固件进行更新的故障保护系统和方法。
[0002]嵌入装置是一种将所有用于实现特定目的的必要硬件和机械部件都集成到专用硬件组件内的计算机系统。将嵌入系统内的可执行代码称为“固件”。所述固件被写入到非易失性存储器内,例如,闪速存储器或其他基于块的电子可擦除可编程随机存取存储器(EEPROM)技术。
[0003]在不采用任何专用装置的情况下现场更新这些装置中的固件是常规的做法。要么从可拆卸介质中读出所述固件,要么通过通信路径从另一基于微处理器的系统接收所述固件。
[0004]更新嵌入装置内的固件的动作涉及嵌入装置擦除一个存储块,之后将替换固件写入到该存储内。一个块能够存储整个可执行固件的重要部分。从可拆卸介质中或者从来自外部系统的通信流中读出所述替换固件。
[0005]在所述更新过程中,如果发生了断电或者失去了与外部系统或者可拆卸介质的通信,那么将使得所述装置处于没有有效固件的状态,因此处于不可用状态。因此,必须将所述装置返回到维修中心,或者抛弃。
[0006]有两种常用的方案来避免因固件更新过程中的故障而使得装置不可用的问题。第一种方案是将接收到的固件缓存在另一存储器内,例如随机存取存储器(RAM)。于是能够在擦除现有的固件之前对这一映象进行检验。尽管其针对通往装置的固件流的中断提供了保护,但是这一方案并不能提供全面的故障保护。从装置擦除了其先前的固件开始到完成新固件的写入的这段时间内的任何断电都将使装置无法使用。这一方案还需要足够大的外部缓存器来接收和检验固件,这使得其在成本敏感应用中不受欢迎。
[0007]第二种方案是保存完全冗余的固件副本。只有在检验表明新的固件得到了正确编程之后才擦除最初的固件。这一方案能够实现全面的故障保护,但是其要求所述装置具有大约是第一种方案所需的存储量的两倍的存储量。这在成本敏感或存储容量有限的系统中是不可接受的。
【发明内容】
[0008]在一个实施例中,本发明提供了一种对电子装置进行更新的方法。所述装置具有被划分成至少三个非重叠部分,即引导程序映象部分、更新器映象部分和应用映象部分的非易失性存储器。所述方法包括擦除所述非易失性存储器的应用映象部分,接收固件更新,将所述固件更新写入到所述应用映象部分内,对所述电子装置重新引导,判断应用程序和更新器程序之一处于所述应用映象部分内,在判断应用程序处于所述应用映象部分内时执行所述应用程序,在判断更新器程序处于所述应用映象部分内时擦除所述非易失性存储器的更新器映象部分,并且将所述更新器程序从应用映象部分移到更新器映象部分。
[0009]在另一实施例中,本发明提供了一种电子装置。所述电子装置包括接口、非易失性存储器和控制器。将所述接口配置为与所述电子装置外的第二装置通信。所述非易失性存储器具有由第一可写入块构成的应用映象部分和由第二可写入块构成的更新器映象部分。将所述控制器耦合至所述接口和非易失性存储器,并且将其配置为接收来自所述接口的更新器程序更新,并将所述更新器程序更新写入到应用映象部分内,还将其配置为对写入到所述应用映象部分内的更新器程序更新进行验证,并且将所述更新器程序更新从所述应用映象部分移到所述更新器映象部分。
[0010]通过考虑详细描述和附图,本发明的其他方面将变得显而易见。
【专利附图】
【附图说明】
[0011]图1是嵌入装置的方框图。
[0012]图2是图1的嵌入装置的非易失性存储器的存储图。
[0013]图3是说明更新器映象与应用映象的关系的图示。
[0014]图4是更新器程序的操作的流程图。
[0015]图5是嵌入装置的起动操作的流程图。
【具体实施方式】
[0016]在详细解释本发明的任何实施例之前,要理解本发明在其应用方面不限于以下描述中阐述或在以下附图中例示的部件构造和布置的细节。本发明能够有其他实施例并通过各种方式实践或执行。
[0017]图1示出了嵌入电子装置100的方框图。嵌入装置100包括控制器105(例如,微处理器、微控制器、ASIC等)、非易失性存储器110 (例如,闪速存储器、电可擦除可编程只读存储器(EEPROM)等)、接口 115 (例如,无线接口(WiF1、蓝牙等)、USB接口等)以及随机存取存储器120(RAM)。控制器100通过接口 115与处于嵌入装置100的外部的装置通信,并运行存储在存储器110内的程序。控制器100还向存储器110内写入数据(例如,映像更新)。存储器110和120可以集成到控制器105内,也可以是独立的部件。
[0018]图2示出了针对存储器110的固件结构200。存储器110包括多个可写入块205。将每一可写入块205的开始和结束称为块边界210。存储器110包括引导程序映象部分、更新器映象部分220和应用映象部分225。映象部分215-225中的每者开始和结束于块边界230,它们不共享任何可写入块205 (即,非重叠)。
[0019]这一设计适用于具有至少三块可擦除闪速存储(B卩,可写入块)或者其他基于块的EEPROM存储的存储器110。所示出的实施例包括六个块205。
[0020]将一个或多个块205分配给三个映象部分:引导程序映象部分215、更新器映象部分220和应用映象部分225。映象215-225可以具有任何数量的块205,可以留下一些块205不进行分配。唯一的限制条件是更新器映象部分220的尺寸小于等于应用映象部分225的尺寸,并且必须有至少三个可独立擦除的块205 (有至少一个块205用于三个部分:引导程序映象部分215、更新器映象部分220和应用映象部分225中的每者)。
[0021]由于每一映象部分215-225开始和终止于块边界230,因而能够在不映象任何其他映象215-225的情况下擦除任何映象215-225。
[0022]引导程序映象部分215含有固定复位向量表240和引导程序代码部分245。固定复位向量表240位于存储器110的开始处。在一些实施例中,固定复位向量表240位于存储器110的末尾处。在起动的同时,控制器105访问固定复位向量表240,并获得指向位于引导代码部分245内的引导程序的开始部分的向量或指针。如下文所述,引导程序是判断是否执行位于更新器映象部分220或应用映象部分225内的程序的可执行程序。
[0023]在所示出的实施例中,更新器映象部分220在与引导程序映象部分215相邻的块边界210上开始,其开端是更新器报头部分250,随后继之以更新器代码部分255。应用映象部分225在与更新器映象部分220相邻的块边界210上开始,并以应用代码部分260为开端。在应用代码部分260之后跟随着结束于块边界210的应用报头部分265。在所示的实施例中,应用报头部分265结束于存储器110的最后一个块边界210处。
[0024]更新器报头部分250和应用报头部分265包括指示有效程序是否分别处于更新器代码部分255和应用代码部分260内的标志。此外,更新器报头部分250和应用报头部分265包括指向每一代码部分255和260的相应程序的开端的指针。
[0025]在替代实施例中,应用映象部分225开始于与引导程序映象部分215相邻处并以应用报头部分265为开端,更新器映象部分220以更新器报头部分250终止于最后一个存储块205的末尾处。
[0026]在一些实施例中,可以将处于映象部分215-225之间的或者之后的(例如,处于更新器映象部分220和应用映象部分225之间的)一个或多个块205用于存储其他数据。
[0027]图3示出了位于应用代码部分260内的应用程序300和位于更新器代码部分255内的更新器程序305的关系。应用程序300包括一个或多个应用例程310,并且其可以包括一个或多个应用子例程315。类似地,更新器程序305包括一个或多个更新器例程320,并且可以包括一个或多个更新器子例程325。
[0028]为了减少应用程序300和更新器程序305之间的代码复制,应用程序300可以通过跳转至更新器例程320和子例程320而采用更新器程序305中的代码。可以将应用程序300静态链接至更新器程序305 (例如,采用软件开发工具包中的链接器工具),或者可以将应用程序300动态链接至更新器程序305 (例如,输出一个接口表,应用程序300可以通过读取所述接口表确定在运行时间调用的具体地址)。
[0029]在更新器程序305的更新过程中(如下文所述),擦除应用程序300。为了使更新器程序305能够在一旦擦除了应用程序300的情况下运行,不使更新器程序305链接至应用程序300 (即,不调用应用程序300)。
[0030]图4A和4B示出了用于接收更新器程序305的或者应用程序300的更新的故障保护方法。为了避免一旦在装置100的更新过程中发生了错误(例如,在更新中间断电)而使得嵌入装置100变得不可用,在擦除旧的更新器程序305之前将新的更新器程序305(包括更新器报头信息)存储在应用映象部分225内,对其进行检验,并使其处于生效状态。
[0031 ] 在装置100接收到来自主机或用户的对应用程序300或者更新器程序305进行更新的请求时启动所述方法(步骤400)。如果在接收到固件更新请求时应用程序300正在运行,那么调用更新器程序305中的子例程,从而将所有的处理都从应用程序300转移至更新器程序305 (步骤405)。接下来,传递来自主机的更新参数(例如,以无线的方式或者通过可拆卸介质)(步骤410)。所述更新参数包括对哪一程序正在接收更新的指示(例如,应用程序300或更新器程序305)、程序数据的起始地址以及数据的尺寸。之后控制器105判断所述更新是针对应用程序300的还是针对更新器程序305的(步骤415)。如果映象地址和尺寸对应于更新器程序305,那么计算偏移量(步骤420 )。这一偏移量是必须要对指定的存储地址进行修改的量,由此使所接收到的更新器程序305暂时位于应用映象部分225内。
[0032]如果映象地址和尺寸对应于应用程序300,那么存储零偏移量(步骤425)。如果请求有效,那么擦除应用映象部分225 (步骤430),从而提供足够的空的存储空间来保存通过所述尺寸参数识别的数据。擦除过程将固有地将应用报头标识为无效。其避免了一旦在对装置100重新引导时使用应用程序300。
[0033]之后,环路开始传送程序。只有没有错误,所述环就一直继续,直到传送完成为止。在对该程序全部传送并写入完之前,为了避免一旦在微处理器重新引导时采用所述应用映象,将对所传送的映象的报头数据(例如,更新器映象报头250或应用映象报头265)进行高速缓存,而不是将其直接写入到存储器110内。
[0034]控制器105检查是否存在任何错误(B卩,对更新进行验证)(步骤435)。如果没有错误,那么接收来自主机或者可拆卸介质的固件单元(步骤440)。这一单元是能够有效率地传送和写入的少量的数据。其尺寸将取决于传送机制和有关控制器105的细节。可以设想,一些系统可以采用小到单个字节或者大到整个程序的传送单位。控制器105持续向存储器110的应用代码部分260内写入数据(步骤445)。接下来,控制器105检查传送是否完成(步骤450)。如果传送未完成,那么处理将通过误差的检查(步骤435)、下一单元的接收(步骤440)和单元的写入(步骤445)而继续。
[0035]一旦传送完成(步骤450),那么在将映象写入到存储器110内时对映象进行检验(步骤455)。在所示的实施例中,这一操作是采用MD5校验和完成的。它和以前的技术的区别在于,只有在将校验和写入到存储器110内之后才对校验和进行校验,而不是在写入之前在中间缓存器内对其进行校验。在备选实施例中,可以采用诸如CRC的其他技术进行验证。之后,将映象报头从高速缓存数据写入到应用报头部分265当中(步骤460),并对装置100重新引导(步骤465)。如果检测到了错误(步骤435),那么对装置100重新引导(步骤465),其将重新起动所述更新过程。
[0036]图5示出了在嵌入装置100加电或者重新引导的同时执行的方法。所述方法装入应用程序300,或者将新的更新器程序305从临时存储器复制到应用映象部分225内并运行所述新的更新器程序305。
[0037]为了允许将固定向量表处理的中断传给更新器映象部分220中的程序或者应用映象部分225中的程序,在RAMl20中创建作为固定向量表240的镜象的向量表。引导程序中断处理器跳转至在RAM120固定向量表中识别出的处理器。
[0038]首先,对控制器105和存储器110初始化(步骤500)。接下来,对应用映象部分225进行有效性检验(步骤505)。在一些实施例中,这只是对标志值的简单检查。如果应用映象部分225无效(步骤505),那么对更新器映象部分220进行有效性检查(步骤510)。在一些实施例中,这也只是对标志值的简单检查。
[0039]在有效程序(即应用程序300或暂时存储在应用映象部分225中的更新器程序305)有效,并且应用报头部分265有效时,应用映象部分225有效。在存储在更新器代码部分255中的更新器程序305有效,并且更新器报头部分250有效时,更新器映象部分220有效。[0040]如果更新器映象部分220无效,那么装置就不能进行引导。这种情况只能是由装置100的部件故障导致的。在这种情况下,装置100进入差错状态(步骤515),其可以包括差错状态的指示(例如,闪烁的LED)。如果更新器映象部分220有效(但是在步骤505中应用映象部分225无效),那么控制器105跳转至更新器映象部分220中的更新器程序(步骤520)并执行更新。
[0041]如果应用映象部分225有效(步骤505),那么还要对应用映象报头进行询问,以判断在应用映象部分225中是否存在暂时存储的更新器程序305 (步骤525)。如果应用映象部分225保存着有效的应用程序300,那么控制器105跳转至应用程序300 (步骤530)。
[0042]如果在应用映象部分225中找到了有效的更新器程序305,那么控制器105擦除现有的更新器映象部分220 (步骤535)。假设装置从这一点重新引导直到应用映象部分225被擦除,那么控制器105重复所述过程。
[0043]之后,控制器105将暂时存储在应用映象部分225中的更新器程序305复制到更新器映象部分220中(步骤540)。之后,控制器进行逐字节比较(步骤545),以确保更新器程序305得到了正确地复制。如果逐字节比较不匹配,那么重复所述擦除(步骤535)和复制(步骤540)。如果逐字节比较匹配(步骤545),那么将更新器映象报头从高速缓存写入到更新器报头部分250内(步骤550)。在其他实施例中,采用其他验证方法,例如,校验和、CRC
坐寸ο
[0044]接下来,擦除应用报头部分265 (步骤555)。其避免了一旦发生重新引导而再次发生所述擦除/复制过程(步骤535和540)。
[0045]之后,控制器105跳转至更新器程序305 (步骤520),并执行更新,以获得应用程序300的新的副本。
[0046]因而,有效更新器程序305总是存在;其要么处于更新器映象部分220内,要么处于应用映象部分225内,从而确保了装置100总是能够工作,即使是在更新过程中发生错误的情况下(例如,装置100重新引导或者更新中断)。
[0047]在如下权利要求中阐述了本发明的各种特征和优点。
【权利要求】
1.一种更新电子装置的方法,所述电子装置具有被划分成至少三个非重叠部分,即引导程序映象部分、更新器映象部分和应用映象部分的非易失性存储器,所述方法包括: 擦除所述非易失性存储器的所述应用映象部分; 接收固件更新; 将所述固件更新写入到所述应用映象部分内; 对所述电子装置重新引导; 判断应用程序和更新器程序之一处于所述应用映象部分内; 在判断所述应用程序处于所述应用映象部分内时执行所述应用程序; 在判断所述更新器程序处于所述应用映象部分内时擦除所述非易失性存储器的所述更新器映象部分;以及 将所述更新器程序从所述应用映象部分移到所述更新器映象部分。
2.根据权利要求1所述的方法,还包括: 在将所述更新器程序从所述应用映象部分移到所述更新器映象部分之后获得新的应用程序。
3.根据权利要求1所述的方法,还包括: 在将所述固件更新写入到所述应用映象部分内之后,并且在对所述电子装置重新引导之前,对所述应用映象部分中的所述固件更新进行验证。
4.根据权利要求3所述的方法,还包括: 在对所述固件更新进行验证之后,并且在对所述电子装置重新引导之前,写入应用映象报头。
5.根据权利要求4所述的方法,其中, 如果所述固件更新是更新器程序更新,那么在写入所述应用映象报头并对其进行验证之后擦除所述更新器映象报头。
6.根据权利要求1所述的方法,还包括: 在将所述更新器程序从所述应用映象部分移到所述更新器映象部分之后,对所述更新器映象部分中的所述更新器程序进行验证。
7.根据权利要求6所述的方法,还包括: 在对所述更新器映象部分中的所述更新器程序进行验证之后,写入更新器映像报头,并且擦除应用映象报头。
8.根据权利要求1所述的方法,其中, 所述应用程序调用所述更新器程序中的例程。
9.根据权利要求1所述的方法,其中, 所述更新器程序不调用所述应用程序中的例程。
10.一种电子装置,所述电子装置包括: 被配置为与所述电子装置外部的第二装置通信的接口; 非易失性存储器,其具有 由第一可写入块构成的应用映象部分, 由第二可写入块构成的更新器映象部分;以及 耦合至所述接口和所述非易失性存储器的控制器,其被配置为接收来自所述接口的更新器程序更新,并将所述更新器程序更新写入到所述应用映象部分内,还被配置为对写入到所述应用映象部分内的所述更新器程序更新进行验证,并且将所述更新器程序更新从所述应用映象部分移到所述更新器映象部分。
11.根据权利要求10所述的电子装置,其中, 所述非易失性存储器包括引导程序映象部分,所述引导程序映象部分具有引导程序,所述引导程序用于判断在所述更新器映象部分和所述应用映象部分内是否存在有效程序。
12.根据权利要求11所述的电子装置,其中, 当在所述应用映象部分中存在有效程序时,所述引导程序执行所述应用映象部分中的程序。
13.根据权利要求11所述的电子装置,其中, 当在所述应用映象部分内不存在有效程序时,所述引导程序执行所述更新器映象部分中的程序。
14.根据权利要求10所述的电子装置,其中, 所述控制器被配置为:在将所述更新器程序从所述应用映象部分移到所述更新器映象部分之后获得新的应用程序。
15.根据权利要求10所述的电子装置,其中, 所述控制器被配置为:在将所述更新器程序从所述应用映象部分移到所述更新器映象部分之后,对所述更新器映象部分 中的所述更新器程序进行验证。
16.根据权利要求15所述的电子装置,其中, 所述控制器被配置为:在将所述更新器映象部分中的所述更新器程序移到所述更新器映象部分并对其进行验证之后,写入更新器映象报头,并且擦除应用映象报头。
【文档编号】G06F11/14GK103562875SQ201280026787
【公开日】2014年2月5日 申请日期:2012年4月6日 优先权日:2011年4月6日
【发明者】B·凯勒, J·索塔克, A·海特 申请人:罗伯特·博世有限公司