CN110928570A - 一种固件升级的方法及装置、可读存储介质 - Google Patents
一种固件升级的方法及装置、可读存储介质 Download PDFInfo
- Publication number
- CN110928570A CN110928570A CN201911189104.0A CN201911189104A CN110928570A CN 110928570 A CN110928570 A CN 110928570A CN 201911189104 A CN201911189104 A CN 201911189104A CN 110928570 A CN110928570 A CN 110928570A
- Authority
- CN
- China
- Prior art keywords
- patch
- address
- jump table
- space
- firmware
- 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
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
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)
Abstract
本申请提供一种固件升级的方法及装置、可读存储介质。该方法包括获取当前版本固件的待应用补丁的补丁文件;所述补丁文件中包括补丁代码、补丁空间地址、补丁对应的跳转表地址;将所述补丁代码写入到所述补丁空间地址中;所述补丁空间地址对应的补丁空间为预先擦除的空间;将所述补丁对应的跳转表地址修改为所述补丁空间地址;所述补丁对应的跳转表地址对应的跳转表空间均为预先擦除的空间。该方法提高了固件升级的稳定性和安全性。
Description
技术领域
本申请涉及物联网技术领域,具体而言,涉及一种固件升级的方法及装置、可读存储介质。
背景技术
在物联网嵌入式产品在进行固件升级时,需要先下载固件保存到内存(或到保留存储空间中),然后将原来存储空间擦除后写入新的固件。
在物联网领域中,大多数嵌入式产品都是使用flash来存储程序,当设备固件升级时,需要重新将flash按照扇区(或整块)擦除后才能够重新写入。由于需要在升级过程中进行擦除,在固件升级后,需要重新启动,都比较浪费时间,而且重启会导致业务中断。另外,在升级过程中也不能断电,如果出现断电或者升级过程中重启,将导致系统无法恢复正常。
因此,现有的固件升级的方式可能导致系统无法正常运行或者业务中断,稳定性和安全性较差。
发明内容
本申请实施例的目的在于提供一种固件升级的方法及装置、可读存储介质,用以提高固件升级的稳定性和安全性。
第一方面,本申请实施例提供一种固件升级的方法,包括:获取当前版本固件的待应用补丁的补丁文件;所述补丁文件中包括补丁代码、补丁空间地址、补丁对应的跳转表地址;将所述补丁代码写入到所述补丁空间地址中;所述补丁空间地址对应的补丁空间为预先擦除的空间;将所述补丁对应的跳转表地址修改为所述补丁空间地址;所述补丁对应的跳转表地址对应的跳转表空间为预先擦除的空间。
在本申请实施例中,在应用补丁时,先将补丁代码写到对应的补丁空间地址中,然后再将补丁对应的跳转表地址修改后的补丁空间地址。与现有技术相比,一方面,对于跳转表空间,用于存储跳转表地址,当修改跳转表地址时,跳转表地址对应的空间是预先擦除的,可以直接进行修改,不用进行擦除,进而也不用重启,服务不中断;另一方面,在写入补丁代码时,补丁空间也是预先擦除的空间,可以直接写入补丁代码,不用进行擦除,进而也不用重启,服务也不中断。因此,该固件升级的方法在应用补丁进行升级时,可不进行擦除,进而不需要进行重启,也不用中断服务,避免重启引起的中断服务导致的系统无法正常运行的情况,提高了固件升级的安全性和稳定性。
作为一种可能的实现方式,在获取当前版本固件的待应用补丁的补丁文件之前,所述方法还包括:将所述当前版本固件写入flash存储器的固件空间中;所述flash存储器还包括补丁空间和跳转表空间;将所述flash存储器中的跳转表空间和补丁空间全部进行擦除。
在本申请实施例中,flash存储器中包括固件空间、补丁空间和跳转表空间,在将固件写入固件空间中后,可以将flash存储器中的跳转表空间和补丁空间进行擦除,进而在对当前版本固件进行补丁升级时,可以不进行擦除,进而不需要进行重启,也不用中断服务,提高固件升级的安全性和稳定性。
作为一种可能的实现方式,将所述补丁代码写入所述补丁空间地址中,包括:对所述补丁文件进行校验;在所述补丁文件校验通过时,将所述补丁代码写入到所述补丁空间地址中。
在本申请实施例中,在写入补丁代码时,先对补丁文件进行校验,校验通过后再将补丁代码写入到补丁空间中。
作为一种可能的实现方式,将补丁对应的跳转表地址修改为所述补丁空间地址,包括:校验所述补丁代码是否写入成功;在所述补丁代码写入成功时,将补丁对应的跳转表地址修改为所述补丁空间地址。
在本申请实施例中,在修改跳转表地址时,先校验补丁代码是否写入成功,可以提高升级的稳定性。
第二方面,本申请实施例还提供一种固件升级的方法,包括:
在运行当前版本固件时,检测所述当前版本固件中的预设跳转表位置的跳转表地址;判断检测到的跳转表地址是否为补丁地址;若检测到的跳转表地址是补丁地址,跳转到所述补丁地址对应的补丁空间地址中,以执行所述补丁空间地址中的补丁代码。
在本申请实施例中,在固件升级后,运行当前版本固件时,若检测到补丁地址,就会通过跳转到补丁地址对应的补丁空间地址中执行补丁代码,进而在升级完成后无需重启,系统可以正常运行。
作为一种可能的实现方式,在检测所述当前版本固件中的预设跳转表位置的跳转表地址之前,所述方法还包括:采用与地址无关的编译方式编译所述当前版本固件的源代码,以运行所述当前版本固件;对应的,检测所述当前版本固件中的预设跳转表位置的跳转表地址,包括:调用所述源代码中的宏代码,检测预设跳转表位置的跳转表地址,其中,每个预设跳转表位置对应一个宏代码。
在本申请实施例中,可以采用与地址无关的编译方式编译所述当前版本固件的源代码,使编译不受固件位置的影响;进而在检测时,可以通过调用源代码中的宏代码对跳转表地址进行检测。
作为一种可能的实现方式,判断检测到的跳转表地址是否为补丁地址,包括:若检测到的跳转表地址为0xfffffffff或者0,确定检测到的跳转表地址不是补丁地址;若检测到的跳转表地址为除0xfffffffff或者0外的地址,确定检测到的跳转表地址是补丁地址。
在本申请实施例中,跳转表空间如果擦除,擦除后的跳转表空间中的地址为0xffffffff,如果检测到的跳转表地址是该地址,说明该跳转表地址为默认的地址,没有经过写入或者修改,不是对应的补丁地址;如果检测到的跳转表地址是0,跳转表地址中写入0代表回滚操作,例如升级失败等情况,不是对应的补丁地址;如果检测到的跳转表地址是除这两地址以外的地址,说明该跳转表地址是被修改或者写入过的,是对应的补丁地址。
第三方面,本申请实施例提供一种固件升级的装置,所述装置包括用于实现第一方面以及第一方面任意一种可能的实现方式中所述的方法的功能模块。
第四方面,本申请实施例提供一种固件升级的装置,所述装置包括用于实现第二方面以及第二方面任意一种可能的实现方式中所述的方法的功能模块。
第五方面,本申请实施例提供一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被计算机运行时执行如第一方面以及第一方面任意一种可能的实现方式中所述的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的固件升级的方法的流程图。
图2为本申请实施例提供的flash存储空间示意图。
图3为本申请实施例提供的固件升级的装置的功能模块框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请实施例的技术方案中所涉及到的固件升级的方法,可以应用于嵌入式设备。此外,该固件升级是通过打补丁的方式实现的升级,对于嵌入式设备的固件来说,难免会出现BUG,补丁可以用于专门修复这些BUG。在升级时,给固件打上补丁,在固件下次运行时,就可以通过打上的补丁修复BUG,不再出现原来的问题。因此,给固件打补丁也是一种固件升级的过程。
基于上述应用场景,请参照图1,为本申请实施例提供的固件升级的方法,该方法包括:
步骤101:获取当前版本固件的待应用补丁的补丁文件。补丁文件中包括补丁代码、补丁空间地址、补丁对应的跳转表地址。
步骤102:将补丁代码写入到所述补丁空间地址中。补丁空间地址对应的补丁空间为预先擦除的空间。
步骤103:将补丁对应的跳转表地址修改为所述补丁空间地址。补丁对应的跳转表地址对应的跳转表空间为预先擦除的空间。
该固件升级的方法与现有技术相比,在应用补丁时,先将补丁代码写到对应的补丁空间地址中,然后再将补丁对应的跳转表地址修改后的补丁空间地址。一方面,对于跳转表空间,用于存储跳转表地址,当修改跳转表地址时,跳转表地址对应的空间是预先擦除的,可以直接进行修改,不用进行擦除,进而也不用重启,服务不中断;另一方面,在写入补丁代码时,补丁空间也是预先擦除的空间,可以直接写入补丁代码,不用进行擦除,进而也不用重启,服务也不中断。因此,该固件升级的方法在应用补丁进行升级时,可不进行擦除,进而不需要进行重启,也不用中断服务,避免重启引起的中断服务导致的系统无法正常运行的情况,提高了固件升级的安全性和稳定性。
接下来对步骤101-步骤103的实施流程作介绍。
在步骤101中,对于当前版本固件的待应用补丁的补丁文件,可以是预先制作好的。
在补丁文件的制作过程中,先基于补丁代码(原版本)生成待应用补丁的补丁条目信息,补丁条目信息包括:补丁代码的内容、补丁大小、补丁代码所在补丁空间的地址以及补丁对应的跳转表的地址。生成的补丁条目信息可以如表1所示:
表1
在生成补丁条目信息后,添加补丁文件头生成补丁文件,补丁文件的格式可以如表2所示:
固件版本号 | 补丁文件大小 | 补丁数目 | 补丁文件md5 |
表2
在生成补丁文件后,待应用补丁制作完成。因此,在制作待应用补丁时,可通过制作待应用补丁的补丁文件实现,在补丁文件中,既包括待应用补丁的补丁代码,还包括待应用补丁的补丁空间地址以及对应的跳转表地址等信息。
在获取到补丁文件后,可以执行步骤102,将补丁文件中的补丁代码写入到补丁空间地址中。对于步骤102和步骤103中提到的补丁空间和跳转表空间,且均为预先擦除的空间。接下来对跳转表空间和补丁空间进行介绍。
对于嵌入式设备来说,存储程序的存储器一般为flash存储器(也称闪存),是一种非易失性内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是flash存储器得以成为各类便携型数字设备的存储介质的基础。此外,flash存储器的存储空间进行擦除后,所有的字节都为1,且只能写入一次数据,除非写入的数据为0。因此,在本申请实施例中,在步骤101之前,还可以对flash存储器的存储空间进行分配和处理,以实现步骤101-步骤103。该处理过程可以包括:将当前版本固件写入flash存储器的固件空间中;flash存储器还包括补丁空间和跳转表空间;将flash存储器中的跳转表空间和补丁空间进行擦除。
在上述处理过程中,flash存储器的存储空间相当于被划分成了固件空间、跳转表空间以及补丁空间。当把固件(当前版本固件)写入到固件空间中后,可以将跳转表空间以及补丁空间进行擦除,当擦除后,跳转表空间和补丁空间中的所有字节均为1,其中存储的地址默认为0xffffffff。并且,将flash存储器中的空间进行擦除后,在后续的处理过程中,在写入数据时,例如修改跳转表空间的跳转表地址或者在补丁空间地址中写入数据时,都不需要再进行擦除,可以直接进行修改。
在本申请实施例中,flash存储器中包括固件空间、补丁空间和跳转表空间,在将固件写入固件空间中后,可以将flash存储器中的跳转表空间和补丁空间进行擦除,进而在对当前版本固件进行升级时,可以不进行擦除,进而不需要进行重启,也不用中断服务,提高固件升级的安全性和稳定性。
基于此,在步骤102中,可以不需要重启将补丁代码写入到补丁空间地址中。作为一种可能的实现方式,步骤102可以包括:对补丁文件进行校验;在补丁文件校验通过时,将所述补丁代码写入到补丁空间地址中。
其中,对补丁文件进行校验可以包括:计算补丁文件的md5与补丁文件中的md5进行比较,如果不一致则校验不通过;如果一致则校验通过。计算补丁文件的大小与补丁文件中记录的补丁文件大小进行对比,如果不一致则校验不通过;如果一致则校验通过。对比设备使用的当前固件版本号与补丁文件中的固件版本号,如果不一致则校验不通过;如果一致则校验通过。
进一步的,若补丁文件校验通过,将补丁代码写入对应的补丁空间地址中。可以理解,在补丁空间中也包括多个位置,不同的位置可以通过补丁空间地址进行区分,在写入内容时,需要将内容写入对应的地址中。举例来说,在补丁空间中有三个地址,补丁文件中记录的对应的地址为地址二,在写入补丁代码时,就将补丁代码写入补丁空间的地址二中。可以理解,由于补丁空间是预先进行擦除的空间,在写入补丁代码时,不管是写入地址还是具体的代码,都可以直接写入,而无需进行擦除后再写入。
在步骤102后,可以执行步骤103,修改补丁对应的跳转表地址,一种可能的实施方式:校验补丁代码是否写入成功;在补丁代码写入成功时,将补丁对应的跳转表地址修改为补丁空间地址。
在这个过程中,校验补丁代码是否写入成功,可以通过校验补丁空间地址是否有对应的补丁代码的方式实现,如果没有对应的补丁代码,说明写入失败;如果有,且和补丁文件中的一致,说明写入成功。在修改补丁对应的跳转表地址时,由于补丁对应的跳转表地址也是对应存储在跳转表空间中的,跳转表空间是预先擦除的空间,因此,可以直接对其进行修改,无需进行擦除后再写入。
在完成步骤103后,相当于完成了给固件应用补丁的过程,这样在运行版本固件时,就可以通过运行对应的补丁,完成程序BUG的修复。基于此,本申请实施例还提供一种固件升级的方法,该方法涉及到补丁应用后的固件构建过程,该方法包括:在运行当前版本固件时,检测当前版本固件中的预设跳转表位置的跳转表地址;判断检测到的跳转表地址是否为补丁地址;若检测到的跳转表地址是补丁地址,跳转到补丁地址对应的补丁空间地址中,以执行补丁空间地址中的补丁代码。
其中,预设跳转表位置指的是当前版本固件中的代码位置。在当前版本固件中,不是所有的代码都存在着BUG,因此,只需要检测固定代码段的代码即可。
在检测时,作为一种可能的实施方式:调用当前版本固件中的宏代码,检测预设跳转表位置的跳转表地址,其中,每个预设跳转表位置对应一个宏代码。在这种实施方式中,相当于提供宏代码,该宏代码可以理解为检测功能的函数声明,当调用该宏代码时,就会执行该检测功能,检测预设跳转表位置的跳转表地址。此外,每个预设跳转表位置对应一个宏代码,可通过提供的宏代码可自动的每使用一次,就增加一个计数使之指向正确的跳转表位置实现。举例来说,位置1设置有一个宏代码,假设宏代码一,那么对应的,位置2设置的宏代码为宏代码二;位置3设置的宏代码为宏代码三,依次类推。需要注意的是,每个宏代码中只是指向的跳转表位置不同,其他部分是相同的,因为检测的原理都是相同的,例如宏代码一的跳转表位置是1,宏代码二的跳转表位置是2,就是在宏代码一的基础上加一个计数实现的。
当前,除了调用宏代码检测跳转表地址,也可以通过其他能够实现检测跳转表地址的实施方式进行检测。
此外,在本申请实施例中,可以采用与地址无关的编译方式编译当前版本固件的源代码,以运行当前版本固件。进一步的,在检测跳转表地址时,可以通过调用所述源代码中的宏代码,检测预设跳转表位置的跳转表地址,其中,每个预设跳转表位置对应一个宏代码。这个检测的过程与前述实施例中的检测过程是一致的。
在本申请实施例中,可以采用与地址无关的编译方式编译所述当前版本固件的源代码,使编译不受固件位置的影响;进而在检测时,可以通过调用源代码中的宏代码对跳转表地址进行检测。
进一步的,对于判断检测到的跳转表地址是否为补丁地址,可以包括:若检测到的跳转表地址为0xfffffffff或者0,确定检测到的跳转表地址不是补丁地址;若检测到的跳转表地址为除0xfffffffff或者0外的地址,确定检测到的跳转表地址是补丁地址。
在这种实施方式中,可以理解,跳转表空间如果擦除,擦除后的跳转表空间中的地址为0xffffffff,如果检测到的跳转表地址是该地址,说明该跳转表地址为默认的地址,没有经过写入或者修改,不是对应的补丁地址;如果检测到的跳转表地址是0,跳转表地址中写入0代表回滚操作,例如升级失败等情况,不是对应的补丁地址;如果检测到的跳转表地址是除这两地址以外的地址,说明该跳转表地址是被修改或者写入过的,是对应的补丁地址。
进一步的,若检测到的跳转表地址是补丁地址,那么可以跳转到补丁地址对应的补丁空间地址中,运行对应的补丁代码。对于该过程,可以参照图2,为flash中的存储空间的存储示意图,在图2中,为应用了两个补丁的flash内存情况,跳转表中记录了两个补丁的地址,当func1执行时,所对应的跳转表中的内容为0x08040400,因此会跳转到补丁1执行补丁代码,而fun2对应的跳转表处对应的跳转表为0,说明补丁2有问题进行了回滚操作,继续执行fun2处的功能,而func3对应的跳转表处的地址为0xffffffff,说明没有对应的补丁,执行func3时正常执行func3代码。
可以理解的是,在运行当前版本固件时,假如检测到的跳转表地址是补丁地址,那么就会跳转到补丁地址对应的补丁代码,执行该补丁代码;假设检测到的跳转表地址不是补丁地址,就不执行补丁代码,继续执行原代码。不管哪种情况,都会根据跳转表地址进行对应的操作,那么对应的,在给固件应用补丁后,可以不需要重启,直接运行当前版本固件。可见,采用本申请实施例的固件升级的方法,不仅在应用补丁的过程中不需要重启系统,在应用补丁后,也不需要重启,极大地提高了固件升级的安全性的稳定性。
此外,在本申请实施例中,在制作补丁文件时,补丁文件可以是可扩展的,可扩展的一个补丁文件中可以包含多个补丁。并且,每个补丁都可以使用跳转表的方式进行再次应用补丁,即针对一个补丁,都可以按照步骤101-步骤103的过程进行再次应用补丁。
此外,如果发现写入的补丁有问题,在步骤103后,还可以通过在补丁代码对应的补丁地址处写入0,即执行回滚操作,使该对应的补丁无效掉,实现补丁的去激活。
在本申请实施例中,固件写入时对应的跳转表空间和补丁空间全部进行擦除(擦除后所有的bit为1),在升级过程中,写入补丁文件,然后将补丁代码对应的地址写入到跳转表对应的地址(flash支持一次写入4字节或8字节),从而可以做完无需擦除flash即可进行补丁升级。在进行补丁升级过程中,首先写入补丁代码,然后再修改对应跳转表中的内容,在嵌入式设备的固件开发中,设计代码通常也是重复性的任务,打完补丁后,代码重新执行即可生效(判断跳转表中对应的地址不是0xffffffff并且也不是0而是对应的补丁代码地址),系统不用重启。升级过程只是将补丁代码写入补丁空间,然后将对应的补丁代码地址写入到跳转表相应的空间中,当代码再次运行后即可生效,服务不中断。此外,还利用flash在不擦除的时候可以写入0的特性,在要求补丁去激活的场景下,通过往在对应的跳转表中写入0去激活对应的补丁的效果。
基于同一发明构思,请参照图3,本申请实施例中还提供一种固件升级的装置200,包括:获取模块201、写入模块202、修改模块203。
获取模块201,用于获取当前版本固件的待应用补丁的补丁文件;所述补丁文件中包括补丁代码、补丁空间地址、补丁对应的跳转表地址。写入模块202,用于将所述补丁代码写入到所述补丁空间地址中。修改模块203,用于将所述补丁对应的跳转表地址修改为所述补丁空间地址;所述补丁空间地址对应的补丁空间和所述补丁对应的跳转表地址对应的跳转表空间均为预先擦除的空间。
可选的,写入模块还用于将所述当前版本固件写入flash存储器的固件空间中;所述flash存储器还包括补丁空间和跳转表空间。该装置还包括擦除模块,用于将所述flash存储器中的跳转表空间和补丁空间全部进行擦除。
可选的,写入模块202具体用于:对所述补丁文件进行校验;在所述补丁文件校验通过时,将所述补丁代码写入到所述补丁空间地址中。
可选的,修改模块203具体用于:校验所述补丁代码是否写入成功;在所述补丁代码写入成功时,将补丁对应的跳转表地址修改为所述补丁空间地址。
基于同一发明构思,本申请实施例还提供一种固件升级的装置,包括:
检测模块,用于在运行当前版本固件时,检测所述当前版本固件中的预设跳转表位置的跳转表地址。判断模块,用于判断检测到的跳转表地址是否为补丁地址。跳转模块,用于若检测到的跳转表地址是补丁地址,跳转到所述补丁地址对应的补丁空间地址中,以执行所述补丁空间地址中的补丁代码。
可选的,该装置还包括编译模块,用于:采用与地址无关的编译方式编译所述当前版本固件的源代码,以运行所述当前版本固件。对应的,检测模块具体还用于:调用所述源代码中的宏代码,检测预设跳转表位置的跳转表地址,其中,每个预设跳转表位置对应一个宏代码。
可选的,判断模块具体还用于:若检测到的跳转表地址为0xfffffffff或者0,确定检测到的跳转表地址不是补丁地址;若检测到的跳转表地址为除0xfffffffff或者0外的地址,确定检测到的跳转表地址是补丁地址。
前述实施例中的固件升级的方法中的各实施方式和具体实例同样适用于本申请实施例提供的固件升级的装置,通过前述对固件升级的方法的详细描述,本领域技术人员可以清楚的知道固件升级的装置的实施方法,所以为了说明书的简洁,在此不再详述。
基于同一发明构思,本申请实施例还提供一种可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被计算机运行时执行上述任一实施方式的固件升级的方法。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种固件升级的方法,其特征在于,包括:
获取当前版本固件的待应用补丁的补丁文件;所述补丁文件中包括补丁代码、补丁空间地址、补丁对应的跳转表地址;
将所述补丁代码写入到所述补丁空间地址中;所述补丁空间地址对应的补丁空间为预先擦除的空间;
将所述补丁对应的跳转表地址修改为所述补丁空间地址;所述补丁对应的跳转表地址对应的跳转表空间为预先擦除的空间。
2.根据权利要求1所述的方法,其特征在于,在获取当前版本固件的待应用补丁的补丁文件之前,所述方法还包括:
将所述当前版本固件写入flash存储器的固件空间中;所述flash存储器还包括补丁空间和跳转表空间;
将所述flash存储器中的跳转表空间和补丁空间全部进行擦除。
3.根据权利要求1所述的方法,其特征在于,将所述补丁代码写入所述补丁空间地址中,包括:
对所述补丁文件进行校验;
在所述补丁文件校验通过时,将所述补丁代码写入到所述补丁空间地址中。
4.根据权利要求3所述的方法,其特征在于,将补丁对应的跳转表地址修改为所述补丁空间地址,包括:
校验所述补丁代码是否写入成功;
在所述补丁代码写入成功时,将补丁对应的跳转表地址修改为所述补丁空间地址。
5.一种固件升级的方法,其特征在于,包括:
在运行当前版本固件时,检测所述当前版本固件中的预设跳转表位置的跳转表地址;
判断检测到的跳转表地址是否为补丁地址;
若检测到的跳转表地址是补丁地址,跳转到所述补丁地址对应的补丁空间地址中,以执行所述补丁空间地址中的补丁代码。
6.根据权利要求5所述的固件升级的方法,其特征在于,在检测所述当前版本固件中的预设跳转表位置的跳转表地址之前,所述方法还包括:
采用与地址无关的编译方式编译所述当前版本固件的源代码,以运行所述当前版本固件;
对应的,检测所述当前版本固件中的预设跳转表位置的跳转表地址,包括:
调用所述源代码中的宏代码,检测预设跳转表位置的跳转表地址,其中,每个预设跳转表位置对应一个宏代码。
7.根据权利要求6所述的方法,其特征在于,判断检测到的跳转表地址是否为补丁地址,包括:
若检测到的跳转表地址为0xfffffffff或者0,确定检测到的跳转表地址不是补丁地址;
若检测到的跳转表地址为除0xfffffffff或者0外的地址,确定检测到的跳转表地址是补丁地址。
8.一种固件升级的装置,其特征在于,包括:
获取模块,用于获取当前版本固件的待应用补丁的补丁文件;所述补丁文件中包括补丁代码、补丁空间地址、补丁对应的跳转表地址;
写入模块,用于将所述补丁代码写入到所述补丁空间地址中;
修改模块,用于将所述补丁对应的跳转表地址修改为所述补丁空间地址;所述补丁空间地址对应的补丁空间和所述补丁对应的跳转表地址对应的跳转表空间均为预先擦除的空间。
9.一种固件升级的装置,其特征在于,包括:
检测模块,用于在运行当前版本固件时,检测所述当前版本固件中的预设跳转表位置的跳转表地址;
判断模块,用于判断检测到的跳转表地址是否为补丁地址;
跳转模块,用于若检测到的跳转表地址是补丁地址,跳转到所述补丁地址对应的补丁空间地址中,以执行所述补丁空间地址中的补丁代码。
10.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序,所述计算机程序被计算机运行时执行如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911189104.0A CN110928570A (zh) | 2019-11-27 | 2019-11-27 | 一种固件升级的方法及装置、可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911189104.0A CN110928570A (zh) | 2019-11-27 | 2019-11-27 | 一种固件升级的方法及装置、可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110928570A true CN110928570A (zh) | 2020-03-27 |
Family
ID=69846732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911189104.0A Pending CN110928570A (zh) | 2019-11-27 | 2019-11-27 | 一种固件升级的方法及装置、可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928570A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111552503A (zh) * | 2020-05-12 | 2020-08-18 | 重庆科技学院 | 工程文件处理方法、装置、计算机设备及存储介质 |
WO2023098569A1 (zh) * | 2021-12-01 | 2023-06-08 | 华为技术有限公司 | 补丁处理方法、装置及计算机设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1475909A (zh) * | 2002-08-16 | 2004-02-18 | 华为技术有限公司 | 一种嵌入式系统软件补丁的实现和控制方法 |
US20120102476A1 (en) * | 2010-02-11 | 2012-04-26 | Yu Jiaqiang | Method, device and system for activating on-line patch |
CN102982277A (zh) * | 2012-12-24 | 2013-03-20 | 广东威创视讯科技股份有限公司 | 一种实现嵌入式系统软件补丁的方法和系统 |
CN103412779A (zh) * | 2013-08-14 | 2013-11-27 | 浙江大学 | 一种嵌入式实时操作系统的补丁文件系统实现方法 |
CN103530184A (zh) * | 2013-10-24 | 2014-01-22 | 华为技术有限公司 | 一种在线补丁激活的方法及装置 |
CN104809018A (zh) * | 2015-05-18 | 2015-07-29 | 烽火通信科技股份有限公司 | 一种嵌入式系统软件注入热补丁的方法及系统 |
-
2019
- 2019-11-27 CN CN201911189104.0A patent/CN110928570A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1475909A (zh) * | 2002-08-16 | 2004-02-18 | 华为技术有限公司 | 一种嵌入式系统软件补丁的实现和控制方法 |
US20120102476A1 (en) * | 2010-02-11 | 2012-04-26 | Yu Jiaqiang | Method, device and system for activating on-line patch |
CN102982277A (zh) * | 2012-12-24 | 2013-03-20 | 广东威创视讯科技股份有限公司 | 一种实现嵌入式系统软件补丁的方法和系统 |
CN103412779A (zh) * | 2013-08-14 | 2013-11-27 | 浙江大学 | 一种嵌入式实时操作系统的补丁文件系统实现方法 |
CN103530184A (zh) * | 2013-10-24 | 2014-01-22 | 华为技术有限公司 | 一种在线补丁激活的方法及装置 |
CN106484369A (zh) * | 2013-10-24 | 2017-03-08 | 华为技术有限公司 | 一种在线补丁激活的方法及装置 |
CN104809018A (zh) * | 2015-05-18 | 2015-07-29 | 烽火通信科技股份有限公司 | 一种嵌入式系统软件注入热补丁的方法及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111552503A (zh) * | 2020-05-12 | 2020-08-18 | 重庆科技学院 | 工程文件处理方法、装置、计算机设备及存储介质 |
WO2023098569A1 (zh) * | 2021-12-01 | 2023-06-08 | 华为技术有限公司 | 补丁处理方法、装置及计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106095620B (zh) | 一种嵌入式Linux存储分区的开发方法 | |
US10642596B2 (en) | Embedded device and program updating method | |
CN104239082A (zh) | 嵌入式系统的热补丁实现方法 | |
CN105677415A (zh) | 热更新方法及装置 | |
CN111562934B (zh) | 一种基于热补丁的软件系统升级方法、终端及存储介质 | |
CN104808951A (zh) | 进行存储控制的方法和设备 | |
US20160170735A1 (en) | Operating system updating method by using a checklist | |
CN106528106A (zh) | 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 | |
JP2012198878A (ja) | 半導体不揮発性メモリ装置のリフレッシュ操作開始方法およびシステム | |
JP6157637B2 (ja) | リードライトメモリデバイスのデータイメージ中の仮想境界コード | |
CN105786537A (zh) | 一种热补丁的实现方法和装置 | |
CN111813428A (zh) | 终端固件的升级方法、装置、电子设备及存储介质 | |
CN105468384A (zh) | 车载控制器的烧写系统、方法、服务器和烧写终端 | |
CN105630557A (zh) | 热补丁方法和装置 | |
CN110928570A (zh) | 一种固件升级的方法及装置、可读存储介质 | |
CN104484185A (zh) | 固件生成系统及方法 | |
CN104978223A (zh) | 实现Web方式升级设备固件的方法 | |
WO2015184732A1 (zh) | 引导程序的存储方法、故障恢复方法及设备、计算机存储介质 | |
CN107168750B (zh) | 一种固件升级保护方法及系统 | |
CN113220319A (zh) | 一种数据更新方法、装置及车辆 | |
CN111142922A (zh) | 应用程序更新方法、装置、终端及服务器 | |
CN110196730B (zh) | 应用程序的热补丁管理方法、装置和存储介质 | |
US8510614B2 (en) | Bad block identification methods | |
CN112860287A (zh) | 系统程序升级方法、装置、计算机设备及存储介质 | |
CN105577451A (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 |