CN111930412A - 差分文件生成及固件在线升级的方法和装置 - Google Patents

差分文件生成及固件在线升级的方法和装置 Download PDF

Info

Publication number
CN111930412A
CN111930412A CN201910395530.3A CN201910395530A CN111930412A CN 111930412 A CN111930412 A CN 111930412A CN 201910395530 A CN201910395530 A CN 201910395530A CN 111930412 A CN111930412 A CN 111930412A
Authority
CN
China
Prior art keywords
code
binary code
function
specific function
modified
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.)
Pending
Application number
CN201910395530.3A
Other languages
English (en)
Inventor
罗嵩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910395530.3A priority Critical patent/CN111930412A/zh
Publication of CN111930412A publication Critical patent/CN111930412A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种差分文件生成及固件在线升级的方法和装置。该差分文件生成方法包括:对源代码中的特定函数进行代码修改;对修改的代码进行编译以生成二进制代码;基于所述特定函数的修改后二进制代码,生成差分文件,其中,从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码大小相同。由此,通过保持特定函数修改前后的二进制代码大小一致,使得替换代码可以直接覆盖相同的物理存储空间,避免某一或某些函数的修改对整体二进制代码段的影响,从而降低差分文件的大小,有效提升升级成功率。

Description

差分文件生成及固件在线升级的方法和装置
技术领域
本发明涉及OTA升级,尤其涉及一种差分文件生成方法和装置,以及使用该差分文件进行固件在线升级的方法和装置。
背景技术
随着物联网的发展,智能设备的种类愈加丰富。为了降低维护成本、提升用户体验,FOTA(Firmware Over-the-Air,可被称为“固件在线升级”或“固件空中升级”)技术成为智能物联网时代的标配。随着4G、WiFi和蓝牙Mesh技术在物联网升级设备上的普及,更多设备对升级的要求日渐增高。
FOTA升级过程中,由于一次传输的数据大小(比如,不超过250字节)和嵌入式系统的限制,更多采用增量升级方案。在增量升级中,如果差分包过大,需要更多的传输次数和更大的存储空间,容易导致升级失败。
为此,需要一种能够进一步降低升级包大小,有效提升升级成功率的方案。
发明内容
有鉴于此,本发明提出了一种差分文件升级方案,该方案针对源代码修改导致函数编译后大小变化,从而影响地址相关指令的问题,通过使得修改后的函数编译二进制码与原函数的长度保持一致,去除对其他指令的影响,从而进一步降低差分文件的大小,有效提升升级成功率。
根据本发明的一个方面,提出了一种差分文件生成方法,包括:对源代码中的特定函数进行代码修改;对修改的代码进行编译以生成二进制代码;基于所述特定函数的修改后二进制代码,生成差分文件,其中,从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码大小相同。由此,通过使得修改后的函数编译二进制码与原函数的长度保持一致,能够覆盖升级设备上所述特定函数的修改前二进制代码所占据的物理存储空间,从而去除对其他指令的影响,并进一步降低差分文件的大小,有效提升升级成功率。
优选地,基于所述特定函数的修改后二进制代码,生成差分文件包括:生成包括与所述特定函数的修改前二进制代码大小相同的替换代码的差分文件,所述替换代码能够执行所述修改后的特定函数的至少部分或全部功能。由此,通过差分文件直接包括大小相同的替换代码,简化代码覆盖的操作。
优选地,所述差分文件是仅包括所述替换代码和偏移相关指令的二进制文件。由此,在方便升级操作的同时进一步降低差分文件的大小。
优选地,所述替换代码包括用于将所述特定函数的修改后二进制代码填充至与所述特定函数的修改前二进制代码长度相同的空指令代码。由此,方便对相同长度替换代码的制作。
优选地,基于所述特定函数的修改后二进制代码,生成差分文件包括:比较所述特定函数的修改后二进制代码与所述特定函数的修改前二进制代码的长度大小;在所述特定函数的修改后二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同;以及基于空指令填充操作后的所述特定函数的修改后二进制代码生成差分文件。由此,通过空指令填充将较短的修改后代码补齐。
优选地,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同包括如下至少一项:在修改后的特定函数的源代码之后填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;在特定函数的修改后二进制代码之后填充空指令直至与所述特定函数的修改前二进制代码长度相同;针对编译过程中的中间代码填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;以及针对修改后的特定函数的源代码、编译过程中的中间代码或特定函数的修改后二进制代码添加填充空指令的指令,以使得所述空指令填充操作后的所述特定函数的修改后二进制代码在所述升级设备上基于所述填充空指令的指令而被填充至与所述特定函数的修改前二进制代码长度相同。
优选地,基于所述特定函数的修改后二进制代码,生成差分文件还包括:在所述特定函数的修改后二进制代码长度大于所述特定函数的修改前二进制代码长度的情况下,将修改后的特定函数进一步划分为主函数以及被所述主函数调用的附加函数,其中,划分主函数和附加函数以使得主函数编译得到的二进制代码长度小于等于所述特定函数的修改前二进制代码长度;在主函数的二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,针对所述主函数填充空指令以使得所述主函数的填充后二进制代码长度与所述特定函数的修改前二进制代码长度相同;使用所述主函数的填充后二进制代码长度作为替换代码以及所述附加函数的二进制代码作为附加代码,生成差分文件。由此,通过函数功能差分将较长的修改后代码变为长度相同部分和附加部分。优选地,所述差分文件中还包括用于将所述附加代码追加到升级设备上的代码段后的偏移相关指令。
优选地,所述差分文件是从编译的ELF文件中提取的仅针对所述特定函数的bin文件或其压缩包。由此方便升级设备的代码直接覆盖操作。
优选地,所述差分文件包括多份替换指令及其各自的偏移相关指令,其中每份替换指令针对多个修改后的特定函数中的一个特定函数。
根据本发明的另一方面,还提出了一种FOTA(固件在线升级)方法,包括:获取如上所述的差分文件;以及使用从所述差分文件恢复的替换代码覆盖特定函数的修改前二进制代码所占据的物理存储空间。
优选地,所述差分文件包括对应于主函数二进制代码的替换代码、被所述主函数引用的附加函数的附加代码以及用于将附加代码追加至指定位置的偏移相关指令,其中所述主函数和所述附加函数共同用于实现修改后的特定函数的功能,并且所述方法还包括:基于所述差分文件中包含的偏移相关指令,将所述附加代码追加至固件代码段之后。
优选地,所述差分文件是从ELF文件中提取的bin文件,并且使用从所述差分文件恢复的替换代码覆盖特定函数的修改前二进制代码所占据的物理存储空间包括:将所述bin文件覆盖特定函数的修改前二进制代码所占据的物理存储空间以在所述升级设备的物理存储中构成完整的ELF文件。
优选地,所述bin文件包括修改后特定函数的二进制代码、所述修改后特定函数的二进制代码的偏移值代码和长度代码,并且,将所述bin文件覆盖特定函数的修改前二进制代码所占据的物理存储空间以在所述升级设备的物理存储中构成完整的ELF文件包括:所述长度代码对应长度的所述修改后特定函数的二进制代码移至所述偏移值代码对应的位置。
根据本发明的另一方面,还提出了一种差分文件生成装置,包括:源代码修改单元,用于对源代码中的特定函数进行代码修改;编译单元,用于对修改的代码进行编译以生成二进制代码;差分文件生成单元,用于基于所述特定函数的修改后二进制代码,生成差分文件,其中,从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码大小相同。
优选地,所述差分文件生成单元用于:生成包括与所述特定函数的修改前二进制代码大小相同的替换代码的差分文件,所述替换代码能够执行所述修改后的特定函数的至少部分或全部功能。
优选地,所述差分文件生成单元用于:比较所述特定函数的修改后二进制代码与所述特定函数的修改前二进制代码的长度大小;在所述特定函数的修改后二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同;以及基于空指令填充操作后的所述特定函数的修改后二进制代码生成差分文件。
优选地,所述差分文件生成单元进一步用于:在修改后的特定函数的源代码之后填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;在特定函数的修改后二进制代码之后填充空指令直至与所述特定函数的修改前二进制代码长度相同;针对编译过程中的中间代码填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;以及针对修改后的特定函数的源代码、编译过程中的中间代码或特定函数的修改后二进制代码添加填充空指令的指令,以使得所述空指令填充操作后的所述特定函数的修改后二进制代码在所述升级设备上基于所述填充空指令的指令而被填充至与所述特定函数的修改前二进制代码长度相同。
优选地,所述差分文件生成单元进一步用于:在所述特定函数的修改后二进制代码长度大于所述特定函数的修改前二进制代码长度的情况下,将修改后的特定函数进一步划分为主函数以及被所述主函数调用的附加函数,其中,划分主函数和附加函数以使得主函数编译得到的二进制代码长度小于等于所述特定函数的修改前二进制代码长度;在主函数的二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,针对所述主函数填充空指令以使得所述主函数的填充后二进制代码长度与所述特定函数的修改前二进制代码长度相同;使用所述主函数的填充后二进制代码长度作为替换代码以及所述附加函数的二进制代码作为附加代码,生成差分文件。
根据本发明的另一个方面,提出了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上所述的方法。
根据本发明的又一个方面,提出了一种物联网设备,包括:处理器;以及存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上任一项所述的方法。优选地,存储器包括FLASH存储装置。
根据本发明的再一个方面,提出了一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如上任一项所述的方法。
由此,本发明的一种差分文件生成及对应FOTA方案,通过使得修改后的函数编译二进制码与原函数的长度保持一致,去除对其他指令的影响,使得差分文件可以仅包括被修改函数的相关内容,以降低差分文件的大小,提升升级成功率。针对较短的修改后代码,可以通过简单的空指令填充进行补齐,而对应较长的修改后代码,则可通过函数功能的差分,实现相同长度的替换代码以及附于代码段之后的附加代码部分。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1A和1B示出了OTA固件升级时的系统连接例。
图2示出了现有技术中设备端固件升级对其物理存储的固件文本的影响的一个例子。
图3示出了根据本发明一个实施例的差分文件生成方法的流程示意图。
图4示出了根据本发明的设备端固件升级对其物理存储的固件文本的影响的一个例子。
图5示出了修改后的二进制代码小于源代码时进行固件升级的一个例子。
图6示出了修改后的二进制代码大于源代码时进行固件升级的一个例子。
图7示出了常规编译的过程例。
图8示出了根据本发明的差分文件的一个制作例。
图9示出了根据本发明一个实施例的FOTA方法的流程示意图。
图10示出了设备端升级过程的示意图。
图11示出了根据本发明一个实施例的差分文件生成装置的示意性框图。
图12示出了根据本发明一个实施例的计算设备的结构示意图。图13示出了根据本发明一个实施例可用于实现上述FOTA方法的物联网设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
物联网(IoT)是依托互联网、电信网络等信息承载体,让所有能行使独立功能的普通物体实现互联互通的网络。物联网代表着一个重要的发展趋势,逐渐将日常生活中的各个方面相互连接在一起。不同于早期的路由器等无线设备(例如,每个房间或办公室安装一个)在数量上的局限性,物联网能够深入渗透到方方面面,并且可以连接大量的设备。例如,在家庭环境中,我们通过利用物联网技术能够进行远程锁门、开关窗帘、控制照明以及管理温度和湿度等等。
物联网规模化部署面临着众多挑战,例如:众多设备近距共终端和庞大数量的设备互连。这些挑战催生出对FOTA升级的需求,它将是物联网系统必不可缺的一个组成部分。FOTA的有效性已在许多应用程序中得到验证,例如手机会通过定期升级来接收新功能和修补漏洞。为了防范病毒攻击,设备固件可通过FOTA升级流程获得最新补丁和更多安全算法。任何物联网系统都由两个部分组成:硬件和固件。在基于SoC的应用中,FOTA升级功能不仅能够更新固件,还能够重新配置片上硬件资源。
图1A和1B示出了FOTA升级时的系统连接例。如图1A所示,在某些应用场景或是针对某些特定的设备,物联网单芯片设备1可以直接联网,以在检测到有新版本需要安装时从例如OTA管理平台2上下载所需的升级包。而OTA管理平台2上的升级包例如是由设备供应商(未示出)基于原始版本和更新版本制作并上传的。如图1B所示,物联网单芯片设备1也可以经由例如手机或是网关设备3间接OTA管理平台2联网进行升级。此时,可由中间设备3利用OTA APP进行升级包的下载和下发的相关的OTA管理操作。
FOTA升级过程中,由于一次传输的数据大小(比如LoRaWAN不超过250字节)和嵌入式系统的限制,更多采用增量升级方案。在增量升级中,如果差分包过大,需要更多的传输次数和更大的存储空间,容易导致升级失败。
FOTA升级的大部分情况属于bug(故障)修复,可能在源代码上仅仅涉及数行或数十行的修改。但是由于函数编译后大小发生变化,导致链接重定向过程中其他函数的地址也发生变化,影响到地址相关指令,最终使得编译后生成的文件和原始文件相比有较大差分。
图2示出了现有技术中设备端固件升级对其物理存储的固件文本的影响的一个例子。如图2左侧所示,待升级设备例如在其FLASH(闪存)中存储有包括五个函数(foo1~foo5)的固件文本部分。在某次升级中,虽然仅仅涉及对foo1函数源代码的修改,但是在最终得到的二进制代码中,会如图2右侧所示,实质上对后续的每个函数的二进制代码产生影响,由此产生的差分文件也较大。在图2的示例中,灰色背景表示代码受到影响的部分(图4-6下同)。
为此,本发明提出了一种新颖的差分文件生成方案,该方案针对源代码修改导致函数编译后大小变化,从而影响地址相关指令的问题,通过使得修改后的函数编译二进制码与原函数的长度保持一致,去除对其他指令的影响,从而进一步降低差分文件的大小,有效提升升级成功率。
图3示出了根据本发明一个实施例的差分文件生成方法的流程示意图。显然,该方法在用于生成差分文件的主机上进行,其生成的差分文件随后可以被传输到相应的设备端,以供进行固件升级。
在步骤S310,对源代码中的特定函数进行代码修改。在步骤S320,对修改的代码进行编译以生成二进制代码。在步骤S330,基于修改后的特定函数的二进制代码,生成差分文件,其中,从所述差分文件恢复的替换代码大小保持不变,即,与所述特定函数的修改前二进制代码大小相同。换句话说,从差分文件中恢复的替换代码(也可以包括恢复的代码就是差分文件本身的情况)具有与修改前代码相同的长度。长度相同的恢复代码可以用于覆盖升级设备上所述特定函数的修改前二进制代码所占据的相同物理存储空间。
由于升级涉及特定函数的修改,并且最终在设备端上运行的是二进制代码,因此用于发送至设备端的差分文件需要包含修改后的特定函数的二进制代码信息。在不同的实现中,差分文件包含的可以是该二进制代码本身或是其压缩信息(需要在设备端解压缩)。无论是否压缩,通过使得从差分文件中恢复的替换代码具有与所述特定函数的修改前二进制代码相同的大小,从而能够直接覆盖升级设备上该特定函数的修改前二进制代码所占据的物理存储空间,使得该函数的修改不会大致链接重定向过程中其他函数的地址发生变化并影响到地址相关指令,从而可以保证设备端上对应于其他函数的二进制代码不变。
图4示出了根据本发明的设备端固件升级对其物理存储的固件文本的影响的一个例子。类似于上图2,图4左侧示出了待升级设备例如在其FLASH(闪存)中存储有包括五个函数(foo1~foo5)的固件文本部分。在某次升级中,仅仅涉及对foo1函数源代码的修改。由于从差分文件中恢复的替换代码的长度与修改前的foo1代码长度相同,且直接覆盖修改前的foo1二进制代码,因此本次修改对后续函数foo2~foo5是透明的,实质上对后续函数没有任何影响,如图4右侧所示。
差分文件可以直接包括与所述特定函数的修改前二进制代码大小相同的替换代码,所述替换代码能够执行所述修改后的特定函数的至少部分或全部功能。例如,差分文件可以是仅包括替换代码和偏移相关指令的二进制文件,例如下述的bin文件。于是,步骤S330可以包括:生成包括与所述特定函数的修改前二进制代码大小相同的替换代码的差分文件。作为替换,差分文件中可以包括小于修改前二进制代码大小相同的代码(例如,包括空指令填充指令),上述代码在设备端可以被恢复至与所述特定函数的修改前二进制代码大小相同。
在一个实施例中,替换代码可以包括用于将所述特定函数的修改后二进制代码填充至与所述特定函数的修改前二进制代码长度相同的空指令代码。在此,“空指令代码”指的是能够占据升级设备存储空间内的存储位置,但不会引起其进行任何有意义操作的代码。前述的“空指令填充指令”则的是使得空指令代码被填充的指令。例如,foo1函数修改前的二进制代码占据1000个字节,经编译的修改后的二进制代码占据800个字节。此时,可以直接向修改后的二进制代码添加占据200个字节的空指令代码,由此得到组成差分文件的替换代码;也可以向修改后的二进制代码添加上述空指令填充指令,该空指令填充指令本身小于200字节,但会使得差分文件中的替换代码在升级设备上恢复时填充200字节的空指令。
在针对特定函数进行修改时,会遇到修改后函数的二进制代码比原函数小或比原函数大的情况。此时,可以采取不同的操作方法。
于是,步骤S310可以包括:比较所述特定函数的修改后二进制代码与所述特定函数的修改前二进制代码的长度大小;在所述特定函数的修改后二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同;以及基于空指令填充操作后的所述特定函数的修改后二进制代码生成差分文件。由此,通过空指令填充,可以使得原本比原函数代码小的修改后二进制代码被填充成与原函数代码相同长度的替换代码。图5示出了修改后的二进制代码小于源代码时进行固件升级的一个例子。类似于上图2和4,图5左侧示出了待升级设备例如在其FLASH(闪存)中存储有包括五个函数(foo1~foo5)的固件文本部分。在某次升级中,仅仅涉及对foo1函数源代码的修改。由于修改后二进制代码比原函数的二进制代码小(即,长度更短),因此可以在新的foo1函数后面填充空指令,直至其与原foo1函数长度相同,以便且直接覆盖修改前的foo1二进制代码。同样地,本次修改对后续函数foo2~foo5是透明的,实质上对后续函数没有任何影响,如图5右侧所示。
针对修改后的函数的二进制代码比原函数大的情况,步骤S310可以进一步包括:在所述特定函数的修改后二进制代码长度大于所述特定函数的修改前二进制代码长度的情况下,将修改后的特定函数进一步划分为主函数以及被所述主函数调用的附加函数,其中,划分主函数和附加函数以使得主函数编译得到的二进制代码长度小于等于所述特定函数的修改前二进制代码长度;在主函数的二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,针对所述主函数填充空指令以使得所述主函数的填充后二进制代码长度与所述特定函数的修改前二进制代码长度相同;使用所述主函数的填充后二进制代码长度作为替换代码以及所述附加函数的二进制代码作为附加代码,生成差分文件。由此,通过函数功能拆分与跳转,可以使得原本比原函数代码大的修改后二进制代码被拆分成与原函数代码相同长度的替换代码(可能需要填充空指令)以及针对附加函数的附加代码。
图6示出了修改后的二进制代码大于源代码时进行固件升级的一个例子。类似于上图2、4和5,图6左侧示出了待升级设备例如在其FLASH(闪存)中存储有包括五个函数(foo1~foo5)的固件文本部分。在某次升级中,仅仅涉及对foo1函数源代码的修改。由于修改后二进制代码比原函数的二进制代码大(即,长度更长),因此直接将其作为替换代码对原foo1进行替换会导致后续函数代码(例如,foo2函数的部分代码)被覆盖,从而影响固件的正常运行。为此,可以将修改后的函数拆分成主函数和附加函数。例如,在新的foo1函数(对应于主函数)之外追加附加函数foo_tmp,新的foo1函数调用该foo_tmp。在进行函数功能拆分时,需要使得主函数的二进制代码小于(但尽可能接近)原函数foo1的长度。倘若主函数的长度正好等于原函数的长度,则无需额外的空指令填充操作,否则,需要在主函数尾部填充空指令使其与原函数foo1的大小保持一致。对于附加函数foo_tmp,需要首先将其追加到源代码的代码段最后,并将该foo_tmp编译成单独的部分(例如,使用gcc-ffunction-sections编译选项)。在编译的链接阶段,修改链接脚本,将foo_tmp追加到二进制代码段最后。此时,获取的差分文件包括foo1(主函数)和foo_tmp(附加函数)的二进制代码。进一步地,差分文件中还需要包括用于将附加代码追加到升级设备上的代码段后的偏移相关指令。于是,在固件升级时,差分文件中的新fool代码可以直接覆盖修改前的foo1二进制代码,foo_tmp则附接至代码段的最后(例如函数foo5之后)。同样地,本次修改对后续函数foo2~foo5是透明的,实质上对后续函数没有任何影响,如图6右侧所示。
针对修改后的函数(或其主函数)的空指令填充操作可以针对编译前、编译中、编译后的代码进行。具体地,可以在修改后的特定函数的源代码之后填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;在特定函数的修改后二进制代码之后填充空指令直至与所述特定函数的修改前二进制代码长度相同;针对编译过程中的中间代码填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同。图7示出了常规编译的过程例。如图7所示,技术人员在对源代码进行修改之后,需要经过编译、汇编和链接过程得到最终的可执行二进制ELF文件。例如,上述附加函数foo_tmp就需要链接器通过调用链接脚本而附加至ELF文件的原代码段之后。上述编译、汇编和链接过程是广义的“编译”操作所涉及的过程。于是,本发明中的空指令填充,可以是针对源代码的填充,针对中间代码(例如,图示的Asm或Obj文件),或是针对最终得到的ELF文件的填充。
更进一步地,上述填充甚至在升级设备上进行。具体地,可以针对修改后的特定函数的源代码、编译过程中的中间代码或特定函数的修改后二进制代码添加填充空指令的指令,以使得所述空指令填充操作后的所述特定函数的修改后二进制代码在所述升级设备上基于所述填充空指令的指令而被填充至与所述特定函数的修改前二进制代码长度相同。换句话说,可以针对源代码、Asm代码、Obj代码或是二进制代码添加“填充空指令的指令”,上述指令可以最终在升级设备上实现实际的填充操作。在此,应该理解的是,针对不同文件的代码添加,虽然都涉及相同的操作或是空指令,但添加的指令形态各不相同。例如,针对源代码添加空指令涉及源代码指令行的操作,而针对二进制代码添加空指令则涉及直接的二进制数字的添加。
另外,应该理解的是,虽然出于操作方便的考虑,优选直接将空指令添加到有实际意义的代码之后,但在其他实施例中,也可以将空指令穿插在实际代码之中,只要其二进制代码长度与原函数的二进制代码长度相同即可。
图8示出了根据本发明的差分文件的一个制作例。如图所示,主机上保留有固件升级前的二进制ELF文件,并且生成了经过长度补全(例如,空指令填充操作)的修改后的二进制ELF文件。对两个文件进行差分,得到bin文件形式的差分文件。换句话说,本发明的差分文件可以是从编译的ELF文件中提取的仅针对所述特定函数(例如,上例中的foo1函数)的bin文件或其压缩包。该差分文件包括修改后特定函数的二进制代码(填充空指令后的新foo)、修改后特定函数的二进制代码的偏移值代码(即,foo偏移值)和长度代码(即,foo大小)。上述偏移值和代码长度(也可称为代码大小)组成偏移相关指令,可以用于后续在升级设备中将新foo移至覆盖原foo的位置。
另外,在固件升级中包括多个函数修改时,本发明的差分文件可以包括多份替换指令及其各自的偏移相关指令,其中每份替换指令针对多个修改后的特定函数中的一个特定函数。除了foo1涉及修改而包括新foo1和too_tmp之外,例如foo3也涉及修改而包括新foo3和too_tmp3。此时,差分文件可以包括新foo1和too_tmp、新foo3和too_tmp3以及各自的偏移相关指令。升级设备在获取了差分文件之后,可以使用新的foo1和foo3分别替换原foo1和foo3,将too_tmp附接至代码段最后,将too_tmp3附接至too_tmp之后。当然,涉及多个函数的更新,也可以经由不同的差分文件在多次升级中逐个实现。
另外,本发明的差分和升级方法也适用于多次的相续更新。例如,在第一次升级中,原foo1被替换成尾部填充有空指令的新foo1。在第二次升级中,上述新foo1可以被继续替换成更新的foo1和too_tmp。在该第二次升级中,修改前的特定函数的二进制代码其实业已包含了在第一次升级中填充的空指令,但显然上述填充并不影响后续第二次升级的操作。
在生成了上述差分文件之后,本发明还涉及一种FOTA(固件在线升级)方法。图9示出了根据本发明一个实施例的FOTA方法的流程示意图。
在步骤S910,获取如上生成的差分文件。在步骤S920,使用从所述差分文件恢复的替换代码覆盖特定函数的修改前二进制代码所占据的物理存储空间。
在更新的函数代码大于原代码的情况下,差分文件包括对应于主函数二进制代码的替换代码、被所述主函数引用的附加函数的附加代码以及用于将附加代码追加至指定位置的偏移相关指令,其中所述主函数和所述附加函数共同用于实现修改后的特定函数的功能,并且所述方法还包括:基于所述差分文件中包含的偏移相关指令,将所述附加代码追加至固件代码段之后。
在一个实施例中,差分文件是从ELF文件中提取的bin文件,并且使用从所述差分文件恢复的替换代码覆盖特定函数的修改前二进制代码所占据的物理存储空间包括:将所述bin文件覆盖特定函数的修改前二进制代码所占据的物理存储空间以在所述升级设备的物理存储中构成完整的ELF文件。具体地,所述bin文件包括修改后特定函数的二进制代码、所述修改后特定函数的二进制代码的偏移值代码和长度代码,并且,将所述bin文件覆盖特定函数的修改前二进制代码所占据的物理存储空间以在所述升级设备的物理存储中构成完整的ELF文件包括:所述长度代码对应长度的所述修改后特定函数的二进制代码移至所述偏移值代码对应的位置。图10示出了设备端升级过程的示意图。如图所示,Bin文件基于其包括的偏移相关指令将对应的新foo二进制代码覆盖至修改前ELF文件中的指定位置,由此得到修改后的ELF文件。该ELF文件于是可以直接运行用作升级设备的更新固件。
图11示出了根据本公开一个实施例的差分文件生成装置的示意性框图。其中,差分文件生成装置的功能模块可以由实现本公开原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图11所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。
下面就差分文件生成装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关的描述,这里不再赘述。
如图11所示,该差分文件生成装置1100可以包括源代码修改单元1110、编译单元1120和差分文件生成单元1130。源代码修改单元1110可以对源代码中的特定函数进行代码修改。
编译单元1120可以对修改的代码进行编译以生成二进制代码。
差分文件生成单元1130可以基于所述特定函数的修改后二进制代码,生成差分文件,其中,从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码大小相同。由此,恢复的替换代码可以直接用于覆盖升级设备上所述特定函数的修改前二进制代码所占据的物理存储空间。
可选地,所述差分文件生成单元可以用于:生成包括与所述特定函数的修改前二进制代码大小相同的替换代码的差分文件,所述替换代码能够执行所述修改后的特定函数的至少部分或全部功能。
可选地,所述差分文件生成单元可以用于:比较所述特定函数的修改后二进制代码与所述特定函数的修改前二进制代码的长度大小;在所述特定函数的修改后二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同;以及基于空指令填充操作后的所述特定函数的修改后二进制代码生成差分文件。
可选地,所述差分文件生成单元可以进一步用于:在修改后的特定函数的源代码之后填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;在特定函数的修改后二进制代码之后填充空指令直至与所述特定函数的修改前二进制代码长度相同;针对编译过程中的中间代码填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;以及针对修改后的特定函数的源代码、编译过程中的中间代码或特定函数的修改后二进制代码添加填充空指令的指令,以使得所述空指令填充操作后的所述特定函数的修改后二进制代码在所述升级设备上基于所述填充空指令的指令而被填充至与所述特定函数的修改前二进制代码长度相同。
可选地,所述差分文件生成单元可以进一步用于:在所述特定函数的修改后二进制代码长度大于所述特定函数的修改前二进制代码长度的情况下,将修改后的特定函数进一步划分为主函数以及被所述主函数调用的附加函数,其中,划分主函数和附加函数以使得主函数编译得到的二进制代码长度小于等于所述特定函数的修改前二进制代码长度;在主函数的二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,针对所述主函数填充空指令以使得所述主函数的填充后二进制代码长度与所述特定函数的修改前二进制代码长度相同;使用所述主函数的填充后二进制代码长度作为替换代码以及所述附加函数的二进制代码作为附加代码,生成差分文件。
图12示出了根据本发明一个实施例的计算设备的结构示意图。
参见图12,计算设备1200包括存储器1210和处理器1220。
处理器1220可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器1220可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器1220可以使用定制的电路实现,例如特定用途集成电路(ASIC)或者现场可编程逻辑门阵列(FPGA)。
存储器1210可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器1220或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器1210可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器1210可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器1210上存储有可执行代码,当可执行代码被处理器1220处理时,可以使处理器1220执行上文述及的差分文件生成方法。
图13示出了根据本发明一个实施例可用于实现上述FOTA方法的物联网设备的结构示意图。
参见图13,物联网设备1300包括存储器1310和处理器1320,并且优选实现为一个单芯片的嵌入式系统。存储器1310可以包括各种类型的存储单元,例如系统内存和永久存储装置。永久存储装置例如可以实现为本发明中的FLASH存储空间,并且是在设备断电后也不会失去存储的指令和数据的非易失性存储设备。
存储器1310上存储有可执行代码,当可执行代码被处理器1320处理时,可以使处理器1320执行上文述及的差分文件生成方法。
上文中已经参考附图详细描述了根据本发明的差分文件生成方法和装置。
该方案针对源代码修改导致函数编译后大小变化,从而影响地址相关指令的问题,通过使得修改后的函数编译二进制码与原函数的长度保持一致,去除对其他指令的影响,从而进一步降低差分文件的大小,有效提升升级成功率。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (23)

