CN111796856B - 差分升级方法及装置、存储介质、计算机设备 - Google Patents
差分升级方法及装置、存储介质、计算机设备 Download PDFInfo
- Publication number
- CN111796856B CN111796856B CN202010872670.8A CN202010872670A CN111796856B CN 111796856 B CN111796856 B CN 111796856B CN 202010872670 A CN202010872670 A CN 202010872670A CN 111796856 B CN111796856 B CN 111796856B
- Authority
- CN
- China
- Prior art keywords
- file
- upgrading
- original
- upgrade
- differential
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种差分升级方法及装置、存储介质、计算机设备,该方法包括:获取用于版本升级的差分包;在使用所述差分包对原版本文件进行升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定。由此,能够根据终端的系统资源动态配置每次升级的文件块的大小,适用于低容量存储设备终端差分升级,以合理利用低容量存储的终端设备的当前系统资源以完成版本升级,且能够实现掉电保护。
Description
技术领域
本发明涉及终端升级技术领域,尤其涉及一种差分升级方法及装置、存储介质、计算机设备。
背景技术
对于当前众多智能终端,空间下载技术(Over-the-Air Technology,简称OTA)升级是很重要的功能,通过OTA升级,终端通过网络下载新的系统程序并完成升级,能让终端产品迭代更新系统软件版本,在产品推出后能不断提升产品功能和性能,极大的提高产品的体验。OTA升级可包括整包升级和差分升级两种升级方式。其中,整包升级是以完整的目标版本为升级包进行升级,升级包较大,下载时间漫长,给用户体验很不好。差分升级则是以原版本文件和目标版本间的增量包制作升级包进行升级,其升级包一般远小于整包升级方式的升级包,实际使用中用户终端的升级一般采用差分升级。
低容量存储的终端设备由于系统资源(包含内存,存储等)较小的原因,当用于系统版本升级的差分包较小时,不能尽量利用当前系统资源升级,达不到合理利用。而当使用较大的升级差分包升级时,差分算法造成的消耗的系统资源过大可能会导致如下问题:升级比较困难甚至于失败;数据备份失败,从而掉电保护功能失效。
由此,亟需一种设备终端差分升级方法以合理利用低容量存储的终端设备的当前系统资源以完成版本升级,且能够实现掉电保护。
发明内容
本发明解决的技术问题是如何合理利用低容量存储的终端设备的当前系统资源以完成版本升级。
为解决上述技术问题,本发明实施例提供一种差分升级方法,所述方法包括:获取用于版本升级的差分包;在使用所述差分包对原版本文件进行一次或多次升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定。
可选的,在首次升级前,检测本地可用存储空间,以确定所述单次升级量。
可选的,所述使用所述差分包对原版本文件进行升级,包括下述步骤:步骤A,确定第一地址,所述第一地址的初始值为所述原版本文件在本地存储的起始地址;步骤B,从所述第一地址开始获取原版本文件中的一个原文件块进行备份;步骤C,基于当前备份的原文件块,使用所述差分包生成目标文件块,其中,所述目标文件块的文件大小不超过所述单次升级量;步骤D,删除前一次备份的原文件块,并将本次备份的原文件块的结束地址作为新的第一地址;跳转至步骤B,并继续执行所述步骤B至步骤D,直至完成对原版本文件的升级。
可选的,单个原文件块的大小不超过所述单次升级量。
可选的,若所述使用所述差分包对原版本文件进行升级的过程被中断,检测本地是否存在当前备份的原文件块;当存在当前备份的原文件块时,根据当前备份的原文件块确定原版本文件中未升级的部分在本地存储的起始地址,作为新的第一地址,并获取所述单次升级量;跳转至所述步骤B。
可选的,当前备份的原文件块中包括升级次数的信息,所述方法还包括:读取当前备份的原文件块中的升级次数的信息;所述根据当前备份的原文件块确定原版本文件未升级的部分在本地存储的起始地址,包括:根据所述升级次数的信息确定原版本文件未升级的部分在本地存储的起始地址。
可选的,所述检测本地是否存在当前备份的原文件块之后,还包括:当不存在当前备份的原文件块时,结束升级。
可选的,所述使用所述差分包对原版本文件进行升级之前,还包括:检测所述原版本文件内是否具有额外指示文件;当具有所述额外指示文件块时,备份所述额外指示文件。
可选的,所述单次升级量为本地可用存储空间扣除额外指示文件的文件大小之后的一半。
可选的,所述差分包包括额外指示文件的信息,所述检测所述原版本文件内是否具有额外指示文件,包括:从所述差分包中获取额外指示文件的信息,以检测所述原版本文件内是否具有额外指示文件。
可选的,所述额外指示文件块为在对所述原版本文件进行升级过程中会被覆盖的文件。
可选的,所述使用所述差分包对原版本文件进行每次升级时,生成补丁命令,所述补丁命令用于调用补丁工具执行升级操作。
可选的,所述补丁命令包括本次升级的目标文件写入的起始地址和文件大小。
本发明实施例还提供一种差分升级装置,所述装置包括:差分包获取模块,用于获取用于版本升级的差分包;差分升级模块,用于在使用所述差分包对原版本文件进行升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定。
本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述方法的步骤。
本发明实施例还提供一种计算机设备,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行所述方法的步骤。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例提供一种差分升级方法,包括:获取用于版本升级的差分包;在使用所述差分包对原版本文件进行升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定。较之现有技术,本发明实施例的方案能够根据终端的系统资源动态配置每次升级的目标文件的大小,适用于低容量存储设备终端差分升级,以合理利用低容量存储的终端设备的当前系统资源以完成版本升级。
进一步地,提供了对原版本文件逐块进行备份、升级的具体流程,且每次升级后的目标文件块的大小不超过单次升级量,依据该流程,能够在升级时基于终端当前的可用升级资源,申请合理的内存及其他存储空间进行升级,同时利用可用的存储进行数据备份,达到掉电保护功能。
进一步地,终端在对原版本文件进行升级的过程中,若由于掉电等原因导致升级过程被中断,在解除中断原因,可对上次的升级进程继续升级,对升级过程提供了掉电保护。
进一步地,终端在升级之前需要确定额外指示文件的信息,并对额外指示文件另行备份,避免在多次升级过程中,由于升级前后文件差异过大导致升级出错。由此,能够保证升级的完整性和准确性。
进一步地,将每次升级都作为一次单独的升级,向系统下达单独的补丁指令,实现了优化的差分算法,保证了低容量存储设备也能够做到掉电保护升级的功能。
附图说明
图1为本发明实施例的一种差分升级方法的流程示意图;
图2是图1中步骤S102的流程示意图;
图3为本发明实施例的一种升级前后文件块的示意图;
图4是本发明实施例的一种差分升级方法的部分流程示意图;
图5是本发明实施例的另一种升级前后文件块的示意图;
图6是本发明实施例的一种差分升级工具的流程示意图;
图7是本发明实施例的一种patch工具对原版本文件的特定文件块的升级过程的流程示意图;
图8是本发明实施例一种差分升级装置的结构示意图。
具体实施方式
如背景技术中所述,现有技术中低容量存储的终端设备存在升级比较困难甚至于失败,数据备份失败,从而掉电保护功能失效的问题。
具体地,目前对于差分升级来讲差分算法主要有两大类:一为通用的差分算法,二为特有的差分算法或者基于通用改造的算法,也称为优化的差分算法。
当使用通用的差分算法比如BSDiff算法时,制作差分包是基于原版本文件和目标版本文件整个进行差分制作;升级时则是基于原版本文件和差分包生成目标版本,然后进行更新。这样制作过程简单,但是升级时消耗的资源过多,比如内存至少需要消耗原版本文件和差分包总共大小的资源,而要达到掉电保护的目的,存储空间需要保存原版本文件和差分包两个文件。其中,BSDiff算法为一种差量更新算法,它在服务器端运行BSDiff算法产生补丁(patch)包,在客户端运行BSPatch算法,将原版本文件和patch包合成升级后的新文件。
当使用特有的差分算法比如安卓(Android)平台的差分算法时,制作差分包基于原版本文件和目标版本按块进行差分制作,而且在制作时会确定需要多少资源进行升级。这样制作流程复杂,也仅限于该平台使用;升级时消耗资源虽然较小,但升级流程需要消耗的资源已经固定,也不会利用多余的资源加快升级。
为解决上述问题,本发明实施例提供一种差分升级方法,包括:获取用于版本升级的差分包;在使用所述差分包对原版本文件进行一次或多次升级时,将升级操作分为一次或多次,每次升级针对所述原版本文件中的单个文件块;其中,在首次升级前,确定每次升级的单次升级量,所述原版本文件根据所述单次升级量被划分为多个文件块,每个文件块的大小不超过所述单次升级量。
由此,能够合理利用低容量存储的终端设备的当前系统资源以完成版本升级,且能够实现掉电保护。
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
请参见图1,图1为本发明实施例的一种差分升级方法的流程示意图,所述差分升级方法可由终端侧执行,该终端侧可指电脑、手机、智能手表等等终端设备,所述方法包括:
步骤S101,获取用于版本升级的差分包;
其中,差分包为对终端本地的原版本文件进行差分升级时使用的升级包,终端对原版本文件进行升级之前,可先从服务器端下载差分包至本地,然后使用差分包对终端本地的原版本文件进行升级。
本发明实施例的方案的差分包是对原版本文件和升级后的目标版本文件整个进行差分制作得到的,也即基于通用的差分算法制作差分包。
步骤S102,在使用所述差分包对原版本文件进行升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定。
在使用差分包对原版本文件进行升级之前,终端确定每次升级的单次升级量,并根据单次升级量确定每次升级生成的目标文件的大小,每次升级生成的目标文件的大小不超过单次升级量。
当生成的目标文件的大小不超过单次升级量时,进行一次升级即可。当生成的目标文件的大小超过单次升级量时,需要进行两次或两次以上的升级,每次对原版本文件进行升级后,得到目标文件的部分内容,通过两次或两次以上的升级得到升级后的目标文件的全部内容。
通过上述方法,在不修改差分包制作流程的基础上,能够根据终端的系统资源动态配置每次升级的目标文件的大小,适用于低容量存储设备终端差分升级,以合理利用低容量存储的终端设备的当前系统资源以完成版本升级。并且,在对原版本文件进行升级的过程中,若由于掉电等原因出现升级中断,解除中断原因后,也即仅对未升级的文件块继续进行升级,而无需重新对整个原版本文件进行升级,能够实现掉电保护。
在一个实施例中,在首次升级前,检测本地可用存储空间,以确定所述单次升级量。
本实施例中,优化了差分升级流程,终端可按系统可供消耗的内存及存储进行升级资源的动态配置使用,达到资源利用最大化。
在一个实施例中,请参见图2,步骤S102所述使用所述差分包对原版本文件进行升级,包括下述步骤:
步骤A,确定第一地址,所述第一地址的初始值为所述原版本文件在本地存储的起始地址;
其中,第一地址为对原版本文件进行升级的起始地址,在对原版本文件进行升级时,第一地址的初始值是原版本文件在终端本地存储的起始地址,并开始首次升级。
步骤B,从所述第一地址开始获取原版本文件中的一个原文件块进行备份;
原版本文件在划分文件块时,从存储原版本文件的起始地址开始,将原版本文件划分为一个或多个原文件块。
可选的,单个原文件块的大小不超过所述单次升级量。可选的,在划分时,按照存储地址的先后顺序,对原版本文件进行划分,划分后的每个原文件块等于单次升级量,故此最后一个原文件块的大小可能小于单次升级量。
在进行升级的过程中,对划分的一个或多个原文件块逐块进行备份。其中,升级开始后,先获取第一地址开始的一个原文件块进行备份,该原文件块为本次备份的原文件块。在终端本地指定用于存储备份文件的备份区域,将本次备份的原文件块存储到该备份区域,完成本次备份。
步骤C,基于当前备份的原文件块,使用所述差分包生成目标文件块,其中,所述目标文件块的文件大小不超过所述单次升级量;
可选的,生成目标文件块后,记录所述目标文件块与当前备份的原文件块的关系,以确定当前备份的文件块中未升级的部分。
步骤D,删除前一次备份的原文件块,并将本次备份的原文件块的结束地址作为新的第一地址;
其中,当前备份的原文件块为终端本地当前存在的所有备份的原文件块。在首次升级时,当前备份的原文件块为原版本文件在本地存储的起始地址开始的第一个原文件块。从第二次升级开始,当前备份的原文件块为两块:本次备份的文件块以及上一次备份的文件块。
可选的,在对原文件块进行备份时,是按照原文件块的存储地址逐块备份的。备份后的原文件块在备份区域按照原版本文件的存储顺序存储,在每次升级,从备份区域获取当前备份的原文件块中未升级的数据,将获取的数据加上差分包中对应的差分数据,可获取本次的目标文件块。使用该目标文件块的数据覆盖原版本文件中升级前的数据,即完成一次升级。
在完成本次升级之后,将前一次备份的原文件块从备份区域删除。即可用删除释放的空间继续备份下一次需备份的原文件块。其中,在首次升级时,无前一次备份的原文件块,不作删除。且将第一地址的值更新为本次备份的原文件块的结束地址,下次备份从新的第一地址开始获取原文件块。
跳转至步骤B,并继续执行所述步骤B至步骤D,直至完成对原版本文件的升级。
再次执行步骤B至步骤D,进入下一次备份、升级操作。直至完成对原版本文件的升级,则结束升级流程。
可选的,若对原版本文件的若干个原文件块都完成备份、且原版本文件未完成升级,下一次升级时,跳过备份操作,即跳过步骤B,直接执行步骤C。
本实施例中,提供了对原版本文件逐块进行备份、升级的具体流程,且每次升级后的目标文件块的大小不超过单次升级量,依据该流程,能够在升级时基于终端当前的可用升级资源,申请合理的内存及其他存储空间进行升级,同时利用可用的存储进行数据备份,达到掉电保护功能。
请参见图3,图3为一种升级前后文件块的示意图。原版本文件以Ver1表示,原版本文件被划分为3个原文件块(即图中的diffblk1、diffblk2和diffblk3)。目标版本文件以Ver2表示,其中的Diffblk1、Diffblk2和Diffblk3分别为目标版本文件的三个目标文件块,diffblk1升级前后的文件大小相同,也即Diffblk1为diffblk1升级后的数据。diffblk2升级后的文件大小变大,也即diffblk2升级后的数据包含于Diffblk2和Diffblk3中。
在原版本文件进行首次升级时,备份原版本文件中的第一原文件块(即图3中diffblk1),无论diffblk1的文件大小是否增加,只要完整备份diffblk1,在备份的diffblk1上加上差分包中对应的差分数据,即可升级得到Diffblk1,用Diffblk1覆盖原版本文件中的diffblk1,完成首次升级。升级后,保留备份的diffblk1,继续备份diffblk2。
对备份的diffblk2开始升级,由于diffblk2升级后文件大小增加,然而每次升级的量固定,故对diffblk2的升级包括两次升级:即对整个原版本文件的第二次升级和第三次升级。
在原版本文件进行第二次升级时,获取备份的diffblk2的部分数据,将这一部分数据升级得到Diffblk2,并用Diffblk2覆盖原版本文件中的diffblk2,删除备份的diffblk1,完成第二次升级。
在原版本文件进行第三次升级时,备份diffblk3,获取备份的diffblk2中未升级的部分数据,并获取备份的diffblk3中的部分数据,将获取的数据升级得到Diffblk3,用Diffblk3覆盖原版本文件中的diffblk3,删除备份的diffblk2,完成第三次升级。
对原版本文件进行第四次升级时,此时原版本文件中无需要备份的原文件块,跳过备份的步骤,获取备份的diffblk3中未升级的部分数据,使用差分包对其升级,得到Diffblk4,将Diffblk4写入Diffblk3之后,完成对原版本文件(Ver1)的升级。由图3可看出,Diffblk4的文件大小小于其他目标文件块的大小,也即小于单次升级量。
在一个实施例中,请参见图2和图4,图4为一种差分升级方法的部分流程示意图,所述差分升级方法还包括:
步骤S401,若所述使用所述差分包对原版本文件进行升级的过程被中断,检测本地是否存在当前备份的原文件块;
终端在对原版本文件进行升级的过程中,可能由于掉电等原因导致升级过程被中断,在解除中断原因,如重新上电后,可继续从上次升级被中断的地方继续升级。继续升级开始前,先检测终端本地是否存在当前备份的原文件块。当指定了用于存储备份文件的备份区域时,终端对备份区域进行检测,以确定是否存在当前备份的原文件块。
步骤S402,当存在当前备份的原文件块时,根据当前备份的原文件块确定原版本文件中未升级的部分在本地存储的起始地址,作为新的第一地址,并获取所述单次升级量;
在执行步骤S402后,跳转至所述步骤B,继续执行步骤B至步骤D,直至完成版本升级。
在确定本地存在当前备份的原文件块时,根据该当前备份的原文件块确定原版本文件上次升级的部分和还未升级的部分,以继续升级。另外,继续升级时,终端还需确定单次升级量,以将原版本文件未升级的部分继续划分为若干个原文件块,升级时以原版本文件未升级的部分在本地存储的起始地址作为新的第一地址,继续按照图2中步骤B至步骤D执行升级操作。
可选的,步骤S401所述检测本地是否存在当前备份的原文件块之后,还可包括:步骤S403,当本地不存在当前备份的原文件块时,结束升级。
若不存在当前备份的原文件块,则终端无法追溯上次升级的进程,退出升级进程。可选的,退出升级进程之前,可生成错误提示信息,告知无法继续升级。
进一步,请继续参见图4,当前备份的原文件块中包括升级次数的信息,所述方法还包括:读取当前备份的原文件块中的升级次数的信息;步骤S402所述根据当前备份的原文件块确定原版本文件未升级的部分在本地存储的起始地址,包括:根据所述升级次数的信息确定原版本文件未升级的部分在本地存储的起始地址。
在步骤C中,终端每次对原文件块进行备份时,在备份的原文件块中加入该原文件块为第几次升级的信息,也即升级次数的信息。在继续升级时,可根据升级次数的信息确定原版本文件未升级的部分。
可选的,可在备份的原文件块中加上包尾,该包尾中承载升级次数的信息。在解除中断原因后继续升级时,获取备份的文件块的包尾信息,即可确定已升级的次数,且根据每次生成的目标文件块的大小(即单次升级量)确定原版本文件未升级的部分。
本实施例中,终端在对原版本文件进行升级的过程中,若由于掉电等原因导致升级过程被中断,在解除中断原因,可对上次的升级进程继续升级,对升级过程提供了掉电保护。
在一个实施例中,所述使用所述差分包对原版本文件进行升级之前,还包括:检测所述原版本文件内是否具有额外指示文件;当具有所述额外指示文件块时,备份所述额外指示文件。
可选的,所述差分包包括额外指示文件的信息,所述检测所述原版本文件内是否具有额外指示文件,包括:从所述差分包中获取额外指示文件的信息,以检测所述原版本文件内是否具有额外指示文件。
其中,额外指示文件为原版本文件中指定的需要另行备份的文件。额外指示文件的信息用于确定原版本文件中需另行备份的额外指示文件,额外指示文件的信息可在差分包中指示,也可通过其他方式指示,如服务器另行向终端发送。
可选的,所述额外指示文件块为在对所述原版本文件进行升级过程中会被覆盖的文件。
请参见图5,图5为另一种升级前后文件块的示意图;原版本文件以Ver1表示,原版本文件被划分为4个原文件块(即图中的diffblk1、diffblk2、diffblk3和diffblk4)。目标版本文件以Ver2表示,其中的Diffblk1、Diffblk2、…、Diffblk6分别为目标版本文件的6个目标文件块,diffblk1升级前后的文件大小相同,也即Diffblk1为diffblk1升级后的数据。本示例指定diffblk2为额外指示文件,在首次升级前对diffblk2也进行升级。
在原版本文件进行首次升级时,备份原版本文件中的第一原文件块(即diffblk1),无论diffblk1的文件大小是否增加,只要完整备份diffblk1,在diffblk1上加上差分包中对应的差分数据,即可升级得到Diffblk1,用Diffblk1覆盖原版本文件中的diffblk1,完成首次升级,并保留备份的diffblk1。
在原版本文件进行第二次升级时,备份diffblk2,通过差分包检测到备份的diffblk2无效,直接根据差分包获取newblk的数据,得到本次升级后的Diffblk2,用Diffblk2覆盖原版本文件中的diffblk2,完成第二次升级,删除备份的diffblk1。
由于diffblk3升级后文件大小增加,然而每次升级的量固定,故对diffblk3的升级包括两次升级:即对整个原版本文件的第三次升级和第四次升级。
在原版本文件进行第三次升级时,备份diffblk3,获取diffblk3的部分数据,将这一部分数据升级得到Diffblk3,并用Diffblk3覆盖原版本文件中的diffblk3,完成第三次升级,删除diffblk2。
在原版本文件进行第四次升级时,备份diffblk4,获取备份的diffblk3未升级的部分数据以及备份的diffblk4的部分数据,对这些获取的数据升级得到Diffblk4,用Diffblk4覆盖原版本文件中的diffblk4,完成第四次升级,删除diffblk3。
在原版本文件进行第五次升级时,原版本文件中无需要备份的原文件块,则不作备份,获取备份的diffblk4中未升级的部分数据,以及提前备份的额外指示文件(diffblk2),对这些获取的数据升级得到Diffblk5,将Diffblk5写入Diffblk4之后,完成对原版本文件(Ver1)的升级。
需要说明的是,额外指示文件备份后,直至该文件升级成功,不会被删除。且额外指示文件的大小不受单次升级量的限定,其具体对应的文件以及文件大小由差分包确定。
可选的,所述单次升级量为本地可用存储空间扣除额外指示文件的文件大小之后的一半。
单次升级量可以用后述公式表示:M=(L-E)/2;其中,M为单次升级量,L为本地可用存储空间的大小,E为额外指示文件的大小。
终端检测本地可用存储空间,以确定每次升级的单次升级量,本地可用存储空间扣除额外指示文件之后,剩余为动态可配置区域,该动态可配置区域仅需要满足其大小大于等于单次升级量即可。如检测到的单次升级量大小为1M时,则仅需要满足终端的动态可配置区域为2M。
可选的,额外指示文件在备份后,除非完成对整个原版本文件的升级,否则不予删除。
可选的,在图2和图4中所述的差分升级操作中,在完成对原版本文件的升级后,还包括:删除所有的当前备份的原文件块以及额外指示文件。
本实施例中,终端在升级之前需要确定额外指示文件的信息,并对额外指示文件另行备份,避免在多次升级过程中,由于升级前后文件差异过大导致升级出错。由此,能够保证升级的完整性和准确性。
请再次参见图2和图4,在开始升级时,第一次对本次备份文件块进行备份时,也备份额外指示文件。图4中,在步骤S401中检测是否存在备份的文件块时,本地存在的备份的文件块可能包括额外指示文件,该额外指示文件可用于后续的升级,然而步骤S402中基于备份的文件块确定原版本文件中未升级的部分指的是基于除额外指示文件之外的其他备份文件块确定原版本文件中未升级的部分。
在一个实施例中,请继续参见图1,步骤S102所述使用所述差分包对原版本文件进行每次升级时,终端生成补丁命令,所述补丁命令用于调用补丁工具执行升级操作。
可选的,所述补丁命令包括本次升级的文件块在原版本文件中的起始地址和本次升级的文件大小。
现有技术中,差分升级过程中也基于补丁(patch)命令调用patch工具,
现有的patch命令为:patch oldfile newfile patchfile。
其中,patch为生成目标版本命令,oldfile为原版本文件的备份,patchfile为差分包,newfile为生成的目标版本文件。
然而,对于内存较小的终端,保存整个新镜像在很多时候做不到,且备份算法运行过程中需要消耗较大内存,消耗的内存至少大于oldfile和newfile的总和,系统内存资源也不够。
修改后的差分算法,可以基于原版本文件中的部分数据(即每次备份的文件块)和差分包完成单次升级,在每次升级时,终端都将本次升级将其作为现有技术中的完整的差分升级步骤,向系统下达一次补丁命令,该命令用于指示本次升级的进程。
可选的,修改后的补丁命令可以为:patch oldfile newfile patchfile addresslength。
其中,address为本次升级的目标文件块的存储的起始位置,length为本次升级的目标文件块的文件大小,也即,修改后的补丁命令中的目标文件块newfile由参数address和length确定。根据该命令,终端在检测每次升级时,可指定本次升级的文件块的起始地址和文件大小。
本发明实施例的差分包的制作是基于通用差分算法实现的,即对整个镜像进行差分,使得制作的差分包数据量较小。升级时基于优化的差分算法进行升级,也即按块升级。
本实施例中,将每次升级都作为一次单独的升级,向系统下达单独的补丁指令,实现了优化的差分算法,保证了低容量存储设备也能够做到掉电保护升级的功能。
在一个具体的实施例中,请参见图6,图6为一种差分升级工具的整体流程图,
在开始升级后,终端执行步骤S601,判断终端本地原版本文件的哈希(也称SHA)值是否等于目标版本的SHA值;
首先,若判断为否,则表明需要对终端本地的原版本文件进行升级,其升级步骤包括:
步骤S602,检测本地可用存储空间,确定每次升级的单次升级量。
步骤S603,备份额外指示文件;即根据上述方法判断存储额外指示文件时,需对其进行备份。
步骤S604,备份原版本文件中的第n个文件块(n的取值为1,2,…,N);其中,当前备份的文件块包括第n个文件块和上次备份的n-1个文件块。
步骤S605,调用patch工具进行升级,得到本次升级后的目标文件块。
步骤S606,将原版本文件中第n个文件块的内容替换为本次升级后的目标文件块。
步骤S607,删除备份的第n-1个文件块。
步骤S608,判断n是否等于N。若是,则升级完成,结束升级进程;若否,则进入下一次备份,设n=n+1,跳转至步骤S604,继续下一次备份,以及对下一次备份的文件块进行升级,直至升级完成。
其次,在步骤S601之后,还可包括其他情况,例如,上次升级被中断,在解除中断原因后,可继续升级的进程。可选的,在上次升级被中断时,可在终端本地原版文件的SHA值存储处指示升级中断的情况。继续升级进程的步骤包括:
进一步,当出现所述其他情况时,可以执行步骤S609,获取单次升级量。
进一步,在执行步骤S609后,还可以执行步骤S610,检测本地是否存在备份的文件块。若是,则继续执行步骤S611,根据备份的文件块确定原版本中未升级的部分,也即第n个文件块;若否,则提示继续升级出错,可结束升级进程。
再次,在步骤S601之后,若判断结果为是,此时表明不需要对终端本地的原版本文件进行升级,直接结束升级进程。
请继续参见图7,图7为图6中步骤S605调用patch工具进行升级,得到本次升级后的目标文件块的流程示意图;也即patch工具执行时的流程示意图;具体包括:
步骤S701,从当前备份的原文件块中获取未升级的数据,作为本次升级数据;
步骤S702,从差分包获取对本次升级数据进行升级的差分数据,丢弃其他数据;
步骤S703,将本次升级数据和前述获取的差分数据做处理并保存至缓存;
步骤S704,从备份的额外指示文件中获取与本次升级相关的数据,丢弃其他数据,保存至缓存;
步骤S705,是否完成对本次升级的所有数据进行升级;若是,则执行步骤S706,得到本次升级后的目标文件块,并完成本次升级的patch流程;若否,跳转至步骤S701,直至完成对本次升级的所有数据进行升级。
本发明实施例提供的差分升级方法相较于现有的差分升级方法。其优点在于:制作时简单,不需要知道当前终端设备空间,且不需要分块,也不用确定升级时需要消耗的资源;终端可动态的适配当前本地可用存储空间进行单次升级量设置,达到资源利用最大化。具体地,如果当前本地可用存储空间少,则每次升级的文件块小,如果当前本地可用存储空间大,则每次升级的文件块大。
请参见图8,图8为一种差分升级装置的结构示意图,差分升级装置80包括:
差分包获取模块801,用于获取用于版本升级的差分包;
差分升级模块802,用于在使用所述差分包对原版本文件进行升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定;
在一个实施例中,差分升级装置80还可以包括:单次升级量确定模块,用于在首次升级前,检测本地可用存储空间,以确定所述单次升级量。
在一个实施例中,差分升级模块802包括:
第一地址确定单元,用于执行步骤A,确定第一地址,所述第一地址的初始值为所述原版本文件在本地存储的起始地址;
备份单元,用于执行步骤B,从所述第一地址开始获取原版本文件中的一个原文件块进行备份;
升级单元,用于执行步骤C,基于当前备份的原文件块,使用所述差分包生成目标文件块,其中,所述目标文件块的文件大小不超过所述单次升级量;
备份删除单元,用于执行步骤D,删除前一次备份的原文件块,并将本次备份的原文件块的结束地址作为新的第一地址;
继续备份单元,用于跳转至步骤B,并继续执行所述步骤B至步骤D,直至完成对原版本文件的升级。
可选的,单个原文件块的大小不超过所述单次升级量。
在一个实施例中,差分升级装置80还可以包括:
升级中断模块,用于若所述使用所述差分包对原版本文件进行升级的过程被中断,检测本地是否存在当前备份的原文件块;
第一地址更新模块,用于当存在当前备份的原文件块时,根据当前备份的原文件块确定原版本文件中未升级的部分在本地存储的起始地址,作为新的第一地址,并获取所述单次升级量,跳转至所述步骤B。
在一个实施例中,当前备份的原文件块中包括升级次数的信息,差分升级装置80还可以包括:
升级次数的信息读取模块,用于读取当前备份的原文件块中的升级次数的信息;
第一地址更新模块,还用于根据所述升级次数的信息确定原版本文件未升级的部分在本地存储的起始地址。
在一个实施例中,差分升级装置80还可以包括:升级错误模块,用于当不存在当前备份的原文件块时,结束升级。
在一个实施例中,差分升级装置80还可以包括:
额外指示文件检测模块,用于检测所述原版本文件内是否具有额外指示文件;
额外指示文件备份模块,用于当具有所述额外指示文件块时,备份所述额外指示文件。
可选的,所述单次升级量为本地可用存储空间扣除额外指示文件的文件大小之后的一半。
在一个实施例中,所述差分包包括额外指示文件的信息,额外指示文件检测模块,还用于从所述差分包中获取额外指示文件的信息,以检测所述原版本文件内是否具有额外指示文件。
可选的,所述额外指示文件块为在对所述原版本文件进行升级过程中会被覆盖的文件。
在一个实施例中,所述差分升级模块802中使用所述差分包对原版本文件进行每次升级时,生成补丁命令,所述补丁命令用于调用补丁工具执行升级操作。
可选的,所述补丁命令包括本次升级的目标文件写入的起始地址和文件大小。
关于图8所示差分升级装置80的工作原理、工作方式的更多内容,可以参照图1至图7所述差分升级方法的相关描述,这里不再赘述。
本发明实施例还提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述方法的步骤。所述存储介质可以是计算机可读存储介质,例如可以包括非挥发性存储器(non-volatile)或者非瞬态(non-transitory)存储器,还可以包括光盘、机械硬盘、固态硬盘等。
具体地,在本发明实施例中,所述处理器可以为中央处理单元(centralprocessing unit,简称CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,简称DSP)、专用集成电路(application specificintegrated circuit,简称ASIC)、现成可编程门阵列(field programmable gate array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,简称ROM)、可编程只读存储器(programmable ROM,简称PROM)、可擦除可编程只读存储器(erasable PROM,简称EPROM)、电可擦除可编程只读存储器(electricallyEPROM,简称EEPROM)或闪存。易失性存储器可以是随机存取存储器(random accessmemory,简称RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,简称RAM)可用,例如静态随机存取存储器(staticRAM,简称SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronousDRAM,简称SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,简称DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,简称ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,简称SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,简称DR RAM)。
本发明实施例还提供了一种计算机设备,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述方法的步骤。所述计算机设备包括但不限于手机、计算机、平板电脑、服务器或者服务器集群等设备。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,表示前后关联对象是一种“或”的关系。
本申请实施例中出现的“多个”是指两个或两个以上。
本申请实施例中出现的第一、第二等描述,仅作示意与区分描述对象之用,没有次序之分,也不表示本申请实施例中对设备个数的特别限定,不能构成对本申请实施例的任何限制。
本申请实施例中出现的“连接”是指直接连接或者间接连接等各种连接方式,以实现设备间的通信,本申请实施例对此不做任何限定。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (15)
1.一种差分升级方法,其特征在于,所述方法包括:
获取用于版本升级的差分包;
在使用所述差分包对原版本文件进行升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定;
所述使用所述差分包对原版本文件进行升级,包括下述步骤:
步骤A,确定第一地址,所述第一地址的初始值为所述原版本文件在本地存储的起始地址;
步骤B,从所述第一地址开始获取原版本文件中的一个原文件块进行备份;步骤C,基于当前备份的原文件块,使用所述差分包生成目标文件块,其中,所述目标文件块的文件大小不超过所述单次升级量;
步骤D,删除前一次备份的原文件块,并将本次备份的原文件块的结束地址作为新的第一地址;
跳转至步骤B,并继续执行所述步骤B至步骤D,直至完成对原版本文件的升级;
其中,在首次升级时,所述当前备份的原文件块为原版本文件在本地存储的起始地址开始的第一个原文件块;从第二次升级开始,所述当前备份的原文件块为两块:本次备份的文件块以及上一次备份的文件块。
2.根据权利要求1所述的方法,其特征在于,在首次升级前,检测本地可用存储空间,以确定所述单次升级量。
3.根据权利要求1所述的方法,其特征在于,单个原文件块的大小不超过所述单次升级量。
4.根据权利要求1所述的方法,其特征在于,若所述使用所述差分包对原版本文件进行升级的过程被中断,检测本地是否存在当前备份的原文件块;当存在当前备份的原文件块时,根据当前备份的原文件块确定原版本文件中未升级的部分在本地存储的起始地址,作为新的第一地址,并获取所述单次升级量;
跳转至所述步骤B。
5.根据权利要求4所述的方法,其特征在于,当前备份的原文件块中包括升级次数的信息,所述方法还包括:
读取当前备份的原文件块中的升级次数的信息;
所述根据当前备份的原文件块确定原版本文件未升级的部分在本地存储的起始地址,包括:
根据所述升级次数的信息确定原版本文件未升级的部分在本地存储的起始地址。
6.根据权利要求4所述的方法,其特征在于,所述检测本地是否存在当前备份的原文件块之后,还包括:
当不存在当前备份的原文件块时,结束升级。
7.根据权利要求2所述的方法,其特征在于,所述使用所述差分包对原版本文件进行升级之前,还包括:
检测所述原版本文件内是否具有额外指示文件;
当具有所述额外指示文件块时,备份所述额外指示文件。
8.根据权利要求7所述的方法,其特征在于,所述单次升级量为本地可用存储空间扣除额外指示文件的文件大小之后的一半。
9.根据权利要求7所述的方法,其特征在于,所述差分包包括额外指示文件的信息,所述检测所述原版本文件内是否具有额外指示文件,包括:
从所述差分包中获取额外指示文件的信息,以检测所述原版本文件内是否具有额外指示文件。
10.根据权利要求7至9任一项所述的方法,其特征在于,所述额外指示文件块为在对所述原版本文件进行升级过程中会被覆盖的文件。
11.根据权利要求1所述的方法,其特征在于,所述使用所述差分包对原版本文件进行每次升级时,生成补丁命令,所述补丁命令用于调用补丁工具执行升级操作。
12.根据权利要求11所述的方法,其特征在于,所述补丁命令包括本次升级的目标文件写入的起始地址和文件大小。
13.一种差分升级装置,其特征在于,所述装置包括:
差分包获取模块,用于获取用于版本升级的差分包;
差分升级模块,用于在使用所述差分包对原版本文件进行升级时,将升级操作分为一次或多次,每次升级时生成的目标文件的大小不超过单次升级量,其中,所述单次升级量在首次升级前确定;
所述差分升级模块包括:
第一地址确定单元,用于执行步骤A,确定第一地址,所述第一地址的初始值为所述原版本文件在本地存储的起始地址;
备份单元,用于执行步骤B,从所述第一地址开始获取原版本文件中的一个原文件块进行备份;
升级单元,用于执行步骤C,基于当前备份的原文件块,使用所述差分包生成目标文件块,其中,所述目标文件块的文件大小不超过所述单次升级量;
备份删除单元,用于执行步骤D,删除前一次备份的原文件块,并将本次备份的原文件块的结束地址作为新的第一地址;
继续备份单元,用于跳转至步骤B,并继续执行所述步骤B至步骤D,直至完成对原版本文件的升级;
其中,在首次升级时,所述当前备份的原文件块为原版本文件在本地存储的起始地址开始的第一个原文件块;从第二次升级开始,所述当前备份的原文件块为两块:本次备份的文件块以及上一次备份的文件块。
14.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行权利要求1至12任一项所述方法的步骤。
15.一种计算机设备,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序时执行权利要求1至12中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010872670.8A CN111796856B (zh) | 2020-08-26 | 2020-08-26 | 差分升级方法及装置、存储介质、计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010872670.8A CN111796856B (zh) | 2020-08-26 | 2020-08-26 | 差分升级方法及装置、存储介质、计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111796856A CN111796856A (zh) | 2020-10-20 |
CN111796856B true CN111796856B (zh) | 2022-10-11 |
Family
ID=72834039
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010872670.8A Active CN111796856B (zh) | 2020-08-26 | 2020-08-26 | 差分升级方法及装置、存储介质、计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111796856B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112148355B (zh) * | 2020-10-21 | 2021-09-14 | 红石阳光(北京)科技股份有限公司 | 一种基于深度学习的系统差分升级方法及装置 |
CN112286565B (zh) * | 2020-10-30 | 2023-03-10 | 浙江正泰中自控制工程有限公司 | 一种基于存储容器的嵌入式系统差分升级方法 |
CN112732318A (zh) * | 2021-01-12 | 2021-04-30 | 武汉光庭信息技术股份有限公司 | 一种单片机固件升级方法 |
CN112732319B (zh) * | 2021-01-22 | 2024-02-23 | 百度在线网络技术(北京)有限公司 | 文件升级方法、装置、设备和存储介质 |
CN113282325B (zh) * | 2021-06-17 | 2022-08-19 | 北京紫光展锐通信技术有限公司 | 升级文件系统的方法及装置、存储介质、计算设备 |
CN113590168B (zh) * | 2021-07-29 | 2024-03-01 | 百度在线网络技术(北京)有限公司 | 嵌入式设备升级方法、装置、设备、介质及程序产品 |
CN116302030A (zh) * | 2023-03-09 | 2023-06-23 | 上海对外经贸大学 | 一种安全的嵌入式系统固件分块差分升级方法及系统 |
CN116932015B (zh) * | 2023-09-18 | 2023-12-15 | 中汽智联技术有限公司 | 一种车辆软件远程升级方法、装置、系统及电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124451A (zh) * | 2019-12-24 | 2020-05-08 | 山东有人信息技术有限公司 | 一种分布式备份升级方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693145B (zh) * | 2012-05-31 | 2015-02-25 | 红石阳光(北京)科技有限公司 | 用于嵌入式系统的差分升级方法 |
CN104657161A (zh) * | 2013-11-21 | 2015-05-27 | 中兴通讯股份有限公司 | 移动终端固件更新方法及装置 |
CN111124464B (zh) * | 2019-11-19 | 2024-05-17 | 红石阳光(北京)科技股份有限公司 | 一种用于嵌入式系统的差分升级的方法、系统及计算机可读存储介质 |
CN111104148B (zh) * | 2019-12-26 | 2023-06-16 | 红石阳光(北京)科技股份有限公司 | 集成有Linux和android两系统的芯片平台的升级方法、系统及可读存储介质 |
CN111475195A (zh) * | 2020-03-24 | 2020-07-31 | 普联技术有限公司 | 一种固件升级方法、装置和系统 |
-
2020
- 2020-08-26 CN CN202010872670.8A patent/CN111796856B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124451A (zh) * | 2019-12-24 | 2020-05-08 | 山东有人信息技术有限公司 | 一种分布式备份升级方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111796856A (zh) | 2020-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111796856B (zh) | 差分升级方法及装置、存储介质、计算机设备 | |
KR100584338B1 (ko) | 소프트웨어 업데이트 방법 및 시스템 | |
US7275153B2 (en) | Booting and boot code update system using boot strapper code to select between a loader and a duplicate backup loader | |
EP2998861B1 (en) | Implementing and deleting method and device for intelligent terminal multi-operation system | |
CN112162773B (zh) | 差分升级方法及装置、存储介质、终端 | |
US7584379B2 (en) | Mobile terminal and software update method | |
CN109086078B (zh) | 安卓系统升级方法、装置、服务器及移动终端 | |
KR101555210B1 (ko) | 휴대용 단말기에서 내장 대용량 메모리를 이용한 컨텐츠 다운로드 방법 및 장치 | |
WO2022095758A1 (zh) | 终端升级的方法及终端 | |
CN114265616B (zh) | 操作系统的升级方法、电子设备及存储介质 | |
EP4270299A1 (en) | Operating system upgrade method, electronic device, and storage medium | |
CN112181471A (zh) | 差分升级方法及装置、存储介质、计算机设备 | |
CN112306368B (zh) | 一种emmc扩展用户数据分区的方法及装置 | |
WO2022188690A1 (zh) | 升级电子设备的方法及装置 | |
CN115756561A (zh) | 软件升级方法、装置、计算机设备以及存储介质 | |
US20160085456A1 (en) | Data read apparatus, data read method, and storage medium storing data read program | |
WO2019041891A1 (zh) | 升级包的生成方法及装置 | |
CN112463170A (zh) | 云平台上制作镜像的方法、装置、设备及存储介质 | |
CN111913733A (zh) | 制作自动升级包方法、装置、计算机设备和存储介质 | |
CN107436783B (zh) | 一种用于移动终端的差分升级方法、存储介质及移动终端 | |
CN110309018B (zh) | 充电设备系统切换方法、充电设备及可读存储介质 | |
CN113766554A (zh) | 获取WiFi校准数据的方法、装置及WiFi设备校准测试系统 | |
CN113190244A (zh) | 无线模组升级的方法、装置、计算机设备和存储介质 | |
US10860533B1 (en) | File size as an indicator of file properties | |
CN117270914B (zh) | 一种终端设备的系统升级方法、装置、设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |