掌桥专利:专业的专利平台
掌桥专利
首页

一种分块差分升级包生成和分块差分升级方法及装置

文献发布时间:2023-06-19 18:37:28


一种分块差分升级包生成和分块差分升级方法及装置

技术领域

本发明涉及固件升级技术领域,具体涉及一种分块差分升级包生成和分块差分升级方法及装置。

背景技术

当前固件升级的主要方法有两大类,称之为A类和B类。其中:A类升级的方法是在设备侧从上位机或平台下载目标升级固件到设备侧,设备侧直接把目标升级固件启动运行,称为copy升级;B类升级的方法是在平台或上位机先制作升级补丁,设备侧从上位机或平台侧下载升级补丁,下载完成后,根据升级补丁和原始文件还原出目标升级固件,称为差分升级。

A类升级方法的缺点包括:下载过程时间长,需要全部下载完目标文件,网络覆盖不好或带宽受限时,下载时间长,单次全部下载完的稳定性差;升级过程对硬件资源需求大,要求设备侧flash空间至少具备2倍的固件存储空间。B类升级方法目前已公开的方案可以部分克服A类方法中“下载过程时间长”的不足,但没有解决“对硬件资源需求大”的不足,通过特殊的压缩方法可以降低对ram空间大小依赖,但没有解决对flash空间的要求较高的问题。

发明内容

因此,本发明要解决的技术问题在于克服现有差分升级方法对硬件存储资源需求大的缺陷,从而提供一种分块差分升级包生成和分块差分升级方法及装置。

根据第一方面,本发明实施例公开了一种分块差分升级包生成方法,包括:获取待升级固件的源固件和目标升级固件;计算所述源固件和所述目标升级固件的全量差分包,所述全量差分包包括控制信息、差分信息以及独有信息;根据目标分块大小对源固件数据以及目标升级固件数据进行分块处理,得到多个源固件的分块数据和多个目标升级固件的分块数据,每一个源固件的分块数据包括对应的分块标识,每一个目标升级固件的分块数据包括对应的分块标识;获取所述控制信息中的多个控制三元组命令,每一个控制三元组命令包括第一控制信息以及第二控制信息,所述第一控制信息表征所述源固件与所述目标升级固件的相同信息和差分信息,所述第二控制信息表征所述目标升级固件的独有信息;根据所述每一个目标升级固件分块对应的标识、所述每一个源固件分块对应的标识、所述目标分块大小以及操作步长,对所述每一个第一控制信息进行分解,得到每一个目标升级固件的分块对应的第三控制信息,所述第三控制信息表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息;根据所述每一个目标升级固件的分块数据对应的分块标识、所述目标分块大小以及操作步长,对所述每一个第二控制信息进行分解,得到每一个目标升级固件的分块对应的第四控制信息,所述第四控制信息用于表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息;根据所述第三控制信息、所述第四控制信息、所述差分信息以及独有信息,确定所述每一个目标升级固件的分块对应的差分信息和独有信息;根据所述第三控制信息、第四控制信息以及所述每一个目标升级固件的分块对应的差分信息和独有信息,生成所述每一个目标升级固件的分块对应的差分升级包;根据所述第三控制信息确定每一个目标升级固件分块的升级顺序;对所述每一个目标升级固件的分块对应的差分升级包以及所述升级顺序进行打包,得到所述目标升级固件对应的差分升级包。

可选地,所述根据目标分块大小对源固件数据以及目标升级固件数据进行分块处理,得到多个源固件的分块数据和多个目标升级固件的分块数据之前,所述方法还包括:获取设备侧的目标处理器的内存大小以及设备侧的目标flash存储器的最小擦除单位;根据所述目标处理器的内存大小以及目标flash存储器的最小擦除单位确定所述目标分块大小。

可选地,根据所述每一个目标升级固件分块对应的标识、所述每一个源固件分块对应的标识、所述目标分块大小以及操作步长,对所述每一个第一控制信息进行分解,得到每一个目标升级固件的分块对应的第三控制信息,包括:根据所述第一控制信息的当前可操作字节数、当前操作的源固件分块内的剩余字节数以及当前操作的目标升级固件分块内的剩余字节数,确定所述第一控制信息对应的当前分解步长;根据所述第一控制信息对应的当前分解步长,对所述第一控制信息进行分解得到第一分解结果,并记录在对所述第一控制信息的分解过程中每一步分解操作对应源固件的分块标识、对应目标升级固件的分块标识、在所述源固件中的当前第一位置偏移指针、在所述目标升级固件中的当前第二位置偏移指针以及在所述全量差分包中差分信息中的当前第三位置偏移指针;根据第一分解结果、所述第一位置偏移指针、所述对应源固件的分块标识、对应目标升级固件的分块标识、所述第一位置偏移指针、所述第二位置偏移指针以及所述第三位置偏移指针确定所述第三控制信息;

根据所述每一个目标升级固件的分块数据对应的分块标识、所述目标分块大小以及操作步长,对所述每一个第二控制信息进行分解,得到每一个目标升级固件的分块对应的第四控制信息,包括:根据所述第二控制信息的当前可操作字节数以及当前操作的目标升级固件分块内的剩余字节数,确定所述第二控制信息对应的当前分解步长;根据所述第二控制信息对应的当前分解步长对所述第二控制信息进行分解得到第二分解结果,并记录在对所述第二控制信息的分解过程中每一步分解操作对应目标升级固件的分块标识、在所述目标升级固件中的当前第四位置偏移指针以及在所述全量差分包中独有信息中的当前第五位置偏移指针;根据第二分解结果、所述第四位置偏移指针、第五位置偏移指针以及目标升级固件的分块标识确定所述第四控制信息。

可选地,所述根据所述第三控制信息确定每一个目标升级固件分块的升级顺序,包括:确定第三控制信息对应的目标升级固件的分块标识以及源固件的分块标识;根据所述第三控制信息对应的目标升级固件的分块标识以及源固件的分块标识,确定每一个目标升级固件的分块标识与源固件的分块标识之间的对应关系;根据所述目标升级固件的分块标识和源固件的分块标识之间的对应关系对所述目标升级固件的分块标识和源固件的分块标识进行拓扑排序;根据拓扑排序结果,确定每一个目标升级固件分块的升级顺序。

可选地,所述方法还包括:利用预设模拟程序对所述目标升级固件对应的差分升级包对所述源固件进行升级模拟操作。

根据第二方面,本发明实施例还公开了一种分块差分升级方法,包括:获取目标差分升级包,所述目标差分升级包通过如第一方面或第一方面任一可选实施方式所述的分块差分升级包生成方法得到;读取所述目标差分升级包中的每一个目标升级固件分块的升级顺序信息;根据所述每一个目标升级固件分块的升级顺序信息,在待升级固件中执行每一个目标升级固件分块对应的升级命令,对待升级固件进行升级。

根据第三方面,本发明实施例还公开了一种分块差分升级包生成装置,包括:第一获取模块,用于获取待升级固件的源固件和目标升级固件;计算模块,用于计算所述源固件和所述目标升级固件的全量差分包,所述全量差分包包括控制信息、差分信息以及独有信息;分块处理模块,用于根据目标分块大小对源固件数据以及目标升级固件数据进行分块处理,得到多个源固件的分块数据和多个目标升级固件的分块数据,每一个源固件的分块数据包括对应的分块标识,每一个目标升级固件的分块数据包括对应的分块标识;第二获取模块,用于获取所述控制信息中的多个控制三元组命令,每一个控制三元组命令包括第一控制信息以及第二控制信息,所述第一控制信息表征所述源固件与所述目标升级固件的相同信息和差分信息,所述第二控制信息表征所述目标升级固件的独有信息;第一分解模块,用于根据所述每一个目标升级固件分块对应的标识、所述每一个源固件分块对应的标识、所述目标分块大小以及操作步长,对所述每一个第一控制信息进行分解,得到每一个目标升级固件的分块对应的第三控制信息,所述第三控制信息表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息;第二分解模块,用于根据所述每一个目标升级固件的分块数据对应的分块标识、所述目标分块大小以及操作步长,对所述每一个第二控制信息进行分解,得到每一个目标升级固件的分块对应的第四控制信息,所述第四控制信息用于表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息;第一确定模块,用于根据所述第三控制信息、所述第四控制信息、所述差分信息以及独有信息,确定所述每一个目标升级固件的分块对应的差分信息和独有信息;生成模块,用于根据所述第三控制信息、第四控制信息以及所述每一个目标升级固件的分块对应的差分信息和独有信息,生成所述每一个目标升级固件的分块对应的差分升级包;第二确定模块,用于根据所述第三控制信息确定每一个目标升级固件分块的升级顺序;打包模块,用于对所述每一个目标升级固件的分块对应的差分升级包以及所述升级顺序进行打包,得到所述目标升级固件对应的差分升级包。

根据第四方面,本发明实施例还公开了一种分块差分升级装置,包括:第三获取模块,用于获取目标差分升级包,所述目标差分升级包通过如第一方面或第一方面任一可选实施方式所述的分块差分升级包生成方法得到;读取模块,用于读取所述目标差分升级包中的每一个目标升级固件分块的升级顺序信息;升级模块,用于根据所述每一个目标升级固件分块的升级顺序信息,在待升级固件中执行每一个目标升级固件分块对应的升级命令,对待升级固件进行升级。

根据第五方面,本发明实施例还公开了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行如第一方面或第一方面任一可选实施方式所述的分块差分升级包生成方法的步骤,或执行如第二方面所述的分块差分升级方法的步骤。

根据第六方面,本发明实施方式还公开了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面或第一方面任一可选实施方式所述的分块差分升级包生成方法的步骤,或实现如第二方面所述的分块差分升级方法的步骤。

本发明技术方案,具有如下优点:

本发明提供的分块差分升级包生成方法/装置,通过对待升级源固件和目标升级的固件全量差分包中的控制信息进行分解,确定每一个目标升级固件的分块在进行升级时对应的第三控制信息和第四控制信息,根据第三控制信息以及第四控制信息生成每一个目标升级固件的分块对应的差分升级包,根据第三控制信息确定每一个目标升级固件分块对应的升级顺序,对每一个目标升级固件的分块对应的差分升级包以及升级顺序进行打包,得到目标升级固件对应的差分升级包,该目标升级固件对应的差分升级包为极小差分包,该差分包的大小可小于源固件或目标固件的10%,后续在根据目标升级固件对应的差分升级包对源固件进行升级时,可以读取差分升级包中每一个目标升级固件分块对应的升级顺序,并根据升级顺序执行对应分块对应的控制信息,依次还原每一个目标升级固件分块,实现对源固件的升级,升级过程中可以在源固件的基础上进行覆盖,需要的全部内存只取决于分块大小,不依赖于源固件和目标固件的大小,不需要使用额外的空间,解决了现有技术中差分升级方法对硬件存储资源需求大的缺陷。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中分块差分升级包生成方法的一个具体示例的流程图;

图2A为本发明实施例中分块差分升级包生成方法的一个具体示例的示意图;

图2B为本发明实施例中分块差分升级包生成方法的一个具体示例的示意图;

图3为本发明实施例中分块差分升级包生成方法的一个具体示例的示意图;

图4为本发明实施例中分块差分升级方法的一个具体示例的流程图;

图5为本发明实施例中分块差分升级包生成装置的一个具体示例的原理框图;

图6为本发明实施例中分块差分升级装置的一个具体示例的原理框图;

图7为本发明实施例中电子设备的一个具体示例图。

具体实施方式

下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,还可以是两个元件内部的连通,可以是无线连接,也可以是有线连接。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。

本发明实施例公开了一种分块差分升级包生成方法,可应用于上位机或差分升级平台系统,在上位机或差分升级平台系统上集成有待升级设备侧的所有历史固件数据以及可升级固件数据;如图1所示,该方法包括如下步骤:

步骤101,获取待升级固件的源固件和目标升级固件。

示例性地,固件可以是存储在单片机或MCU可操作的存储器上的代码,为编译后的二进制文件,可对硬件进行操作,通常称为:Firmware。源固件可以是升级之前的固件,也可称为旧固件;目标升级固件可以是升级之后的固件,也可称为新固件。

步骤102,计算所述源固件和所述目标升级固件的全量差分包,所述全量差分包包括控制信息、差分信息以及独有信息。

示例性地,全量差分包可以是通过差法算法制作的目标升级固件和源固件之间的差异文件,称为补丁文件(Patch),由上位机或平台系统完成。差分算法可以是提取源固件与目标升级固件之间差异信息的方法或步骤,常用的差分算法有bsdiff和vcdiff两种方式,且两种算法在完成匹配搜索后都可以进行二次压缩,针对固件二进制文件的特征,都可完成高效的匹配。本申请实施例中,可以采用bsdiff差分算法来完成全量差分信息的提取,源固件和目标升级固件经过bsdiff算法后生成了一个补丁文件(全量差分信息),补丁文件的作用是:当补丁文件传输到待升级的设备后,设备根据此补丁文件和源固件即可还原目标升级固件。补丁文件由三部分信息组成:控制信息、差分信息和新固件独有信息,其中:控制信息由一系列命令组成,每条命令由CMD(X,Y,Z)固定格式的三元组,补丁文件的构成如下表1所示。

表1

步骤103,根据目标分块大小对源固件数据以及目标升级固件数据进行分块处理,得到多个源固件的分块数据和多个目标升级固件的分块数据,每一个源固件的分块数据包括对应的分块标识,每一个目标升级固件的分块数据包括对应的分块标识。

示例性地,目标分块大小可以是任意大小,本申请实施例对目标分块大小的具体内容不做限定,只要可以实现对源固件和目标升级固件的分块即可,本领域技术人员可根据需求确定。本申请实施例中,可以根据目标分块大小对源固件和目标升级固件进行分块处理,例如,当目标分块大小为512个字节,源固件的大小为4672个字节,目标升级固件的大小为5580个字节,则将源固件和升级固件按照512个字节进行分块,并记录每一个源固件分块对应的分块标识以及每一个目标升级固件分块对应的分块标识;每一个源固件分块对应的分块标识可以是对应的分块编号,每一个目标升级固件分块对应的分块标识可以是对应的分块编号。

步骤104,获取所述控制信息中的多个控制三元组命令,每一个控制三元组命令包括第一控制信息以及第二控制信息,所述第一控制信息表征所述源固件与所述目标升级固件的相同信息和差分信息,所述第二控制信息表征所述目标升级固件的独有信息。

示例性地,本申请实施例中,第一控制信息可以是控制三元组(X,Y,Z)中的X,X的含义是从差分信息(D1D2D3…)中读取X个字节与旧固件的X字节相加得到新固件的内容。第二控制信息可以是控制三元组(X,Y,Z)中的Y,Y的含义是从独有信息(E1E2E3…)中拷贝Y个字节数据增加当前位置作为新固件的内容。

步骤105,根据所述每一个目标升级固件分块对应的标识、所述每一个源固件分块对应的标识、所述目标分块大小以及操作步长,对所述每一个第一控制信息进行分解,得到每一个目标升级固件的分块对应的第三控制信息,所述第三控制信息表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息。

示例性地,操作步长可以是对第一控制信息进行分解操作时,每一步操作对应的操作字节数,本申请实施例中,将第一控制信息分解为每一个目标升级固件分块中对应的还原命令,例如,第一个控制三元组的X的操作字节数为1671个字节,每块大小为512,所以X在执行时会跨越3个分块,涉及到4个分块空间,因此在对X进行分解时,要将其分解为四个块空间中每一个分块对应的操作指令。

步骤106,根据所述每一个目标升级固件的分块数据对应的分块标识、所述目标分块大小以及操作步长,对所述每一个第二控制信息进行分解,得到每一个目标升级固件的分块对应的第四控制信息,所述第四控制信息用于表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息。

示例性地,操作步长可以是对第二控制信息进行分解操作时,每一步操作对应的操作字节数,本申请实施例中,将第二控制信息分解为每一个目标升级固件分块中对应的还原命令,例如,第一个控制三元组的Y的操作字节数为1671个字节,每块大小为512,所以Y在执行时会跨越3个分块,涉及到4个分块空间,因此在对Y进行分解时,要将其分解为四个块空间中每一个分块对应的操作指令。

步骤107,根据所述第三控制信息、所述第四控制信息、所述差分信息以及独有信息,确定所述每一个目标升级固件的分块对应的差分信息和独有信息。

示例性地,第三控制信息是根据目标升级固件与源固件之间的相同信息和差分信息而生成的每一个目标升级固件分块对应的控制指令,则根据第三控制信息和全量差分包中的差分信息可以确定每一个目标升级固件分块差分信息;第四控制信息是根据目标升级固件的独有信息而生成的每一个目标升级固件分块对应的控制指令,则根据第四控制信息和全量差分包中的独有信息可以确定每一个目标升级固件分块独有信息。

步骤108,根据所述第三控制信息、第四控制信息以及所述每一个目标升级固件的分块对应的差分信息和独有信息,生成所述每一个目标升级固件的分块对应的差分升级包。示例性地,后续可根据每一个目标升级固件的分块对应的差分升级包,执行对应分块的第三控制信息和第四控制信息,实现对每一个目标升级固件的分块的数据还原。

步骤109,根据所述第三控制信息确定每一个目标升级固件分块的升级顺序。

示例性地,本申请实施例中,后续通过每一个目标升级固件的分块对应的差分升级包对目标升级固件进行还原时,可以在源固件上进行覆盖,有效减小固件在升级过程中Flash存储器空间的需求,但是在执行相应的控制信息对目标升级固件进行还原时,需要依赖源固件中的信息,因此需要确定每一个目标升级固件分块的升级顺序才能在源固件上进行覆盖,实现对目标升级固件的还原操作。第三控制信息中包含还原每一个目标升级固件分块的操作命令,可以根据第三控制命令确定还原每一个目标升级固件分块时所依赖的源固件的信息,进而可以确定每一个目标升级固件分块所依赖的源固件分块;根据每一个目标升级固件所依赖源固件分块,确定每一个目标升级固件分块的升级顺序,该升级顺序可人为确定,也可通过与预设的一些排序算法确定。

步骤110,对所述每一个目标升级固件的分块对应的差分升级包以及所述升级顺序进行打包,得到所述目标升级固件对应的差分升级包。

示例性地,上位机或平台系统得到目标升级固件对应的差分升级包,后续可将该差分升级包发送到待升级的设备,便于待升级设备根据接收到的差分升级包执行对应的源固件的升级操作。

本申请实施例中,得到的目标升级固件对应的差分升级包在后续进行固件升级时,可以应用于Flash空间小的物联网设备,解决设备侧极小资源条件下的固件升级(flash小于32K,内存小于1K)。若源固件的大小为S1,目标升级固件的大小为S2,补丁文件大小为S3,本实施例中得到的差分升级包在升级过程中,设备侧对flash空间需求为:S2+S3,目前已公开的方案中设备侧对flash侧的空间需求为(S1+S2+S3)。以普通MCU的硬件配置:S1=122K,S2=120K,S3=15K为例计算:本实施例得到的差分升级包在后续升级中需要的flash空间大小为:S2+S3=135K;其他现有方案需要的flash空间大小为:S1+S2+S3=257K。

本发明提供的分块差分升级包生成方法,通过对待升级源固件和目标升级的固件全量差分包中的控制信息进行分解,确定每一个目标升级固件的分块在进行升级时对应的第三控制信息和第四控制信息,根据第三控制信息以及第四控制信息生成每一个目标升级固件的分块对应的差分升级包,根据第三控制信息确定每一个目标升级固件分块对应的升级顺序,对每一个目标升级固件的分块对应的差分升级包以及升级顺序进行打包,得到目标升级固件对应的差分升级包,该目标升级固件对应的差分升级包为极小差分包,该差分包的大小可小于源固件或目标固件的10%,后续在根据目标升级固件对应的差分升级包对源固件进行升级时,可以读取差分升级包中每一个目标升级固件分块对应的升级顺序,并根据升级顺序执行对应分块对应的控制信息,依次还原每一个目标升级固件分块,实现对源固件的升级,升级过程中可以在源固件的基础上进行覆盖,需要的全部内存只取决于分块大小,不依赖于源固件和目标固件的大小,不需要使用额外的空间,解决了现有技术中差分升级方法对硬件存储资源需求大的缺陷。

