支持固件自动恢复功能的远程升级方法与系统与流程

文档序号:11323028阅读:521来源:国知局
支持固件自动恢复功能的远程升级方法与系统与流程
本发明涉及无线通信
技术领域
,特别是涉及一种支持固件自动恢复功能的远程升级方法与系统。
背景技术
:在实际应用中,常需要对无线通信模块中的软件(系统)进行升级,但由于这些通信模块很多时候设置在不同的位置,因此,对模块中软件进行远程升级已成为一种主流的升级方式。目前,主流的软件远程升级方法包括fota(firmwareover-the-air,移动终端的空中下载软件升级),该技术在终端设备上,利用http(hypertexttransferprotocol,超文本传输协议)协议,通过移动网络从指定的服务器下载系统镜像,并且写入相应nandflash(nandflashmemory,闪存),在下一次系统启动时,加载下载的系统镜像,实现软件升级更新。fota技术虽然能够实现软件远程升级,但是在升级过程中需要对存储器中镜像文件进行多次读写,升级过程中的镜像数据容易丢失,导致远程升级失败。技术实现要素:基于此,有必要针对一般软件远程升级方法无法容易丢失过程中的镜像数据,导致升级稳定性不高的,提供一种不易丢失升级过程中的镜像数据,升级稳定性好的支持固件自动恢复功能的远程升级方法与系统。一种支持固件自动恢复功能的远程升级方法,包括步骤:确定存储器中已划分的主分区、备份分区以及升级分区,主分区用于存储主镜像数据,备份分区用于备份主分区中的镜像数据,升级分区用于存储升级过程中下载的镜像数据;下载待升级固件文件,并将待升级固件文件存储至升级分区;当需进行软件升级时,对升级分区中数据进行校验解压,获得校验解压后的数据;将校验解压后的数据更新到主分区;将主分区中的数据备份至备份分区。一种支持固件自动恢复功能的远程升级系统,包括:分区确定模块,用于确定存储器中已划分的主分区、备份分区以及升级分区,主分区用于存储主镜像数据,备份分区用于备份主分区中的镜像数据,升级分区用于存储升级过程中下载的镜像数据;下载模块,用于下载待升级固件文件,并将待升级固件文件存储至升级分区;校验解压模块,用于当需进行软件升级时,对升级分区中数据进行校验解压,获得校验解压后的数据;更新模块,用于将校验解压后的数据更新到主分区;备份模块,用于将主分区中的数据备份至备份分区。本发明支持固件自动恢复功能的远程升级方法与系统,确定存储器中已划分的主分区、备份分区以及升级分区,主分区用于存储主镜像数据,备份分区用于备份主分区中的镜像数据,升级分区用于存储升级过程中下载的镜像数据,下载待升级固件文件,并将待升级固件文件存储至升级分区,当需进行软件升级时,对升级分区中数据进行校验解压,获得校验解压后的数据,将校验解压后的数据更新到主分区,将主分区中的数据备份至备份分区。整个过程中,在存储器中额外划分了备份分区和升级分区,下载的待升级固件文件存储于升级分区,避免升级过程中多次读写主分区内镜像数据,并且还将主分区中数据存储至备份分区,对数据进行备份,避免升级过程中镜像数据丢失,能够实现高效且稳定的软件远程升级。附图说明图1为本发明支持固件自动恢复功能的远程升级方法其中一个实施例的流程示意图;图2为待升级固件数据包的结构示意图;图3为待升级固件文件打包成待升级固件数据包的流程示意图;图4为待升级固件数据包校验解压的流程示意图;图5为系统应用本发明支持固件自动恢复功能的远程升级方法进行软件远程升级操作的总流程示意图;图6为本发明支持固件自动恢复功能的远程升级系统其中一个实施例的结构示意图。具体实施方式本发明支持固件自动恢复功能的远程升级方法与系统的核心逻辑是在存储器(nandflash)中除存储固件文件镜像的主分区外,还另外开辟两块足够大的分区,一块为备份分区,用于备份系统的镜像,另外一块为更新区,用于存放空中升级下载的镜像。这个两个分区始终用于存放系统镜像,系统不会去加载,系统始终加载主分区的镜像。主分区镜像就是固件文件子程序的分区,具体包括slb(secondlevelboot,二级引导加载)、3g固件文件、4g固件文件以及应用程序固件文件,它们并不做任何的修改。只有在升级成功或损坏时,才会被更新。使用闪存工具升级时,镜像主分区会被更新,系统进入软件升级状态后,会使用更新分区里保存的镜像覆盖主分区镜像;系统正常启动时,主分区镜像检测到错误,会使用备份分区里的镜像覆盖主分区,主分区保存的镜像是非压缩状态。备份分区始终用于备份主分区里的镜像。当主分区镜像升级后,会主动把主分区的镜像拷贝至备份分区。在主分区里镜像损坏时,会把备份分区里的镜像拷贝至主分区,用于系统正常启动。所以在正常启动过程中,备份分区并不会被经常读写,极大的增加了备份分区的使用寿命。考虑到压缩与解压的耗时较长,一般备份分区保存的镜像是非压缩状态。升级分区只在软件升级时,把下载的镜像保存至该分区。并且在下载成功后,下一次系统启动时,把镜像拷贝至主分区后更新系统。由于该分区只有软件升级时,才会被更新,所以如果下载过程中断网、断电,下次可以根据日志记录的下载长度进行续传。如图1所示,一种支持固件自动恢复功能的远程升级方法,包括步骤:s100:确定存储器中已划分的主分区、备份分区以及升级分区,主分区用于存储主镜像数据,备份分区用于备份主分区中的镜像数据,升级分区用于存储升级过程中下载的镜像数据。存储器中除了设置有传统主分区外,还额外划分了备份分区和升级分区,其中主分区用于存储主镜像数据,备份分区用于备份主分区中镜像数据,升级分区用于存储升级过程中下载的镜像数据。首先,需要确定好存储器中这三个分区位置,以便后续将对应的数据存储。s200:下载待升级固件文件,并将待升级固件文件存储至升级分区。系统下载待升级固件文件,并且将下载的数据存储到升级分区。具体来说,固件文件包括slb、3g固件文件、4g固件文件以及应用程序固件文件。非必要的,可以基于空间下载软件技术,下载待升级固件文件。s300:当需进行软件升级时,对升级分区中数据进行校验解压,获得校验解压后的数据。当系统需要进行软件升级时,对于升级分区中数据进行校验解压,确保数据完整与准确。s400:将校验解压后的数据更新到主分区。将步骤s300得到的校验解压后的数据更新到主分区,系统加载主分区内的存储的镜像文件,进行软件升级。s500:将主分区中的数据备份至备份分区。当主分区镜像升级后,会主动把主分区的镜像拷贝至备份分区。在主分区里镜像损坏时,会把备份分区里的镜像拷贝至主分区,用于系统正常启动。所以在正常启动过程中,备份分区并不会被经常读写,极大的增加了备份分区的使用寿命。本发明支持固件自动恢复功能的远程升级方法,确定存储器中已划分的主分区、备份分区以及升级分区,主分区用于存储主镜像数据,备份分区用于备份主分区中的镜像数据,升级分区用于存储升级过程中下载的镜像数据,下载待升级固件文件,并将待升级固件文件存储至升级分区,当需进行软件升级时,对升级分区中数据进行校验解压,获得校验解压后的数据,将校验解压后的数据更新到主分区,将主分区中的数据备份至备份分区。整个过程中,在存储器中额外划分了备份分区和升级分区,下载的待升级固件文件存储于升级分区,避免升级过程中多次读写主分区内镜像数据,并且还将主分区中数据存储至备份分区,对数据进行备份,避免升级过程中镜像数据丢失,能够实现高效且稳定的软件远程升级。在其中一个实施例中,将待升级固件文件存储至升级分区的步骤包括:步骤一:将待升级固件文件格式从*.fls转换为.bin,获得.bin文件。首先使用数据格式转换工具(具体可以为*.flsto.bin工具)把*.fls转成.bin文件(去除一些头尾信息),再按照升级方案打包成一个.bin文件,在每次软件版本发布的同时发布该文件,该.bin文件用于软件升级。步骤二:在每个.bin文件头部增加对应的预设标头,获得更新的.bin文件,预设标头用于表征.bin文件的相关信息。在每个.bin文件前面加一个预设的标头(header),在预设的标头中记录了文件的相关信息。具体来说,在每个.bin文件前面加一个header,按照规定次序排列,组成一个新的后缀为..bin的文件。步骤三:将更新的.bin文件打包,获得待升级固件数据包。按照预设的格式将更新的.bin文件打包,获得待升级固件数据包。这个过程可以理解为一个数据包打包的过程。更具体来说,如图2所示,待升级固件文件包括slb文件、3g固件文件、4g固件文件、应用程序固件文件,上述步骤三打包的过程具体为:从数据包头部至尾部,依次按照slb文件对应的第一更新.bin文件、3g固件文件对应的第二更新.bin文件、4g固件文件对应的第三更新.bin文件以及应用程序固件文件对应的第四更新.bin文件次序打包,获得待升级固件数据包。即不同的.bin文件分别对应有相应的标头,标头记录了文件的相关信息,在升级过程中,先从闪存中读取数据,根据标头信息找到相应的升级文件。在图2中,版本信息:对于差分升级文件,version1和version2分别表示old-version和new-version;对于整包升级文件,version1的值为0;version2为新的软件版本。header格式具体如下表1。表1header格式标志:固定值,设置为0xaa0xaa0x550x55。文件名:当前文件的名字。文件大小:为发布的..bin文件的实际大小,用于识别文件。文件校验值:原始文件所有数据累加取反+1,用于对文件数据校验。头信息校验值:header所有数据累加取反+1,用于对header数据校验。如图3所示,在其中一个具体实施例中,升级文件打包流程具体如下:1、开始;2、采用文件转换工具,把相应的*.fls文件转换成.bin文件;3、从硬盘读取.bin文件名、文件校验值和文件大小;4、header组包;5、按照slb、3g、4g、app顺序生成文件;6、结束。需要指出的是,上述过程是在电脑上完成的。*.fls文件是编译生成的文件,要先转换成.bin文件。在实际应用中整个流程是:先在电脑上制作升级文件(同时支持整包升级和差分升级),然后把升级文件放到一个服务器上。终端借助于无线网络(3g/4g),通过http协议的方式从服务器下载升级包进行远程升级相应的,当终端从服务器端下载升级数据包完成后,系统会自动重启。在重启的过程中,系统会对升级数据包进行校验和解压,如图4所示,待升级固件数据包的解压过程具体包括步骤:1、从闪存的升级区中读取完整的数据包;2、利用slb头信息对slb标头和slb镜像进行校验,获取3g头信息;3、利用3g头信息对3g标头和3g镜像进行校验,获取4g头信息;4、利用4g头信息对4g标头和4g镜像进行校验,获取应用程序头信息;5、利用应用程序头信息对应用程序标头和应用程序镜像进行校验;6、当上述步骤都能正常进行时,数据包解压成功,当上述任意一个步骤出现错误时,数据包解压失败。在其中一个实施例中,当需进行软件升级时,对升级分区中数据进行校验解压,获得校验解压后的数据的步骤包括:步骤一:当需进行软件升级时,对升级分区中数据进行校验解压,并判断校验解压是否成功。步骤二:当成功时,获得校验解压后的数据。步骤三:当未成功时,返回下载待升级固件文件的步骤。当校验解压成功时,说明获取的数据是完整的数据,此时获得校验解压后的数据,当校验解压未成功时,说明此时获得数据存在异常,有可能部分数据已经丢失,为了确保软件升级的稳定,此时需返回下载待升级固件文件的步骤,即重新下载待升级固件文件。在实际应用,采用本发明支持固件自动恢复功能的远程升级方法的系统,在重启进行软件更新的流程如图5所示。slb启动过程中,会检测非易失性存储器中保存的核心数据结构中的update_state(下载开始)。如果值为update_ota_success(空中下载更新成功)则继续完成ota(overtheairtechnology,空中下载)后的主分区镜像的更新与备份。另外,在实际应用中,为了确保fota升级的安全性,在非易失性存储器中添加一个数据结构,用于存储核心的数据。该结构记录了日志输出是否打开、升级状态、镜像状态、镜像的大小、校验值等信息。其具体的软件代码表征如下:log_enable主要用于控制串口是否输出日志。damaged_state主要记录各分区中镜像是否损坏,damaged_state二进制前八位数,每一位为1表示对应的分区镜像完整,否则损坏。该标志在系统状态变化过程中,会实时更新。如下表:update_state主要记录fota升级的各种状态,具体的状态转换见启动流程和下载流程。其中包括:ght_update_ota_null=0,//不需要升级update_ota_stop初始状态update_ota_fail空中升级失败update_ota_null不需要升级update_ota_success空中升级成功update_ota_end空中升级终止update_ota_request空中升级请求发起update_ota_updating空中升级数据传输boot_fota_decompressfota分区镜像文件解压boot_fota_updating使用fota分区替换主分区镜像boot_backup_updating使用备份分区替换主分区镜像boot_backup_decompress备份分区镜像文件解压boot_main_backup主分区镜像备份boot_main_compress主镜像压缩boot_success镜像更新成功flash_tool_state用来记录是否使用flashtool进行了升级,二进制前四位数,每一位为1表示对应的分区是否使用flashtool升级。如下表:valuedescribevaluedescribe00000001slb已升级000000103g已升级000001004g已升级00001000bb已升级main_length记录主分区中各个文件的大小,main_chksum记录主分区中各个文件的校验值backup_length记录备份分区文件的大小。backup_chksum记录备份分区文件的校验值。main_version记录主镜像版本号boot_version记录boot版本号update_packet收到的数据包个数file_packet总包数file_length下载文件总长度file_chksum下载包校验值reserved保留。如图6所示,一种支持固件自动恢复功能的远程升级系统,包括:分区确定模块100,用于确定存储器中已划分的主分区、备份分区以及升级分区,主分区用于存储主镜像数据,备份分区用于备份主分区中的镜像数据,升级分区用于存储升级过程中下载的镜像数据。下载模块200,用于下载待升级固件文件,并将待升级固件文件存储至升级分区。校验解压模块300,用于当需进行软件升级时,对升级分区中数据进行校验解压,获得校验解压后的数据。更新模块400,用于将校验解压后的数据更新到主分区。备份模块500,用于将主分区中的数据备份至备份分区。本发明支持固件自动恢复功能的远程升级系统,分区确定模块100确定存储器中已划分的主分区、备份分区以及升级分区,主分区用于存储主镜像数据,备份分区用于备份主分区中的镜像数据,升级分区用于存储升级过程中下载的镜像数据,下载模块200下载待升级固件文件,并将待升级固件文件存储至升级分区,当需进行软件升级时,校验解压模块300对升级分区中数据进行校验解压,获得校验解压后的数据,更新模块400将校验解压后的数据更新到主分区,备份模块500将主分区中的数据备份至备份分区。整个过程中,在存储器中额外划分了备份分区和升级分区,下载的待升级固件文件存储于升级分区,避免升级过程中多次读写主分区内镜像数据,并且还将主分区中数据存储至备份分区,对数据进行备份,避免升级过程中镜像数据丢失,能够实现高效且稳定的软件远程升级。在其中一个实施例中,下载模块200还用于:将待升级固件文件格式从*.fls转换为.bin,获得.bin文件;在每个.bin文件头部增加对应的预设标头,获得更新的.bin文件,预设标头用于表征.bin文件的相关信息;将更新的.bin文件打包,获得待升级固件数据包。在其中一个实施例中,待升级固件文件包括slb文件、3g固件文件、4g固件文件、应用程序固件文件,下载模块200还用于:从数据包头部至尾部,依次按照slb文件对应的第一更新.bin文件、3g固件文件对应的第二更新.bin文件、4g固件文件对应的第三更新.bin文件以及应用程序固件文件对应的第四更新.bin文件次序打包,获得待升级固件数据包。在其中一个实施例中,校验解压模块300包括:校验解压单元,用于当需进行软件升级时,对升级分区中数据进行校验解压,并判断校验解压是否成功。第一处理单元,用于当校验解压成功时,获得校验解压后的数据。第二处理单元,用于当校验解压未成功时,控制下载模块重新下载待升级固件文件。在其中一个实施例中,下载模块200还用于基于空间下载软件技术,下载待升级固件文件。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1