1.一种差分文件生成方法,包括:
对源代码中的特定函数进行代码修改;
对修改的代码进行编译以生成二进制代码;
基于所述特定函数的修改后二进制代码,生成差分文件,其中,从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码大小相同。
2.如权利要求1所述的方法,其中,基于所述特定函数的修改后二进制代码,生成差分文件包括:
生成包括与所述特定函数的修改前二进制代码大小相同的替换代码的差分文件,所述替换代码能够执行所述修改后的特定函数的至少部分或全部功能。
3.如权利要求2所述的方法,其中,所述差分文件是仅包括所述替换代码和偏移相关指令的二进制文件。
4.如权利要求2所述的方法,其中,所述替换代码包括用于将所述特定函数的修改后二进制代码填充至与所述特定函数的修改前二进制代码长度相同的空指令代码。
5.如权利要求1所述的方法,其中,基于所述特定函数的修改后二进制代码,生成差分文件包括:
比较所述特定函数的修改后二进制代码与所述特定函数的修改前二进制代码的长度大小;
在所述特定函数的修改后二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同;以及
基于空指令填充操作后的所述特定函数的修改后二进制代码生成差分文件。
6.如权利要求5所述的方法,其中,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同包括如下至少一项:
在修改后的特定函数的源代码之后填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;
在特定函数的修改后二进制代码之后填充空指令直至与所述特定函数的修改前二进制代码长度相同;
针对编译过程中的中间代码填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;以及
针对修改后的特定函数的源代码、编译过程中的中间代码或特定函数的修改后二进制代码添加填充空指令的指令,以使得所述空指令填充操作后的所述特定函数的修改后二进制代码在所述升级设备上基于所述填充空指令的指令而被填充至与所述特定函数的修改前二进制代码长度相同。
7.如权利要求5所述的方法,其中,基于所述特定函数的修改后二进制代码,生成差分文件还包括:
在所述特定函数的修改后二进制代码长度大于所述特定函数的修改前二进制代码长度的情况下,将修改后的特定函数进一步划分为主函数以及被所述主函数调用的附加函数,其中,划分主函数和附加函数以使得主函数编译得到的二进制代码长度小于等于所述特定函数的修改前二进制代码长度;
在主函数的二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,针对所述主函数填充空指令以使得所述主函数的填充后二进制代码长度与所述特定函数的修改前二进制代码长度相同;
使用所述主函数的填充后二进制代码长度作为替换代码以及所述附加函数的二进制代码作为附加代码,生成差分文件。
8.如权利要求7所述的方法,其中,所述差分文件中还包括用于将所述附加代码追加到升级设备上的代码段后的偏移相关指令。
9.如权利要求1所述的方法,其中,所述差分文件是从编译的ELF文件中提取的仅针对所述特定函数的bin文件或其压缩包。
10.如权利要求9所述的方法,其中,所述差分文件包括多份替换指令及其各自的偏移相关指令,其中每份替换指令针对多个修改后的特定函数中的一个特定函数。
11.一种FOTA(固件在线升级)方法,包括:
获取如权利要求1-10中任一项所述的差分文件;以及
使用从所述差分文件恢复的替换代码覆盖特定函数的修改前二进制代码所占据的相同物理存储空间。
12.如权利要求11所述的方法,其中,所述差分文件包括对应于主函数二进制代码的替换代码、被所述主函数引用的附加函数的附加代码以及用于将附加代码追加至指定位置的偏移相关指令,其中所述主函数和所述附加函数共同用于实现修改后的特定函数的功能,并且所述方法还包括:
基于所述差分文件中包含的偏移相关指令,将所述附加代码追加至固件代码段之后。
13.如权利要求11所述的方法,其中,所述差分文件是从ELF文件中提取的bin文件,并且使用从所述差分文件恢复的替换代码覆盖特定函数的修改前二进制代码所占据的物理存储空间包括:
将所述bin文件覆盖特定函数的修改前二进制代码所占据的物理存储空间以在所述升级设备的物理存储中构成完整的ELF文件。
14.如权利要求13所述的方法,其中,所述bin文件包括修改后特定函数的二进制代码、所述修改后特定函数的二进制代码的偏移值代码和长度代码,并且,将所述bin文件覆盖特定函数的修改前二进制代码所占据的物理存储空间以在所述升级设备的物理存储中构成完整的ELF文件包括:
所述长度代码对应长度的所述修改后特定函数的二进制代码移至所述偏移值代码对应的位置。
15.一种差分文件生成装置,包括:
源代码修改单元,用于对源代码中的特定函数进行代码修改;
编译单元,用于对修改的代码进行编译以生成二进制代码;
差分文件生成单元,用于基于所述特定函数的修改后二进制代码,生成差分文件,其中,从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码大小相同。
16.如权利要求15所述的装置,其中,所述差分文件生成单元用于:
生成包括与所述特定函数的修改前二进制代码大小相同的替换代码的差分文件,所述替换代码能够执行所述修改后的特定函数的至少部分或全部功能。
17.如权利要求15所述的装置,其中,所述差分文件生成单元用于:
比较所述特定函数的修改后二进制代码与所述特定函数的修改前二进制代码的长度大小;
在所述特定函数的修改后二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,进行空指令填充操作使得从所述差分文件恢复的替换代码与所述特定函数的修改前二进制代码长度相同;以及
基于空指令填充操作后的所述特定函数的修改后二进制代码生成差分文件。
18.如权利要求17所述的装置,其中,所述差分文件生成单元进一步用于:
在修改后的特定函数的源代码之后填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;
在特定函数的修改后二进制代码之后填充空指令直至与所述特定函数的修改前二进制代码长度相同;
针对编译过程中的中间代码填充空指令以使得编译得到的填充后二进制代码与所述特定函数的修改前二进制代码长度相同;以及
针对修改后的特定函数的源代码、编译过程中的中间代码或特定函数的修改后二进制代码添加填充空指令的指令,以使得所述空指令填充操作后的所述特定函数的修改后二进制代码在所述升级设备上基于所述填充空指令的指令而被填充至与所述特定函数的修改前二进制代码长度相同。
19.如权利要求17所述的装置,其中,所述差分文件生成单元进一步用于:
在所述特定函数的修改后二进制代码长度大于所述特定函数的修改前二进制代码长度的情况下,将修改后的特定函数进一步划分为主函数以及被所述主函数调用的附加函数,其中,划分主函数和附加函数以使得主函数编译得到的二进制代码长度小于等于所述特定函数的修改前二进制代码长度;
在主函数的二进制代码长度小于所述特定函数的修改前二进制代码长度的情况下,针对所述主函数填充空指令以使得所述主函数的填充后二进制代码长度与所述特定函数的修改前二进制代码长度相同;
使用所述主函数的填充后二进制代码长度作为替换代码以及所述附加函数的二进制代码作为附加代码,生成差分文件。
20.一种计算设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1-10中任一项所述的方法。
21.一种物联网设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求11-14中任一项所述的方法。
22.如权利要求21所述的设备,其中,所述存储器包括FLASH存储装置。
23.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1-14中任一项所述的方法。
CN201910395530.3A 2019-05-13 2019-05-13 差分文件生成及固件在线升级的方法和装置 Pending CN111930412A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910395530.3A CN111930412A (zh) 2019-05-13 2019-05-13 差分文件生成及固件在线升级的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910395530.3A CN111930412A (zh) 2019-05-13 2019-05-13 差分文件生成及固件在线升级的方法和装置