作为本发明一个可选实施方式,步骤103之前,该方法还包括:获取设备侧的目标处理器的内存大小以及设备侧的目标flash存储器的最小擦除单位;根据所述目标处理器的内存大小以及目标flash存储器的最小擦除单位确定所述目标分块大小。

示例性地,本申请实施例中,目标分块大小的设置会影响最终差分升级包的大小,分块越大,差分升级包越小,但对设备侧的内存大小要求也大,分块大小设置必须满足一下原则:满足设备侧的内存需求、以设备侧的flash擦除单位为最小单位。因此,为达到最好的差分效果,假设设备侧MCU的内存为size_mem,设备侧存储器的擦除单位为size_flash_erasor,本申请提供设置分块大小(block_size)的计算公式:block_size=M*size_flash_erasor,(其中M为正整数);M=(size_mem/4+size_flash_erasor-1)/size_flash_erasor;例如对于资源受限的MCU,size_mem=8192B,size_flash_erasor=512B,经计算M=4,block_size=2048B。

作为本发明一个可选实施方式,步骤105,包括:

根据所述第一控制信息的当前可操作字节数、当前操作的源固件分块内的剩余字节数以及当前操作的目标升级固件分块内的剩余字节数,确定所述第一控制信息对应的当前分解步长。

示例性地,第一控制信息的当前可操作字节数可以是第一控制信息的当前剩余的操作字节数;当前操作的源固件分块内的剩余字节数可以是源固件分块中的当前操作位置(old_from)到该分块下边界(old_blk_upper_bound)的剩余长度,具体可以如图2A所示;当前操作的目标升级固件分块内的剩余字节数可以是目标升级固件分块内的当前操作位置(new_from)到该分块下边界(new_blk_upper_bound)的剩余长度,具体可以如图2B所示。当前操作步长的选择原则可以是从第一控制信息的当前可操作字节数、当前操作的源固件分块内的剩余字节数以及当前操作的目标升级固件分块内的剩余字节数这三个变量中选择一个最小值作为当前分解步长。

根据所述第一控制信息对应的当前分解步长,对所述第一控制信息进行分解得到第一分解结果,并记录在对所述第一控制信息的分解过程中每一步分解操作对应源固件的分块标识、对应目标升级固件的分块标识、在所述源固件中的当前第一位置偏移指针、在所述目标升级固件中的当前第二位置偏移指针以及在所述全量差分包中差分信息中的当前第三位置偏移指针。

示例性地,在对第一控制信息进行分解时,可以将第一控制信息的当前操作长度减去当前分解步长,并记录每一步的分解步长,直到第一控制信息的当前操作长度为0,则完成了对第一控制信息的分解。如果第一控制信息没有分解完,但是当前操作的目标升级固件分块和/或源固件分块剩余字节数为0,则要偏移到下一个分块进行分解操作。在分解过程中,还需记录每一步分解操作涉及到的目标升级固件对应的分块标识(new_blk_idx)、源固件的分块标识(old_blk_idx)、在源固件中的偏移位置old_from(第一位置偏移指针)、在目标升级固件中的偏移位置new_from(第二位置偏移指针)以及在补丁文件(全量差分信息)中的偏移位置diff_from(第三位置偏移指针)。

根据第一分解结果、所述第一位置偏移指针、所述对应源固件的分块标识、对应目标升级固件的分块标识、所述第一位置偏移指针、所述第二位置偏移指针以及所述第三位置偏移指针确定所述第三控制信息。

示例性地,本申请实施例中,在确定第三控制信息时,涉及到命令重建的过程,当第一分解结果对应的控制信息包含的控制命令的类型进行命令重建;分解X(第一控制信息)产生的命令类型为DIFF的动作,细分为两种命令类型:copy(拷贝)和diff(差分)。细分原则为:若第一分解结果对应的差分信息中涉及到数据(长度为step,偏移地址为“命令细节”中差分块的偏移)为全0,即本段长度为step的差分信息为全0,相当于不需要差分,只依赖于老固件,此时,把该命令定义为copy命令;若差分信息中涉及的数据不全为0,即该分解后的控制信息跟差分信息和源固件都有关系,把本命令定义为diff命令。将a=0定义为copy命令,a=1定义为diff命令,第一分解结果对应的控制信息的操作步长step用b来标识,第一分解结果对应的控制信息在源固件中的偏移用c来标识,得到第三控制信息(a,b,c)。当a=0时,(a,b,c)的含义为定位到源固件的c位置,从源固件中拷贝b个字节;当a=1时,(a,b,c)的含义为定位到源固件的c位置,从源固件中拷贝b个字节与差分信息中的b个字节相加。

步骤106,包括:

根据所述第二控制信息的当前可操作字节数以及当前操作的目标升级固件分块内的剩余字节数,确定所述第二控制信息对应的当前分解步长。

