嵌入式设备上使用双代码镜像运行的方法

文档序号:6428571阅读:233来源:国知局
专利名称:嵌入式设备上使用双代码镜像运行的方法
技术领域
本发明涉及嵌入式设备的闪存中的代码镜像管理技术,通过对闪存空间结构的改进,添加了辅代码镜像存储空间作为主代码镜像存储空间的补充来保证嵌入式设备程序代码的安全可靠,特别适合于程序代码通过网络自动升级的设备。
背景技术
现有技术中,嵌入式设备的程序代码一般都保存在闪存等非易失性存储器里面。 最初程序代码都是只读的,但是由于技术发展很快,代码需要不断升级更新版本,或者由于其他需要保存程序以外的其它数据,如修改配置,记录运行相关的数据进行改写。而在改写或升级的过程中可能会出现断电,电压信号不稳定形成错误的指令,等等情况都可能造成程序代码的损坏,从而导致嵌入式设备无法正常工作。因此程序代码的备份与安全加载就显得非常重要。现有技术有提出过交叉双备份的机制,但目前已不能完全满足需要。主要原因是目前嵌入式设备的功能越来越多,越来越复杂,代码容量越来越大,nor flash可能达到 8MB,16MB,甚至32MB,nand flash就更大了。因此原有双备份技术需要两倍大小的flash, 和单个的代码镜像价格差别很明显了,使得flash成本增加很多。在许多行业嵌入式设备的利润率非常低,因此降低成本就变成了一个迫切的课题。

发明内容
本发明的目的就是为了提供一种大大降低成本,且满足嵌入式设备安全备份及加载的方法,在flash存储空间中增加分配辅代码镜像的存储空间,通过辅代码镜像存储空间与主代码镜像存储空间形成了双代码镜像的运行与更新的机制,一旦主镜像存储空间中的镜像文件损坏,可以加载辅代码镜像来运行和升级。本发明为实现发明目的采用的技术方案是,嵌入式设备上使用双代码镜像运行的方法,以上方法是通过闪存单元中的镜像代码存储区实现加载运行的过程,闪存单元的结构中包括启动代码区、非易失性随即存储区、配置信息命令存储区、代码镜像存储区、以及用户代码区,关键是所述的代码镜像存储区包括一个主代码镜像存储区和至少一个辅代码镜像存储区,双代码镜像运行的步骤包括
a、启动系统启动引导区中的引导程序;
b、从非易失性随即存储区读取配置以及两个代码镜像中镜像的信息;
C、分别借助主代码镜像存储区和辅代码镜像存储区中的crc校验码对主镜像信息和辅镜像信息进行校验,校验结果按以下3种情况进行处理
Cl、如果主镜像信息完整,从主代码镜像存储区启动,并跳至步骤d;
c2、如果主镜像信息不完整、辅镜像信息完整,从辅代码镜像存储区启动,并跳至步骤
d;
c3、主镜像信息不完整、辅镜像信息不完整,报警出错,并跳至步骤d;d、双代码镜像运行过程结束。本发明提出了一种新的代码镜像的生成、加载、运行及更新机制,在主代码镜像的基础上增加了辅代码镜像作为备份和补充,其中辅代码镜像存储空间是一个最小的应用系统或者包含其它被认为有必要的功功能,包含基本的系统功能,便于维护和升级,通常是对主代码镜像的功能进行裁剪后编译生成的,相比以往用双flash进行交叉备份的方式, 可以节省一半flash的存储空间,成本更加低廉,具有很好的经济效益。下面结合附图对本发明进行详细说明。


图1是本发明中的flash空间结构示意图,以16MB的nor flash为例。图2是本发明的方法流程图。
具体实施例方式嵌入式设备上使用双代码镜像运行的方法,以上方法是通过闪存单元中的镜像代码存储区实现加载运行的过程,闪存单元的结构中包括启动代码区、非易失性随即存储区、 配置信息命令存储区、代码镜像存储区、以及用户代码区,关键是所述的代码镜像存储区包括一个主代码镜像存储区和至少一个辅代码镜像存储区,双代码镜像运行的步骤包括
a、启动系统启动引导区中的引导程序;
b、从非易失性随即存储区读取配置以及两个代码镜像中镜像的信息;
C、分别借助主代码镜像存储区和辅代码镜像存储区中的crc校验码对主镜像信息和辅镜像信息进行校验,校验结果按以下3种情况进行处理
Cl、如果主镜像信息完整,从主代码镜像存储区启动,并跳至步骤d ;
c2、如果主镜像信息不完整、辅镜像信息完整,从辅代码镜像存储区启动,并跳至步骤
d;
c3、主镜像信息不完整、辅镜像信息不完整,报警出错,并跳至步骤d; d、双代码镜像运行过程结束。上述的步骤Cl中,主镜像信息完整的情况中包括辅镜像信息完整或不完整,当辅镜像信息不完整时,自动连接网络下载辅镜像信息进行更新升级。上述的步骤c2,从辅代码镜像存储区启动的同时,自动连接网络下载主镜像信息进行更新升级。在连接网络下载更新镜像时,如果更新成功,则系统重新启动,返回步骤a;如果更新失败,正常运行完整的镜像信息。上述的步骤C,对于不完整的镜像信息,加以身份标记。上述的辅代码镜像存储区的生成是从主代码镜像存储区裁减而成。上述的主代码镜像存储区或辅代码镜像存储区中的镜像信息是上次正常运行联网所用的镜像信息。上述的镜像信息中都包含有标签,标签中包括crc校验码、身份识别码、以及内核和文件系统的偏移地址参数。上述的步骤Cl中,当主镜像信息或辅镜像信息都完整时,也可以对其中任意一个进行下载更新。上述的步骤c中,当下载更新时,设备通过tr069协议连接tr069协议所规定的 ACS服务器,并在向ACS的上报的Oboot协议,添加一个节点,该节点上报当前损坏的镜像, 如果ACS服务器不能解析则忽略,如果能解析则更新升级文件的路径和文件名给设备,要求设备下载升级文件。参看图1,一般的闪存flash空间包括以下几部分第一部分是引导程序存储区,里面存储有引导程序boot loader,第二部分是非易失性随即存储区rwram,主要保存 boot loader和代码镜像共用的设备参数,第三部分是配置信息命令存储区config,包括一些系统和应用程序保存的配置,第四部分是代码镜像存储区,第五部分是用户代码存储区 custom code。本发明中将第四部分代码镜像存储区进行了改进,对主代码镜像img L进行裁减生成辅代码镜像img S,其中辅代码镜像img S占用空间比主代码镜像小很多。即主代码镜像img L又可以称为大img,辅代码镜像img S又可以称为小img。辅代码镜像img S又可以具体分为小image的操作系统内核kenel,即kernel S,和小image的文件系统rootfs, 即rootfs S两部分。生成正常使用的主代码镜像文件。在镜像的头部有一部标签信息tag,记录了该 image的相关信息,如rootfs,和kernel的偏移地址,image数据的crc校验码,用来表示内容是否完整。生成小应用系统辅代码镜像文件。通常地,辅image由主image裁减而成,减少了许多高级功能,只保留一些基本的功能。例如对宽带终端设备而言将无线wifi,samba, voip等众多的功能模块,通过菜单menuconfig设置交叉编译的配置文件,不编译进来,只保留基本的二层桥,三层路由,和dsl,pon等网络接入功能。当大img的大小有十几MB的大小时,辅image的大小只保留到1MB多,大大减少了占用flash的大小空间。如果符合需要和硬件支持,辅image也可以设置成有很明显差别的软件,或重新构建的方式,而不仅仅是裁剪得出。通过主机的编译工具大小连个image打包生成一个完整的文件供生产时烧录使用。参看图2,Boot loader启动后会对主image和辅image进行校验,检查是否完整, 如果主image完整则正常加载启动主image。两个image的偏移大小和长度均可在nvram 中读取。如果主image损坏,而辅image正常则启动辅image来运行。如果其中一个image损坏而另外一个image正常,则在boot loader加载正常运行后会启动自动升级机制。具体的实现策略,可以在软件设置,并保存在nvram中,供boot loader读取后选择,如果没有配置数据则按照默认策略算出,image的地址和优先顺序。默认的情况是, 大image的程序为正常运行的程序,在大小两个image都保存完好的情况下,优先运行大 image。对于自动升级机制正常运行的image,读取配置区(config区域)中关于wan端网络连接的配置数据,该配置数据为上次正常运行联网所用的配置,并可以在多个备选配置中尝试。联网的配置数据是上次正常启动时联网是image在config区域所保存的配置数据,如果该配置数据无效则尝试使用image默认的配置数据。由于该配置可能有另外一个 image所保存,且两个image的的配置结构和参数类型都会有差别,因此需要只对必要的参数进行读取,对不能识别的参数采取忽略的策略就可以了。当在启动时发现另外一个image损坏时,首先想用户发送警告信息知会。通过 http或者ftp等协议连接预先配置的运营商或设备商预先提供的网络地址下载镜像文件到内存,并在本地更新损坏的那个image。在宽带终端设备cpe还可以在设备启动后tr069协议中在向服务器添加上报boot change事件,由服务器指定地址在回复的消息中指定升级的文件和升级策略,然后进行下载和升级。如果自动升级不成功,则在用户上网的时候强制推送web页面,提示有image损坏,则提醒用户通过通过web页面和telnet等方式,手动下载程序进行升级。一般来说是先尝试通过tr069升级再尝试普通的http或ftp的地址进行升级。在下载失败后,一般重试三次,每次延时再试的时间比上一次都一个数量级,这种升级方法需要ACS服务器配套修改来支持。如果ACS服务器不支持该节点,直接忽略就可以。ACS服务器如果支持该节点,则更新升级文件的路径和文件名给cpe,并要求cpe下载升级文件。
权利要求
1.嵌入式设备上使用双代码镜像运行的方法,以上方法是通过闪存单元中的镜像代码存储区实现加载运行的过程,闪存单元的结构中包括启动代码区、非易失性随即存储区、 配置信息命令存储区、代码镜像存储区、以及用户代码区,其特征在于所述的代码镜像存储区包括一个主代码镜像存储区和至少一个辅代码镜像存储区,双代码镜像运行的步骤包括a、启动系统启动引导区中的引导程序;b、从非易失性随即存储区读取配置以及两个代码镜像中镜像的信息;C、分别借助主代码镜像存储区和辅代码镜像存储区中的crc校验码对主镜像信息和辅镜像信息进行校验,校验结果按以下3种情况进行处理Cl、如果主镜像信息完整,从主代码镜像存储区启动,并跳至步骤d;c2、如果主镜像信息不完整、辅镜像信息完整,从辅代码镜像存储区启动,并跳至步骤d; c3、主镜像信息不完整、辅镜像信息不完整,报警出错,并跳至步骤d ;d、双代码镜像运行过程结束。
2.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的步骤cl中,主镜像信息完整的情况中包括辅镜像信息完整或不完整,当辅镜像信息不完整时,自动连接网络下载辅镜像信息进行更新升级。
3.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的步骤c2,从辅代码镜像存储区启动的同时,自动连接网络下载主镜像信息进行更新升级。
4.根据权利要求2或3所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于 在连接网络下载更新镜像时,如果更新成功,则系统重新启动,返回步骤a;如果更新失败, 正常运行完整的镜像信息。
5.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的步骤c,对于不完整的镜像信息,加以身份标记。
6.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的辅代码镜像存储区的生成是从主代码镜像存储区裁减而成。
7.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的主代码镜像存储区或辅代码镜像存储区中的镜像信息是上次正常运行联网所用的镜像信息。
8.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的镜像信息中都包含有标签,标签中包括crc校验码、身份识别码、以及内核和文件系统的偏移地址参数。
9.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的步骤cl中,当主镜像信息或辅镜像信息都完整时,也可以对其中任意一个进行下载更新。
10.根据权利要求1所述的嵌入式设备上使用双代码镜像运行的方法,其特征在于所述的步骤C中,当下载更新时,设备通过tr069协议连接tr069协议所规定的ACS服务器, 并在向ACS的上报的Oboot协议,添加一个节点,该节点上报当前损坏的镜像,如果ACS服务器不能解析则忽略,如果能解析则更新升级文件的路径和文件名给设备,要求设备下载升级文件。
全文摘要
嵌入式设备上使用双代码镜像运行的方法,提供一种成本低廉,且满足嵌入式设备程序生成,加载,运行升级的方法并提高程序的安全可靠性,以上方法是通过程序编译,生产烧录过程在闪存中的镜像代码存储区在主代码镜像之外添加辅代码镜像的过程,使两个代码镜像能够相互补充,相互升级,能够在减少flash空间的前提下,在其中一个代码镜像损坏时仍然能够正常工作,和自我修复,从而提高提高嵌入式设备的安全可靠性。辅代码镜像存储空间是一个最小的应用系统,包含基本的系统功能,便于维护和升级,相比以往用直接双备份flash进行交叉备份的方式,节省多达一半的flash空间,成本更加低廉,具有很好的经济效益。
文档编号G06F9/445GK102289395SQ20111019702
公开日2011年12月21日 申请日期2011年7月14日 优先权日2011年7月14日
发明者刘宏钧, 汪澜, 王志波 申请人:深圳市共进电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1