Publications (1)

Publication Number Publication Date
CN111930412A true CN111930412A (zh) 2020-11-13

Family

ID=73282647

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910395530.3A Pending CN111930412A (zh) 2019-05-13 2019-05-13 差分文件生成及固件在线升级的方法和装置

Country Status (1)

Country Link
CN (1) CN111930412A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113721966A (zh) * 2021-08-27 2021-11-30 杭州华橙软件技术有限公司 节点升级方法、装置、存储介质及电子装置
CN115291918A (zh) * 2022-10-08 2022-11-04 紫光同芯微电子有限公司 用于智能卡的代码升级方法及装置、电子设备、存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
CN101937340A (zh) * 2009-06-29 2011-01-05 中兴通讯股份有限公司 使用补丁对软件进行动态升级与控制的方法和装置
CN103197942A (zh) * 2013-03-18 2013-07-10 华为技术有限公司 一种补丁的生成方法、打补丁的方法及装置
US20150082294A1 (en) * 2012-05-28 2015-03-19 Huawei Device Co., Ltd. Method and Apparatus for Generating Firmware Over the Air Upgrade Package
CN105354045A (zh) * 2014-08-21 2016-02-24 中兴通讯股份有限公司 补丁的制作方法及装置、补丁的激活方法及装置
CN107943544A (zh) * 2017-12-11 2018-04-20 北京奇虎科技有限公司 一种内核补丁的加载方法及装置
CN109426515A (zh) * 2017-09-04 2019-03-05 中兴通讯股份有限公司 升级包的生成方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
CN101937340A (zh) * 2009-06-29 2011-01-05 中兴通讯股份有限公司 使用补丁对软件进行动态升级与控制的方法和装置
US20150082294A1 (en) * 2012-05-28 2015-03-19 Huawei Device Co., Ltd. Method and Apparatus for Generating Firmware Over the Air Upgrade Package
CN103197942A (zh) * 2013-03-18 2013-07-10 华为技术有限公司 一种补丁的生成方法、打补丁的方法及装置
CN105354045A (zh) * 2014-08-21 2016-02-24 中兴通讯股份有限公司 补丁的制作方法及装置、补丁的激活方法及装置
CN109426515A (zh) * 2017-09-04 2019-03-05 中兴通讯股份有限公司 升级包的生成方法及装置
CN107943544A (zh) * 2017-12-11 2018-04-20 北京奇虎科技有限公司 一种内核补丁的加载方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
姜文 等: "基于VXWORKS系统的热补丁技术研究", 《计算机技术与发展》, vol. 27, no. 3, 10 March 2017 (2017-03-10), pages 18 - 22 *
胡勇其 等: "Linux目标代码内核补丁的机理和应用", 《计算机工程与应用》, 11 November 2004 (2004-11-11), pages 121 - 123 *
腾讯开发者: "应用程序热补丁(一):几行代码构造免重启修复补丁", pages 1 - 5, Retrieved from the Internet <URL:https://blog.csdn.net/karamos/article/details/80128679> *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113721966A (zh) * 2021-08-27 2021-11-30 杭州华橙软件技术有限公司 节点升级方法、装置、存储介质及电子装置
CN113721966B (zh) * 2021-08-27 2024-03-29 杭州华橙软件技术有限公司 节点升级方法、装置、存储介质及电子装置
CN115291918A (zh) * 2022-10-08 2022-11-04 紫光同芯微电子有限公司 用于智能卡的代码升级方法及装置、电子设备、存储介质