示例性地,本申请实施例中,Y(第二控制信息)的含义为从独有信息中读取Y个字节的数据添加到当前操作位置作为目标升级固件的内容,因此,第二控制信息的分解不涉及源固件,因此,只需要根据第二控制信息的当前可操作字节数以及当前操作的目标升级固件分块内的剩余字节数即可确定当前分解步长。第二控制信息对应的当前分解步长的选择原则为:将第二控制信息的当前可操作字节数以及当前操作的目标升级固件分块内的剩余字节数中的较小值作为第二控制信息对应的当前分解步长。

根据所述第二控制信息对应的当前分解步长对所述第二控制信息进行分解得到第二分解结果,并记录在对所述第二控制信息的分解过程中每一步分解操作对应目标升级固件的分块标识、在所述目标升级固件中的当前第四位置偏移指针以及在所述全量差分包中独有信息中的当前第五位置偏移指针。

示例性地,根据第二控制信息对应的当前分解步长对第二控制信息进行分解,并记录每一步分解操作在目标升级固件中的处理的位置偏移new_from(第四位置偏移指针)以及专属快的位置偏移extra_from(第五位置偏移指针),每次处理一个步长后,记录对应目标升级固件的分块标识。

根据第二分解结果、所述第四位置偏移指针、第五位置偏移指针以及目标升级固件的分块标识确定所述第四控制信息。

示例性地,本申请实施例中,可以将第二分解结果对应的控制命令操作类型定义为EXTRA动作,将a=2定义为extra命令,第二分解结果对应的控制信息的操作步长step用b来标识,得到第三控制信息(a,b,c),其中c=0,因为第三控制信息于老固件无关。当a=2时,(a,b,c)的含义为从对应的独有信息中拷贝b个字节。

作为本发明一个可选实施方式,步骤109,包括:确定第三控制信息对应的目标升级固件的分块标识以及源固件的分块标识。示例性地,第三控制信息的内容包含对目标升级固件分块以及源固件分块的操作,可以确定第三控制命令对应的目标升级固件的分块标识以及源固件的分块标识。

根据所述第三控制信息对应的目标升级固件的分块标识以及源固件的分块标识,确定每一个目标升级固件的分块标识与源固件的分块标识之间的对应关系。示例性地,第三控制信息在执行时还原对应的目标升级固件分块时,会从对应的源固件中读取相应的信息,因此可以根据第三控制信息对应的目标升级固件的分块标识以及源固件的分块标识,确定每一个目标升级固件的分块标识与源固件的分块标识之间的对应关系。例如,目标升级固件分块10、7、以及6在还原时都需要从源固件分块0中获取相应的信息,则目标升级固件10、7、以及6与源固件分块0相对应。

根据所述目标升级固件的分块标识和源固件的分块标识之间的对应关系对所述目标升级固件的分块标识和源固件的分块标识进行拓扑排序。示例性地,例如,当目标升级固件的分块标识和源固件的分块标识之间的对应关系包括:

old blk idx(目标固件分块标识):0与new blk idx(目标固件分块标识):10、newblk idx:7以及new blk idx:6相对应;

old blk idx:2与new blk idx:11以及new blk idx:10相对应;

old blk idx:2与new blk idx:11以及new blk idx:10相对应;

old blk idx:3与new blk idx:10相对应;

old blk idx:4与new blk idx:10、new blk idx:8以及new blk idx:5相对应;

old blk idx:5与new blk idx:10相对应;

old blk idx:6与new blk idx:10、new blk idx:9以及new blk idx:8相对应;

old blk idx:7与new blk idx:11、new blk idx:10、new blk idx:9、new blkidx:8、new blk idx:6以及new blk idx:3相对应。

根据上述对应关系对目标升级固件的分块标识和源固件的分块标识进行拓扑排序,如图3所示,该图为有向图,顶点表示新固件分块标识以及源固件分块标识,边集表示新固件与源固件之间的对应关系,边的尾部为新固件分块的标识,头部为源固件分块的标识,用于标识新固件分块与源固件分块之间的对应关系。目标升级固件分块还原顺序可以转换为对此图进行拓扑排序,拓扑排序可能有多个结果序,任何一个结果序列,都可以作为固件还原的顺序,这样解决了新固件还原顺序问题,也解决了不使用额外空间在原固件上就地覆盖问题。

根据拓扑排序结果,确定每一个目标升级固件分块的升级顺序。示例性地,本申请实施例中,根据如图3所示的图进行拓扑排序后得到的其中一个序列为:11-->10-->2-->3-->5-->9-->8-->4-->6-->7-->0-->1,该顺序可以作为目标升级固件分块对应的还原顺序。

作为本发明一个可选实施方式,该方法还包括:利用预设模拟程序对所述目标升级固件对应的差分升级包对所述源固件进行升级模拟操作。

示例性地,预设模拟程序可以根据目标升级固件对应的差分升级包实现模拟升级。通过预设模拟程序对差分升级包中里的控制信息流进行模拟,模拟设备侧的还原动作,确保模拟生成的新固件与真实新固件的内容完全相同,若有任何异常本次生成的固件不可以作为升级使用。

本申请实施例中,目标升级固件对应的差分升级包需要进行国密SM4算法的加密并增加消息验证码(MAC码),保证固件的机密性和完整性。目标升级固件对应的差分升级包还需要增加原固件的CRC,确保设备侧的源固件与差分升级包对应的源固件是相同的。

本发明实施例还公开了一种分块差分升级方法,应用于物联网设备,如图4所示,该方法包括如下步骤:

步骤201,获取目标差分升级包,所述目标差分升级包通过上述实施例所述的分块差分升级包生成方法得到。示例性地,目标差分升级包可以是任一对可以对物联网设备中源固件实现差分升级的补丁文件。本申请实施例中,目标差分升级包通过无线或有线信道传输到设备端,传输过程由设备端发起首包握手,并带有请求包序号,保证以最短的时间下载完成,并具备断点(或断电)续传的能力。设备侧在收到完整的加密过的差分升级包后,调用国密SM4的安全解密服务,即可得到明文的差分升级包,并得到差分升级包的MAC_1(消息验证码),设备侧调用国密SM4的安全MAC服务,重新计算明文差分升级包的MAC_2,若MAC_1和MAC_2相同,则本差分文件没有被篡改过,证明可用。在得到明文的目标升级固件差分升级包后,得到差分升级包里的源固件CRC_1,并实时计算当前固件(源固件)的CRC,得到CRC_2,若CRC_1与CRC_2相同,则本差分升级包的版本匹配成功,可用于升级新版本固件。

步骤202,读取所述目标差分升级包中的每一个目标升级固件分块的升级顺序信息。

步骤203,根据所述每一个目标升级固件分块的升级顺序信息,在待升级固件中执行每一个目标升级固件分块对应的升级命令,对待升级固件进行升级。

本发明提供的一种分块差分升级方法,通过获取目标差分升级包,并根据目标差分升级包中包含的一个目标升级固件分块的升级顺序信息执行对应分块中的升级命令,实现对待升级固件的升级操作,升级过程中可以在源固件的基础上进行覆盖,需要的全部内存只取决于分块大小,不依赖于源固件和目标固件的大小,不需要使用额外的空间,解决了现有技术中差分升级方法对硬件存储资源需求大的缺陷。

本发明实施例还公开了一种分块差分升级包生成装置,如图5所示,该装置包括:第一获取模块301,用于获取待升级固件的源固件和目标升级固件;计算模块302,用于计算所述源固件和所述目标升级固件的全量差分包,所述全量差分包包括控制信息、差分信息以及独有信息;分块处理模块303,用于根据目标分块大小对源固件数据以及目标升级固件数据进行分块处理,得到多个源固件的分块数据和多个目标升级固件的分块数据,每一个源固件的分块数据包括对应的分块标识,每一个目标升级固件的分块数据包括对应的分块标识;第二获取模块304,用于获取所述控制信息中的多个控制三元组命令,每一个控制三元组命令包括第一控制信息以及第二控制信息,所述第一控制信息表征所述源固件与所述目标升级固件的相同信息和差分信息,所述第二控制信息表征所述目标升级固件的独有信息;第一分解模块305,用于根据所述每一个目标升级固件分块对应的标识、所述每一个源固件分块对应的标识、所述目标分块大小以及操作步长,对所述每一个第一控制信息进行分解,得到每一个目标升级固件的分块对应的第三控制信息,所述第三控制信息表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息;第二分解模块306,用于根据所述每一个目标升级固件的分块数据对应的分块标识、所述目标分块大小以及操作步长,对所述每一个第二控制信息进行分解,得到每一个目标升级固件的分块对应的第四控制信息,所述第四控制信息用于表征每一个目标升级固件的分块中与对应源固件分块中的相同信息和差分信息;第一确定模块307,用于根据所述第三控制信息、所述第四控制信息、所述差分信息以及独有信息,确定所述每一个目标升级固件的分块对应的差分信息和独有信息;生成模块308,用于根据所述第三控制信息、第四控制信息以及所述每一个目标升级固件的分块对应的差分信息和独有信息,生成所述每一个目标升级固件的分块对应的差分升级包;第二确定模块309,用于根据所述第三控制信息确定每一个目标升级固件分块的升级顺序;打包模块310,用于对所述每一个目标升级固件的分块对应的差分升级包以及所述升级顺序进行打包,得到所述目标升级固件对应的差分升级包。

本发明提供的分块差分升级包生成装置,通过对待升级源固件和目标升级的固件全量差分包中的控制信息进行分解,确定每一个目标升级固件的分块在进行升级时对应的第三控制信息和第四控制信息,根据第三控制信息以及第四控制信息生成每一个目标升级固件的分块对应的差分升级包,根据第三控制信息确定每一个目标升级固件分块对应的升级顺序,对每一个目标升级固件的分块对应的差分升级包以及升级顺序进行打包,得到目标升级固件对应的差分升级包,该目标升级固件对应的差分升级包为极小差分包,该差分包的大小可小于源固件或目标固件的10%,后续在根据目标升级固件对应的差分升级包对源固件进行升级时,可以读取差分升级包中每一个目标升级固件分块对应的升级顺序,并根据升级顺序执行对应分块对应的控制信息,依次还原每一个目标升级固件分块,实现对源固件的升级,升级过程中可以在源固件的基础上进行覆盖,需要的全部内存只取决于分块大小,不依赖于源固件和目标固件的大小,不需要使用额外的空间,解决了现有技术中差分升级方法对硬件存储资源需求大的缺陷。

作为本发明一个可选实施方式,所述装置还包括:第四获取模块,用于获取设备侧的目标处理器的内存大小以及设备侧的目标flash存储器的最小擦除单位;第三确定模块,用于根据所述目标处理器的内存大小以及目标flash存储器的最小擦除单位确定所述目标分块大小。

作为本发明一个可选实施方式,第一分解模块,包括:第一确定子模块,用于根据所述第一控制信息的当前可操作字节数、当前操作的源固件分块内的剩余字节数以及当前操作的目标升级固件分块内的剩余字节数,确定所述第一控制信息对应的当前分解步长;第一分解子模块,用于根据所述第一控制信息对应的当前分解步长,对所述第一控制信息进行分解得到第一分解结果,并记录在对所述第一控制信息的分解过程中每一步分解操作对应源固件的分块标识、对应目标升级固件的分块标识、在所述源固件中的当前第一位置偏移指针、在所述目标升级固件中的当前第二位置偏移指针以及在所述全量差分包中差分信息中的当前第三位置偏移指针;第二确定子模块,用于根据第一分解结果、所述第一位置偏移指针、所述对应源固件的分块标识、对应目标升级固件的分块标识、所述第一位置偏移指针、所述第二位置偏移指针以及所述第三位置偏移指针确定所述第三控制信息;

第二分解模块,包括:第三确定子模块,用于根据所述第二控制信息的当前可操作字节数以及当前操作的目标升级固件分块内的剩余字节数,确定所述第二控制信息对应的当前分解步长;第二分解子模块,用于根据所述第二控制信息对应的当前分解步长对所述第二控制信息进行分解得到第二分解结果,并记录在对所述第二控制信息的分解过程中每一步分解操作对应目标升级固件的分块标识、在所述目标升级固件中的当前第四位置偏移指针以及在所述全量差分包中独有信息中的当前第五位置偏移指针;第四确定子模块,用于根据第二分解结果、所述第四位置偏移指针、第五位置偏移指针以及目标升级固件的分块标识确定所述第四控制信息。

作为本发明一个可选实施方式,第二确定模块,包括:第五确定子模块,用于确定第三控制信息对应的目标升级固件的分块标识以及源固件的分块标识;第六确定子模块,用于根据所述第三控制信息对应的目标升级固件的分块标识以及源固件的分块标识,确定每一个目标升级固件的分块标识与源固件的分块标识之间的对应关系;排序子模块,用于根据所述目标升级固件的分块标识和源固件的分块标识之间的对应关系对所述目标升级固件的分块标识和源固件的分块标识进行拓扑排序;第七确定子模块,用于根据拓扑排序结果,确定每一个目标升级固件分块的升级顺序。

作为本发明一个可选实施方式,所述装置还包括:升级模拟操作模块,用于利用预设模拟程序对所述目标升级固件对应的差分升级包对所述源固件进行升级模拟操作。

本发明实施例还公开了一种分块差分升级包生成装置,如图6所示,该装置包括:第三获取模块501,用于获取目标差分升级包,所述目标差分升级包通过如上述实施例所述的分块差分升级包生成方法得到;读取模块502,用于读取所述目标差分升级包中的每一个目标升级固件分块的升级顺序信息;升级模块503,用于根据所述每一个目标升级固件分块的升级顺序信息,在待升级固件中执行每一个目标升级固件分块对应的升级命令,对待升级固件进行升级。

本发明提供的分块差分升级装置,通过获取目标差分升级包,并根据目标差分升级包中包含的一个目标升级固件分块的升级顺序信息执行对应分块中的升级命令,实现对待升级固件的升级操作,升级过程中可以在源固件的基础上进行覆盖,需要的全部内存只取决于分块大小,不依赖于源固件和目标固件的大小,不需要使用额外的空间,解决了现有技术中差分升级方法对硬件存储资源需求大的缺陷。

本发明实施例还提供了一种电子设备,如图7所示,该电子设备可以包括处理器401和存储器402,其中处理器401和存储器402可以通过总线或者其他方式连接,图7中以通过总线连接为例。

处理器401可以为中央处理器(Central Processing Unit,CPU)。处理器401还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。

存储器402作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的分块差分升级包生成方法或分块差分升级方法对应的程序指令/模块。处理器401通过运行存储在存储器402中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的分块差分升级包生成方法或分块差分升级方法。

存储器402可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器401所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器402可选包括相对于处理器401远程设置的存储器,这些远程存储器可以通过网络连接至处理器401。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述一个或者多个模块存储在所述存储器402中,当被所述处理器401执行时,执行如图1所示实施例中的分块差分升级包生成方法或图4所示实施例中的分块差分升级方法。

上述电子设备具体细节可以对应参阅图1、图4所示的实施例中对应的相关描述和效果进行理解,此处不再赘述。

本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(RandomAccessMemory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;所述存储介质还可以包括上述种类的存储器的组合。

虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

技术分类

06120115636115