发明内容
本发明实施例的主要目的在于提供一种固件比对方法和装置,旨在提高比对效率和比对效果。
为达以上目的,一方面提出一种固件比对方法,所述方法包括以下步骤:
获取第一固件和第二固件的内存映射文件;
分别根据所述第一固件的内存映射文件和所述第二固件的内存映射文件建立参数条目;
比对所述第一固件的参数条目与所述第二固件的参数条目,根据比对结果获取所述第一固件与所述第二固件的差异信息。
可选地,所述分别根据所述第一固件的内存映射文件和所述第二固件的内存映射文件建立参数条目包括:
从所述第一固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目;从所述第二固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目。
可选地,所述比对所述第一固件的参数条目与所述第二固件的参数条目包括:
依次从所述第一固件的参数条目中提取出一个参数条目作为比对条目;
判断所述第二固件的参数条目中是否有与所述比对条目具有相同的文件名和参数名的目标条目;
当没有与所述比对条目具有相同的文件名和参数名的目标条目时,判定所述比对条目对应的参数为所述第一固件中相对于所述第二固件新增的参数;
当有与所述比对条目具有相同的文件名和参数名的目标条目时,判断所述比对条目与所述目标条目的参数内容是否相同;
当所述比对条目与所述目标条目的参数内容不同时,判定所述比对条目对应的参数为所述第一固件中相对于所述第二固件做过更改的参数;
当所述比对条目与所述目标条目的参数内容相同时,判定所述比对条目对应的参数为所述第一固件中相对于所述第二固件未作更改的参数。
可选地,所述判断所述第二固件的参数条目中是否有与所述比对条目具有相同的文件名和参数名的目标条目包括:
判断所述第二固件的参数条目中是否有与所述比对条目具有相同的文件名的参数条目;
当有与所述比对条目具有相同的文件名的参数条目时,判断所述参数条目中是否有与所述比对条目具有相同的参数名的参数条目;
当有与所述比对条目具有相同参数名的参数条目时,判定所述第二固件的参数条目中有与所述比对条目具有相同的文件名和参数名的目标条目。
可选地,所述分别根据所述第一固件的内存映射文件和所述第二固件的内存映射文件建立参数条目的步骤之后还包括:
以所述参数条目中的文件名作为排序键值,根据字符顺序分别对所述第一固件中的所有参数条目和所述第二固件中的所有参数条目进行排序。
可选地,所述分别根据所述第一固件的内存映射文件和所述第二固件的内存映射文件建立参数条目的步骤之后还包括:
以所述参数条目中的文件名作为第一排序键值,参数名作为第二排序键值,根据字符顺序分别对所述第一固件中的所有参数条目和所述第二固件中的所有参数条目进行排序。
可选地,所述参数条目包括函数条目和变量条目。
另一方面,提出一种固件比对装置,所述装置包括:
获取模块,用于获取第一固件和第二固件的内存映射文件;
建立模块,用于分别根据所述第一固件的内存映射文件和所述第二固件的内存映射文件建立参数条目;
比对模块,用于比对所述第一固件的参数条目与所述第二固件的参数条目,根据比对结果获取所述第一固件与所述第二固件的差异信息。
可选地,所述建立模块包括:
第一建立单元,用于从所述第一固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目;
第二建立单元,用于从所述第二固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目。
可选地,所述比对模块包括:
提取单元,用于依次从所述第一固件的参数条目中提取出一个参数条目作为比对条目;
第一判断单元,用于判断所述第二固件的参数条目中是否有与所述比对条目具有相同的文件名和参数名的目标条目;当没有与所述比对条目具有相同的文件名和参数名的目标条目时,判定所述比对条目对应的参数为所述第一固件中相对于所述第二固件新增的参数;
第二判断单元,用于当有与所述比对条目具有相同的文件名和参数名的目标条目时,判断所述比对条目与所述目标条目的参数内容是否相同;当所述比对条目与所述目标条目的参数内容不同时,判定所述比对条目对应的参数为所述第一固件中相对于所述第二固件做过更改的参数;当所述比对条目与所述目标条目的参数内容相同时,判定所述比对条目对应的参数为所述第一固件中相对于所述第二固件未作更改的参数。
可选地,所述第一判断单元用于:
判断所述第二固件的参数条目中是否有与所述比对条目具有相同的文件名的参数条目;当有与所述比对条目具有相同的文件名的参数条目时,判断所述参数条目中是否有与所述比对条目具有相同的参数名的参数条目;当有与所述比对条目具有相同参数名的参数条目时,判定所述第二固件的参数条目中有与所述比对条目具有相同的文件名和参数名的目标条目。
可选地,所述装置还包括排序模块,所述排序模块用于:以所述参数条目中的文件名作为排序键值,根据字符顺序分别对所述第一固件中的所有参数条目和所述第二固件中的所有参数条目进行排序。
可选地,所述装置还包括排序模块,所述排序模块用于:以所述参数条目中的文件名作为第一排序键值,参数名作为第二排序键值,根据字符顺序分别对所述第一固件中的所有参数条目和所述第二固件中的所有参数条目进行排序。
本发明实施例所提供的一种固件比对方法,根据两个固件的内存映射文件分别建立各自的参数条目作为最小的参照单元,通过对两个固件最小的参照单元进行针对性的比对,可以快速准确的获取最优的比对结果,得到准确的差异信息,大大提高了固件的比对效率和比对效果,为物联网设备的固件实现差分升级创造了条件,可以有效提高升级效率。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
另外,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
参见图1,提出本发明的固件比对方法一实施例,所述方法可以应用于服务器、网关、终端设备等,所述方法包括以下步骤:
S11、获取第一固件和第二固件的内存映射文件。
S12、分别根据第一固件的内存映射文件和第二固件的内存映射文件建立参数条目。
S13、比对第一固件的参数条目与第二固件的参数条目,根据比对结果获取第一固件与第二固件的差异信息。
本发明实施例所述的固件,主要指为二进制数据的Zigbee设备的固件,当然也可以是其它的固件。本发明实施例中,第一固件和第二固件为两个不同的固件,通常为两个不同版本的固件,如:第一固件为新版本的固件,简称新固件,第二固件为旧版本的固件,简称旧固件。
由于Zigbee设备的固件是二进制数据,直接将两个固件比对具有很大的盲目性且不能得到一个最优的比对结果。一般情况从源代码到固件生成过程中会伴随着一个内存映射文件的生成,该内存映射文件里面描述了功能模块对应的固件地址,利用这些描述信息就能够准确高效比对出不同版本固件的异同。
因此,步骤S11中,首先获取第一固件和第二固件两个固件各自的内存映射文件(.map)。本发明实施例中,内存映射文件中包括了多个代码段(code)和多个数据段(data),其中代码段是由各种函数组成,而数据段是由各种变量组成。也就是说,本发明实施例中,内存映射文件主要包括函数和变量两种参数。当然,在其它实施例中,固件的内存映射文件也可能还包括其它参数,或者包括函数、变量和其它参数中的任意一种或者至少两种参数。
步骤S12中,从第一固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目,获取至少两个参数条目;从第二固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目,获取至少两个参数条目。
本发明实施例中,内存映射文件包括函数和变量两种参数,因此建立的参数条目包括函数条目和变量条目。每一个函数条目由函数所在的文件名、函数名和代码段(即参数内容)组成,每一个变量条目由变量所在的文件名、变量名和变量值(即参数内容)组成。
例如,针对固件的内存映射文件中的代码段,建立该内存映射文件中代码段的所有函数条目。具体的,从内存映射文件中获取某个函数的描述信息,根据描述信息获取该函数所在的文件名(函数所在的文件名指的是承载函数的源文件的名称),以及该函数的长度和在固件中的起始地址,根据该函数的长度和在固件中的起始地址从固件中找到对应的代码,获取该函数的函数名和代码段;然后把该函数所在的文件名、函数名和代码段保存到同一个条目中,完成一个函数条目的建立。以此类推,完成所有函数条目的建立。
可选地,当代码段较长时,也可以直接将函数的长度和在固件中的起始地址作为函数条目的参数内容。
可选地,当代码段较长时,也可以对代码段进行哈希算法校验,如安全哈希算法(Secure Hash Algorithm,SHA1)校验、信息摘要算法5(Message-Digest Algorithm 5,MD5)校验等,获得对应的哈希值(如SHA1值、MD5值等),将哈希值作为函数条目的参数内容。
又如,针对固件的内存映射文件中的数据段,建立该内存映射文件中数据段的所有变量条目。具体的,从内存映射文件中获取某个变量的描述信息,根据描述信息获取该变量所在的文件名(变量所在的文件名指的是承载数据的源文件的名称)以及该变量的地址,根据变量的地址从固件中找到对应的数据,获取该变量的变量名和变量值;然后把该变量所在的文件名、变量名和变量值保存到同一个条目中,完成一个函数条目的建立。以此类推,完成所有变量条目的建立。
进一步地,为了提高后续步骤S13的比对效率,在步骤S12之后、S13之前,还可以对建立的参数条目按照预设的排序规则进行排序。例如,按照预设的排序规则对第一固件中的所有函数条目进行排序,所有变量条目进行排序;按照预设的排序规则对第二固件中的所有函数条目进行排序,所有变量条目进行排序。
可选地,以参数条目中的文件名作为排序键值,根据字符顺序分别对第一固件中的所有参数条目和第二固件中的所有参数条目进行排序,并可以生成排序列表,所述字符如字母、数字等,如以“a、b、c、d…”的顺序排序或以“1、2、3、4…”的顺序排序。具体的,首先以文件名的第一个字符作为排序键值对参数条目进行排序,对于第一个字符相同的参数条目,再以文件名的第二个字符作为排序键值进行排序,依此类推。
可选地,以参数条目中的文件名作为第一排序键值,参数名作为第二排序键值,根据字符顺序分别对第一固件中的所有参数条目和第二固件中的所有参数条目进行排序,并可以生成排序列表,所述字符如字母、数字等,如以“a、b、c、d…”的顺序排序或以“1、2、3、4…”的顺序排序。具体的,首先像前一个方案那样,依次以文件名的各个字符作为第一排序键值对参数条目进行排序,对于文件名相同的参数条目,再依次以参数名的各个字符作为第二排序键值进行排序。
本领域技术人员可以理解,除了前述列举的排序规则外,还可以采用现有技术中的类似规则或其它规则进行排序,本发明对此不再一一列举赘述。
步骤S13中,本发明实施例分别比对第一固件的函数条目与第二固件的函数条目,以及第一固件的变量条目和第二固件的变量条目,根据比对结果获取两个固件的函数和变量两种参数数据的差异信息。
如图2所示,比对第一固件的参数条目与第二固件的参数条目的具体流程如下:
S131、依次从第一固件的参数条目中提取出一个参数条目作为比对条目。
本步骤S131中,依次将第一固件中的每一个参数条目提取出来作为比对条目,以与第二固件中的所有参数条目进行比对。例如,依次将第一固件中的每一个函数条目提取出来作为比对条目,以与第二固件中的所有函数条目进行比对;依次将第一固件中的每一个变量条目提取出来作为比对条目,以与第二固件中的所有变量条目进行比对。
可选地,当第一固件中的参数条目预先按照字符顺序进行了排序时,则可以按照参数条目的文件名和参数名的字符顺序依次提取参数条目。
S132、判断第二固件的参数条目中是否有与比对条目具有相同的文件名和参数名的目标条目。当没有与比对条目具有相同的文件名和参数名的目标条目时,进入步骤S133;当有与比对条目具有相同的文件名和参数名的目标条目时,进入步骤S134。
本步骤S132中,将第一固件中提取出来的比对条目与第二固件中的所有参数条目进行比较,判断第二固件的参数条目中是否有与比对条目具有相同的文件名和参数名的目标条目。
如图3所示,判断第二固件的参数条目中是否有与比对条目具有相同的文件名和参数名的目标条目的具体流程如下:
S101、判断第二固件的参数条目中是否有与比对条目具有相同的文件名的参数条目。当有与比对条目具有相同的文件名的参数条目时,进入步骤S102;当没有与比对条目具有相同的文件名的参数条目时,进入步骤S104。
本步骤S101中,将比对条目的文件名与第二固件的所有参数条目的文件名进行比较,看能否从这些参数条目中查找出与比对条目具有相同的文件名的一个或至少两个参数条目。
可选地,当第二固件中的参数条目预先以文件名作为排序键值按照字符顺序进行了排序时,则可以按照参数条目的文件名的字符顺序依次在第二固件的参数条目中进行查找,从而提高查找效率。例如,如果比对条目的文件名的首字母为b,则直接在第二固件中文件名的首字母为b的参数条目系列中去查找,如果没有查找到,则结束查找,不用再到其它参数条目系列中去查找了,从而节省查找时间,加快查找速度。
S102、判断与比对条目具有相同的文件名的参数条目中是否有与比对条目具有相同的参数名的参数条目。当有与比对条目具有相同参数名的参数条目时,进入步骤S103;当没有与比对条目具有相同参数名的参数条目时,进入步骤S104。
当第二固件的参数条目中有与比对条目具有相同的文件名的参数条目时,进一步将比对条目的参数名与这些参数条目的文件名进行比较,看能否查找出与比对条目具有相同的参数名的参数条目。
可选地,当第二固件中的参数条目预先以参数名作为排序键值按照字符顺序进行了排序时,则可以按照参数条目的参数名的字符顺序依次在第二固件的参数条目中进行查找,从而提高查找效率。例如,如果比对条目的函数名的emberInit,则直接在第二固件中函数名的首字母为e的函数条目系列中去查找,如果没有查找到,则结束查找,不用再到其它函数条目系列中去查找了,从而节省查找时间,加快查找速度。
S103、判定第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目。
当第二固件的某个参数条目与比对条目既有相同的文件名又有相同的参数名,则认定该参数条目为目标条目,即判定第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目。
S104、判定第二固件的参数条目中没有与比对条目具有相同的文件名和参数名的目标条目。
当第二固件中没有任何一个参数条目与比对条目具有相同的文件名时,或者虽然有某一个或某些参数条目与比对条目具有相同的文件名但不具有相同的参数名时,则判定第二固件的参数条目中没有与比对条目具有相同的文件名和参数名的目标条目。
S133、判定比对条目对应的参数为第一固件中相对于第二固件新增的参数。
当第二固件的参数条目中没有与比对条目具有相同的文件名和参数名的目标条目时,则判定该比对条目对应的参数为第一固件中相对于第二固件新增的参数。
S134、判断比对条目与目标条目的参数内容是否相同。当比对条目与所述目标条目的参数内容不同时,进入步骤S135;当比对条目与目标条目的参数内容相同时,进入步骤S136。
当第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目时,则进一步比较比对条目与目标条目的参数内容,判断二者的参数内容是否相同。
例如,当参数条目为变量条目时,比较比对条目与目标条目的变量值是否相同。
又如,当参数条目为函数条目时,比较比对条目与目标条目的代码段是否完全相同。可选地,当函数条目的参数内容为函数的长度和在固件中的起始地址作为函数条目时,则需要根据比对条目和目标条目的参数内容分别从第一固件和第二固件中提取出对应的代码段进行比较。可选地,当函数条目的参数内容为哈希值时,则直接比较比对条目与目标条目的哈希值是否相同,如比较二者的SHA1值是否相同。
S135、判定比对条目对应的参数为第一固件中相对于第二固件做过更改的参数。
当第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目,但该目标条目与第一固件中的比对条目的参数内容不同时,则判定该比对条目对应的参数为第一固件中相对于第二固件做过更改的参数。
S136、判定比对条目对应的参数为第一固件中相对于第二固件未作更改的参数。
当第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目,且该目标条目与第一固件中的比对条目的参数内容相同时,则判定该比对条目对应的参数为第一固件中相对于第二固件未作更改的参数,即该参数在两个固件中没有变化。
最终,根据比对结果获取第一固件与第二固件的差异信息,该差异信息包括:第一固件中相对于第二固件未作更改的参数、做过更改的参数和新增的参数。从而找到了两个固件的相同部分和不同部分。可选地,对于做过更改的参数或新增的参数,后续进行差分升级时处理方式相同。
举例而言:
针对函数条目,从新固件的函数条目的排序列表A中依次提取出一个函数条目,根据该函数条目的文件名,从旧固件的排序列表B中寻找具有相同文件名的一个或多个函数条目,并从找到的函数条目中确认与排序列表A中提取出的函数条目有着相同函数名的一个或多个函数条目,将排序列表A中提取出的函数条目的代码段(或SHA1值)与排序列表B中所确认的函数条目的代码段(或SHA1值)进行对比;如果代码段(或SHA1值)也相同,则表明排序列表A中提取出的函数条目对应的函数为新固件中相对于旧固件未作更改的函数;如果代码段(或SHA1值)不相同,则表明排序列表A中提取出的函数条目对应的函数为新固件中相对于旧固件做过更改的函数。如果排序列表B中没有找到与排序列表A中提取出的函数条目具有相同的文件名的函数条目,或者虽然具有相同的文件名但不具有相同的函数名,则说明排序列表A中提取出的函数条目对应的函数为新固件中相对于就固件新增的函数。
同理,针对变量条目,从新固件的变量条目的排序列表A中依次提取出一个变量条目,根据该变量条目的文件名,从旧固件的排序列表B中寻找具有相同文件名的一个或多个变量条目,并从找到的变量条目中确认与排序列表A中提取出的变量条目有着相同变量名的一个或多个变量条目,将排序列表A中提取出的变量条目的变量值与排序列表B中所确认的变量条目的变量值进行对比;如果变量值也相同,则表明排序列表A中提取出的变量条目对应的变量为新固件中相对于旧固件未作更改的变量;如果变量值不相同,则表明排序列表A中提取出的变量条目对应的变量为新固件中相对于旧固件做过更改的变量。如果排序列表B中没有找到与排序列表A中提取出的变量条目具有相同的文件名的变量条目,或者虽然具有相同的文件名但不具有相同的变量名,则说明排序列表A中提取出的变量条目对应的变量为新固件中相对于就固件新增的变量。
进一步地,当获取第一固件与第二固件的差异信息后,根据该差异信息生成差异描述文件,该差异描述文件中包括两个固件的相同部分和不同部分的描述信息,后续则根据该差异描述文件中的描述信息进行固件升级。
例如,差异描述文件的描述信息包括两部分,第一部分描述Zigbee设备中的新固件与旧固件中所有相同数据的地址段(每个地址段包括起始地址和结束地址)以及该部分数据在固件下载区对应的目标起始地址;第二部分描述的是差异数据(即旧固件中不存在的数据,或新固件中新增的数据和更改的数据)和数据校验值以及该部分数据在固件下载区的目标起始地址和结束地址。
由于差异描述文件的数据量远远小于所需要升级的新固件的数据量,因此将差异描述文件发送给设备端进行差分升级将克服传统升级方式中时间长、消耗资源多的缺点,从而可以提高升级效率。
本发明实施例的固件比对方法,根据两个固件的内存映射文件分别建立各自的参数条目作为最小的参照单元,通过对两个固件最小的参照单元进行针对性的比对,可以快速准确的获取最优的比对结果,大大提高了固件的比对效率和比对效果,为物联网设备的固件实现差分升级创造了条件,可以有效提高升级效率。
参见图4,提出本发明的固件比对装置第一实施例,所述装置可以应用于服务器、网关、终端设备等,所述装置包括获取模块10、建立模块20和比对模块30,其中:获取模块10用于获取第一固件和第二固件的内存映射文件;建立模块20用于分别根据第一固件的内存映射文件和第二固件的内存映射文件建立参数条目;比对模块30用于比对第一固件的参数条目与第二固件的参数条目,根据比对结果获取第一固件与第二固件的差异信息。
本发明实施例中,内存映射文件中包括了多个代码段(code)和多个数据段(data),其中代码段是由各种函数组成,而数据段是由各种变量组成。也就是说,本发明实施例中,内存映射文件主要包括函数和变量两种参数。当然,在其它实施例中,固件的内存映射文件也可能还包括其它参数,或者包括函数、变量和其它参数中的任意一种或者至少两种参数。
如图5所示,建立模块20包括第一建立单元21和第二建立单元22。第一建立单元21用于从第一固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目,获取至少两个参数条目;第二建立单元22用于从第二固件的内存映射文件中获取每一个参数所在的文件名、参数名和参数内容,将每一个参数所在的文件名、参数名和参数内容建立为一个参数条目,获取至少两个参数条目。
本发明实施例中,内存映射文件包括函数和变量两种参数,因此建立的参数条目包括函数条目和变量条目。每一个函数条目由函数所在的文件名、函数名和代码段(即参数内容)组成,每一个变量条目由变量所在的文件名、变量名和变量值(即参数内容)组成。
例如,针对固件的内存映射文件中的代码段,建立模块20建立该内存映射文件中代码段的所有函数条目。具体的,建立模块20从内存映射文件中获取某个函数的描述信息,根据描述信息获取该函数所在的文件名(函数所在的文件名指的是承载函数的源文件的名称),以及该函数的长度和在固件中的起始地址,根据该函数的长度和在固件中的起始地址从固件中找到对应的代码,获取该函数的函数名和代码段;然后把该函数所在的文件名、函数名和代码段保存到同一个条目中,完成一个函数条目的建立。以此类推,完成所有函数条目的建立。
可选地,当代码段较长时,建立模块20也可以直接将函数的长度和在固件中的起始地址作为函数条目的参数内容。
可选地,当代码段较长时,建立模块20也可以对代码段进行哈希算法校验,如安全哈希算法(Secure Hash Algorithm,SHA1)校验、信息摘要算法5(Message-DigestAlgorithm 5,MD5)校验等,获得对应的哈希值(如SHA1值、MD5值等),将哈希值作为函数条目的参数内容。
又如,针对固件的内存映射文件中的数据段,建立模块20建立该内存映射文件中数据段的所有变量条目。具体的,建立模块20从内存映射文件中获取某个变量的描述信息,根据描述信息获取该变量所在的文件名(变量所在的文件名指的是承载数据的源文件的名称)以及该变量的地址,根据变量的地址从固件中找到对应的数据,获取该变量的变量名和变量值;然后把该变量所在的文件名、变量名和变量值保存到同一个条目中,完成一个函数条目的建立。以此类推,完成所有变量条目的建立。
本发明实施例中,比对模块30分别比对第一固件的函数条目与第二固件的函数条目,以及第一固件的变量条目和第二固件的变量条目,根据比对结果获取两个固件的函数和变量两种参数数据的差异信息。
如图6所示,比对模块30包括提取单元31、第一判断单元32和第二判断单元33。
提取单元31:用于依次从第一固件的参数条目中提取出一个参数条目作为比对条目。
例如,提取单元31依次将第一固件中的每一个函数条目提取出来作为比对条目,以与第二固件中的所有函数条目进行比对;依次将第一固件中的每一个变量条目提取出来作为比对条目,以与第二固件中的所有变量条目进行比对。
第一判断单元32:用于判断第二固件的参数条目中是否有与比对条目具有相同的文件名和参数名的目标条目;当没有与比对条目具有相同的文件名和参数名的目标条目时,判定比对条目对应的参数为第一固件中相对于第二固件新增的参数;当有与比对条目具有相同的文件名和参数名的目标条目时,通知第二判断单元33。
具体的,第一判断单元32首先判断第二固件的参数条目中是否有与比对条目具有相同的文件名的参数条目;当有与比对条目具有相同的文件名的参数条目时,再判断与比对条目具有相同的文件名的参数条目中是否有与比对条目具有相同的参数名的参数条目;当有与比对条目具有相同参数名的参数条目时,判定第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目。如果第二固件中没有任何一个参数条目与比对条目具有相同的文件名时,或者虽然有某一个或某些参数条目与比对条目具有相同的文件名但不具有相同的参数名时,第一判断单元32则判定第二固件的参数条目中没有与比对条目具有相同的文件名和参数名的目标条目。
第二判断单元33:用于当第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目时,判断比对条目与目标条目的参数内容是否相同;当比对条目与目标条目的参数内容不同时,判定比对条目对应的参数为第一固件中相对于第二固件做过更改的参数;当比对条目与目标条目的参数内容相同时,判定比对条目对应的参数为第一固件中相对于第二固件未作更改的参数。
当第二固件的参数条目中有与比对条目具有相同的文件名和参数名的目标条目时,第二判断单则进一步比较比对条目与目标条目的参数内容,判断二者的参数内容是否相同。
例如,当参数条目为变量条目时,第二判断单元33比较比对条目与目标条目的变量值是否相同。
又如,当参数条目为函数条目时,第二判断单元33比较比对条目与目标条目的代码段是否完全相同。可选地,当函数条目的参数内容为函数的长度和在固件中的起始地址作为函数条目时,第二判断单元33则需要根据比对条目和目标条目的参数内容分别从第一固件和第二固件中提取出对应的代码段进行比较。可选地,当函数条目的参数内容为哈希值时,第二判断单元33则直接比较比对条目与目标条目的哈希值是否相同,如比较二者的SHA1值是否相同。
最终,比对模块30根据比对结果获取第一固件与第二固件的差异信息,该差异信息包括:第一固件中相对于第二固件未作更改的参数、做过更改的参数和新增的参数。从而找到了两个固件的相同部分和不同部分。可选地,对于做过更改的参数或新增的参数,后续进行差分升级时处理方式相同。
举例而言:
针对函数条目,比对模块30从新固件的函数条目的排序列表A中依次提取出一个函数条目,根据该函数条目的文件名,从旧固件的排序列表B中寻找具有相同文件名的一个或多个函数条目,并从找到的函数条目中确认与排序列表A中提取出的函数条目有着相同函数名的一个或多个函数条目,将排序列表A中提取出的函数条目的代码段(或SHA1值)与排序列表B中所确认的函数条目的代码段(或SHA1值)进行对比;如果代码段(或SHA1值)也相同,则判定排序列表A中提取出的函数条目对应的函数为新固件中相对于旧固件未作更改的函数;如果代码段(或SHA1值)不相同,则判定排序列表A中提取出的函数条目对应的函数为新固件中相对于旧固件做过更改的函数。如果排序列表B中没有找到与排序列表A中提取出的函数条目具有相同的文件名的函数条目,或者虽然具有相同的文件名但不具有相同的函数名,则判定排序列表A中提取出的函数条目对应的函数为新固件中相对于就固件新增的函数。
同理,针对变量条目,比对模块30从新固件的变量条目的排序列表A中依次提取出一个变量条目,根据该变量条目的文件名,从旧固件的排序列表B中寻找具有相同文件名的一个或多个变量条目,并从找到的变量条目中确认与排序列表A中提取出的变量条目有着相同变量名的一个或多个变量条目,将排序列表A中提取出的变量条目的变量值与排序列表B中所确认的变量条目的变量值进行对比;如果变量值也相同,则判定排序列表A中提取出的变量条目对应的变量为新固件中相对于旧固件未作更改的变量;如果变量值不相同,则判定排序列表A中提取出的变量条目对应的变量为新固件中相对于旧固件做过更改的变量。如果排序列表B中没有找到与排序列表A中提取出的变量条目具有相同的文件名的变量条目,或者虽然具有相同的文件名但不具有相同的变量名,则判定排序列表A中提取出的变量条目对应的变量为新固件中相对于就固件新增的变量。
进一步地,当获取第一固件与第二固件的差异信息后,比对模块30还根据该差异信息生成差异描述文件,该差异描述文件中包括两个固件的相同部分和不同部分的描述信息,后续则可以根据该差异描述文件中的描述信息进行固件升级。
例如,差异描述文件的描述信息包括两部分,第一部分描述Zigbee设备中的新固件与旧固件中所有相同数据的地址段(每个地址段包括起始地址和结束地址)以及该部分数据在固件下载区对应的目标起始地址;第二部分描述的是差异数据(即旧固件中不存在的数据,或新固件中新增的数据和更改的数据)和数据校验值以及该部分数据在固件下载区的目标起始地址和结束地址。
进一步地,如图7所示,在本发明的固件比对装置的第二实施例中,该装置还包括排序模块40,该排序模块40用于对建立的参数条目按照预设的排序规则进行排序,以提高比对模块30后续对参数条目比对的效率。例如,排序模块40按照预设的排序规则对第一固件中的所有函数条目进行排序,所有变量条目进行排序;按照预设的排序规则对第二固件中的所有函数条目进行排序,所有变量条目进行排序。
可选地,排序模块40以参数条目中的文件名作为排序键值,根据字符顺序分别对第一固件中的所有参数条目和第二固件中的所有参数条目进行排序,并可以生成排序列表,所述字符如字母、数字等,如以“a、b、c、d…”的顺序排序或以“1、2、3、4…”的顺序排序。具体的,排序模块40首先以文件名的第一个字符作为排序键值对参数条目进行排序,对于第一个字符相同的参数条目,再以文件名的第二个字符作为排序键值进行排序,依此类推。
可选地,排序模块40以参数条目中的文件名作为第一排序键值,参数名作为第二排序键值,根据字符顺序分别对第一固件中的所有参数条目和第二固件中的所有参数条目进行排序,并可以生成排序列表,所述字符如字母、数字等,如以“a、b、c、d…”的顺序排序或以“1、2、3、4…”的顺序排序。具体的,排序模块40首先像前一个方案那样,依次以文件名的各个字符作为第一排序键值对参数条目进行排序,对于文件名相同的参数条目,再依次以参数名的各个字符作为第二排序键值进行排序。
本领域技术人员可以理解,除了前述列举的排序规则外,还可以采用现有技术中的类似规则或其它规则进行排序,本发明对此不再一一列举赘述。
当第一固件中的参数条目预先按照字符顺序进行了排序时,比对模块30的提取单元31则可以按照参数条目的文件名和参数名的字符顺序依次提取参数条目。
当第二固件中的参数条目预先以文件名作为排序键值按照字符顺序进行了排序时,比对模块30的第一判断单元32则可以按照参数条目的文件名的字符顺序依次在第二固件的参数条目中进行查找,从而提高查找效率。例如,如果比对条目的文件名的首字母为b,第一判断单元32则直接在第二固件中文件名的首字母为b的参数条目系列中去查找,如果没有查找到,则结束查找,不用再到其它参数条目系列中去查找了,从而节省查找时间,加快查找速度。
当第二固件中的参数条目预先以参数名作为排序键值按照字符顺序进行了排序时,比对模块30的第一判断单元32则可以按照参数条目的参数名的字符顺序依次在第二固件的参数条目中进行查找,从而提高查找效率。例如,如果比对条目的函数名的emberInit,则直接在第二固件中函数名的首字母为e的函数条目系列中去查找,如果没有查找到,则结束查找,不用再到其它函数条目系列中去查找了,从而节省查找时间,加快查找速度。
本发明实施例的固件比对装置,根据两个固件的内存映射文件分别建立各自的参数条目作为最小的参照单元,通过对两个固件最小的参照单元进行针对性的比对,可以快速准确的获取最优的比对结果,大大提高了固件的比对效率和比对效果,为物联网设备的固件实现差分升级创造了条件,可以有效提高升级效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
应当理解的是,以上仅为本发明的优选实施例,不能因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。