Similar Documents

Publication Publication Date Title
Marrón et al. FlexCup: A flexible and efficient code update mechanism for sensor networks
CN109491695B (zh) 一种集成安卓应用的增量更新方法
US7716414B2 (en) Method for updating a mobile device using an update package obtained from a remote server
WO2016192197A1 (zh) 一种终端的软件升级方法、装置、系统和计算机存储介质
CN105786538B (zh) 基于安卓系统的软件升级方法和装置
US20170262276A1 (en) Minimizing Image Copying During Partition Updates
CN107506219A (zh) 一种基于Android系统的通用版本升级方法
US10846073B2 (en) Methods, apparatuses, terminals, servers, and systems for container generation
US20070220504A1 (en) Flash Memory Programming
CN104714819A (zh) 文件系统升级包制作方法、升级方法及装置、终端
US20070294686A1 (en) Program upgrade system and method for ota-capable device
Panta et al. Zephyr: Efficient incremental reprogramming of sensor nodes using function call indirections and difference computation
CN103701930A (zh) 一种移动应用程序的实时更新方法及系统
EP3803573B1 (en) Delta file with reversing data
CN105487907A (zh) 一种差分包的制作方法和装置
CN106371881B (zh) 一种用于服务器内程序版本更新的方法和系统
CN104899025A (zh) 一种生成渠道包的方法和装置
CN107357607B (zh) 文件数据的读取方法及装置
CN111930412A (zh) 差分文件生成及固件在线升级的方法和装置
CN104754062A (zh) 基于互联网的信息推广方法、服务器及用户终端
US20190095187A1 (en) Incremental updates in static libraries
CN104427119A (zh) 通信终端及其非易失性数据的处理方法
CN112835975B (zh) 一种在区块链中部署、更新、调用智能合约的方法
WO2017016479A1 (zh) 一种文件下载方法和装置
CN108170459B (zh) 软件升级方法、智能终端及具有存储功能的装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40039410

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination