WO2019080840A1 - 固件修复方法及装置 - Google Patents
固件修复方法及装置Info
- Publication number
- WO2019080840A1 WO2019080840A1 PCT/CN2018/111459 CN2018111459W WO2019080840A1 WO 2019080840 A1 WO2019080840 A1 WO 2019080840A1 CN 2018111459 W CN2018111459 W CN 2018111459W WO 2019080840 A1 WO2019080840 A1 WO 2019080840A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- firmware
- segment
- damaged
- signature
- version
- Prior art date
Links
Images
Classifications
-
- 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)
Abstract
本公开提供了一种固件修复方法及装置,其中,该方法包括:检测所述设备的固件是否损坏;在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与固件的损坏位置对应。通过本公开,解决了相关技术中无法自动修复固件的技术问题。
Description
本公开涉及电子技术领域,具体而言,涉及一种固件修复方法及装置。
在嵌入式软件开发过程中,产品的固件总会小概率的被破坏,破坏的原因有很多,例如:在读写flash过程中,设备异常断电;flash长时间使用过程中产生坏块,或者位翻转;软件崩溃,导致写入flash的内容不正确等等。一旦出现固件损坏,产品肯定不能正常运行,更严重的是,设备有可能变成砖头,无法通过软件升级来修改该问题。当然固件遭到破坏的概率很低,对于消费类电子设备来说,这个概率是可以接受的,但是对于车载产品,工业产品,由于这类产品的使用周期都很长,而且一旦出现问题,维修成本很高,例如:车载T-BOX一旦出问题,客户就要把车开到4S店,让专业人员拆机修复。更严重的是,对于车载模块来说,由于模块是作为车载行车电脑的一个部件,一旦出问题,会导致整个行车电脑不能使用。所以,即使出现问题的概率很低,也不能接受。
相关技术中,出现固件损坏时,一般都需要通过专业的售后人员通过软件升级工具重新下载固件,更为严重的是,当设备变成砖头时,需要售后人员拆开设备,通过短接flash的方法,使设备进入到紧急下载模式,然后通过下载工具下载版本。
这样导致的问题就是,无法自动修复固件,如果要修复,必须用户到专门的售后点取维修,维修时间长,成本高,用户在维修过程中无法使用设备,用户体验非常不好。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
公开内容
本公开实施例提供了一种固件修复方法及装置,以至少解决相关技术中无法自动修复固件的技术问题。
根据本公开的一个实施例,提供了一种固件修复方法,包括:检测所述设备的固件是否损坏;在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与固件的损坏位置对应。
可选地,检测所述设备的固件是否损坏包括:分段检测所述固件是否损坏,其中,所述固件通过标签进行分段标记。
可选地,在检测所述设备的固件是否损坏之前,所述方法还包括:在所述固件生成后,分段标记所述固件,并将标记的标签写入镜像文件;下载所述固件和所述标签到所述设备。
可选地,检测所述设备的固件是否损坏包括:计算所述固件各个分段的签名;遍历比较所述签名与各个分段在所述镜像文件中的标签是否对应;在第一分段的签名与所述第一分段在所述镜像文件中的标签不对应时,确定所述固件损坏,其中,所述第一分段是所述 固件的任一分段。
可选的,在确定所述固件损坏之后,所述方法还包括:记录所述第一分段的签名,所述签名用于表征所述第一分段在所述固件中的位置。
可选地,使用所述正确版本修复所述固件包括:重启所述设备进入恢复recovery模式;从服务器获取所述第一分段的正确版本;使用所述正确版本覆盖损坏的所述第一分段。
可选地,分段标记所述固件包括以下之一:根据所述固件的存储媒介类型确定分段的大小,并标记各个分段;根据所述设备的传输速率确定分段的大小,并标记各个分段。
可选地,在使用正确版本修复所述固件之后,所述方法还包括:重启所述设备。
根据本公开的另一个实施例,提供了一种固件修复装置,包括:检测模块,用于检测所述设备的固件是否损坏;修复模块,用于在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与固件的损坏位置对应。
可选地,所述装置还包括:标记模块,用于在所述检测模块检测所述设备的固件是否损坏之前,在所述固件生成后,分段标记所述固件,并将标记的标签写入镜像文件;下载模块,用于下载所述固件和所述标签到所述设备。
可选地,所述检测模块包括:计算单元,用于计算所述固件各个分段的签名;比较单元,用于遍历比较所述签名与各个分段在所述镜像文件中的标签是否对应;确定单元,用于在第一分段的签名与所述第一分段在所述镜像文件中的标签不对应时,确定所述固件损坏,其中,所述第一分段是所述固件的任一分段。
可选地,所述修复模块包括:重启单元,用于重启所述设备进入恢复recovery模式;获取单元,用于从服务器获取所述第一分段的正确版本;修复单元,用于使用所述正确版本覆盖损坏的所述第一分段。
根据本公开的又一个实施例,还提供了一种存储介质。该存储介质设置为存储用于执行以下步骤的程序代码:
检测所述设备的固件是否损坏;
在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与固件的损坏位置对应。
通过本公开,在设备启动时,检测所述设备的固件是否损坏;在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与损坏的固件对应。解决了相关技术中无法自动修复固件的技术问题,提高了用户体验。
此处所说明的附图用来提供对本公开的进一步理解,构成本申请的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:
图1是本公开实施例的一种固件修复方法的车载终端的硬件结构框图;
图2是根据本公开实施例的固件修复的流程图;
图3是根据本公开实施例的固件修复装置的结构框图;
图4是本公开实施例的系统组件示意图;
图5为本实例提供的方法的流程示意图;
图6是本公开实施例的分段标签生成图;
图7是本公开实施例的嵌入式设备固件检测修复流程图;
图8是本实施例的版本服务器传输固件分段流程图;
图9是本实施例按页大小分段时嵌入式设备固件检测修复流程图。
下文中将参考附图并结合实施例来详细说明本公开。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
本申请实施例一所提供的方法实施例可以在车载终端、计算机终端或者类似的运算装置中执行。以运行在车载终端上为例,图1是本公开实施例的一种固件修复方法的车载终端的硬件结构框图。如图1所示,车载终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,车载终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本公开实施例中的固件修复方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至车载终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络实例可包括车载终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种固件修复方法,图2是根据本公开实施例的固件修复的流程 图,如图2所示,该流程包括如下步骤:
步骤S202,检测设备的固件是否损坏;
步骤S204,在检测到固件损坏时,使用正确版本修复固件,其中,正确版本与固件的损坏位置对应。
通过上述步骤,检测所述设备的固件是否损坏;在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与损坏的固件对应。解决了相关技术中无法自动修复固件的技术问题,提高了用户体验。
在本实施例中,检测设备的固件是否损坏的时机可以是在加载固件的设备启动时,或者是固件更新时,或者是对固件进行配置操作时。
可选地,上述步骤的执行主体可以为任意需要加载固件的设备,如嵌入式设备,例如包括车载设备tbox,ufi,数据卡,手机等,但不限于此。
可选地,在检测设备的固件是否损坏之前,将整个固件分成多个分段,包括:
S11,在固件生成后,分段标记固件,并将标记的标签写入镜像文件;
S12,下载固件和标签到设备。
可选地,检测设备的固件是否损坏包括:
S21,计算固件各个分段的签名;
S22,遍历比较签名与各个分段在镜像文件中的标签是否对应;
S23,在第一分段的签名与第一分段在镜像文件中的标签不对应时,确定固件损坏,其中,第一分段是固件的任一或者是任意多个分段。如固件被标记被10个分段,其中第3分段与该分段在镜像文件中的标签不对应,则表明第3分段以损坏,整个固件不能使用。
可选的,在确定固件损坏之后,方法还包括:记录第一分段的签名,签名用于表征第一分段在固件中的位置。
可选地,使用正确版本修复固件包括:
S31,重启设备进入恢复recovery模式;
S32,从服务器获取第一分段的正确版本;该服务器可以是终端外部的,也可以是终端内部。
S33,使用正确版本覆盖损坏的所述第一分段。
可选的,分段标记固件包括以下之一:根据固件的存储媒介类型确定分段的大小,并标记各个分段;根据设备的传输速率确定分段的大小,并标记各个分段。
例如,如果嵌入式终端使用了flash媒介存储固件,分段大小可以是flash的块大小或者页大小,也可以是块大小和页大小的整数倍,这样可以提高固件读取的效率。如果嵌入式终端和版本服务器之间的传输媒介速率很高,我们可以将分段大小取大些,这样可以缩短固件校验时间;如果嵌入式终端盒版本服务器之间的传输媒介速率低或者需要花费费用,可以将分段大小取小一些。
可选的,在使用正确版本修复固件之后,方法还包括:重启设备。使设备进入正常运 行状态,整个过程不需要人为参与。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本公开各个实施例所述的方法。
实施例2
在本实施例中还提供了一种固件修复装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图3是根据本公开实施例的固件修复装置的结构框图,如图3所示,该装置包括:
检测模块30,用于检测设备的固件是否损坏;
修复模块32,用于在检测到固件损坏时,使用正确版本修复固件,其中,正确版本与固件的损坏位置对应。
可选的,装置还包括:标记模块,用于在检测模块检测设备的固件是否损坏之前,在固件生成后,分段标记固件,并将标记的标签写入镜像文件;下载模块,用于下载固件和标签到设备。
可选的,检测模块包括:计算单元,用于计算固件各个分段的签名;比较单元,用于遍历比较签名与各个分段在镜像文件中的标签是否对应;确定单元,用于在第一分段的签名与第一分段在镜像文件中的标签不对应时,确定固件损坏,其中,第一分段是固件的任一分段。
可选的,修复模块包括:重启单元,用于重启设备进入恢复recovery模式;获取单元,用于从服务器获取第一分段的正确版本;修复单元,用于使用正确版本覆盖损坏的第一分段。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
本实施例是根据本公开的可选实施例,用于对本申请进行补充和详细说明:
在本实施例的方案中,当设备出现固件损坏时,能够检测到固件损坏,然后设备自动运行到能够升级固件的模式,自动修复固件。当然整个固件升级肯定是行得通的,但是全版本升级非常耗费时间,并且如果通过网络升级,会消耗很多的网络资源。由于固件损坏一般都是flash上的一页或者几页损坏,优选的方案中,检测到损坏的位置,只需要修复 这几页就可以了,没有必要进行全版本升级。
本实施例实现了一种自动检测固件损坏,自动定位固件损坏的位置,自动下载固件损坏部分对应的正确软件,并且自动修复损坏软件的方法和系统。
本系统包含嵌入式固件分段标记工具、嵌入式终端设备和版本服务器。当嵌入式固件生成时,分段标记工具会将嵌入式固件分段打标签,并将所有的标签写入到一个专有的版本镜像文件中;嵌入式设备在启动过程中会按照与分段标记工具相同的分段方式计算各个分段的标签,当检测到不一致时,嵌入式设备从版本服务器获取损坏段固件,然后修复损坏段;版本服务器,存放嵌入式设备的固件,当收到嵌入式终端的请求时,会将终端要求的固件分段发送给嵌入式终端。
在一个实施例中,分段标记工具,会在嵌入式终端固件生成后,按照一定的长度对固件进行分段,然后采用特定的算法对每一分段进行签名,签名算法目前已经有多种成熟的算法,例如:循环冗余校验(Cyclic Redundancy Check,CRC),安全哈希算法(Secure Hash Algorithm,SHA),证书签名等,本公开不限定签名算法。分段标记工具会将所有分段的标签写入到一个专门的版本镜像文件中,为了便于快速查找,这些分段标签可以用哈希表,或者常用的数据结构进行存储。
固件分段大小的选择可以结合实际情况选择。如果嵌入式终端使用了flash媒介存储固件,分段大小可以是flash的块大小或者页大小,也可以是块大小和页大小的整数倍,这样可以提高固件读取的效率。如果嵌入式终端和版本服务器之间的传输媒介速率很高,我们可以将分段大小取大些,这样可以缩短固件校验时间;如果嵌入式终端和版本服务器之间的传输媒介速率低或者需要花费费用,可以将分段大小取小一些。
另外固件分段大小如果是存储媒介的最小读取尺寸,我们可以采取按需校验,只有该段固件需要执行时,从存储媒介加载到内存后,首先校验该分段固件,校验通过后再执行该分段固件。
嵌入式终端,为了方便理解,首先介绍下常见嵌入式终端的工作模式,目前很多嵌入式终端都有两种工作模式:正常模式和recovery模式,两种模式运行不同的操作系统和根文件系统,正常情况下设备都运行在正常模式下,只有在升级版本时才会进入到recovery模式下。
嵌入式终端在启动时,首先将固件加载到内存中,然后按照与分段标记工具同样的方式:相同的分段方法,相同的签名计算方法,签名方法可以是,CRC,SHA,证书签名等,计算分段签名(分段的签名),我们称该签名为SIG1,然后从签名镜像文件中读取分段标签工具生成的该分段的标签,我们用SIG2表示,如果:
SIG1!=SIG2
则固件已经损坏,记录固件损坏的分段编号,并设置启动recovery系统的标记,然后重启嵌入式终端。在重启时,bootloader(启动装载)检测到进入recovery系统的标记,进入到recovery模式,进入到recovery模式后,嵌入式终端连接版本服务器,连接方式可 以是通过tcp,udp,串口等成熟的通讯方式,甚至,当版本服务器就在嵌入式终端内部时,连接方式可以是本地读取文件的方式。连接到版本服务器后,将版本号和损坏固件分段的编号,发送给版本服务器,版本服务器将该分段对应的正确的固件和分段标签发送给嵌入式终端。嵌入式终端会用正确的固件分段覆盖算坏的分段,并更新分段标签,然后清除进入recovery的标记,重启设备。
另外,嵌入式终端还可以根据不同的固件分段大小采取不同的固件分段检测策略。当分段大小为nand flash的页大小时,不用在启动时对所有分段进行检测,只有在某段固件要执行,要从flash加载到内存中时,再做该段固件的完整性的检测,如果检测通过,嵌入式设备继续运行,如果失败,则记录损坏的分段编号,设备重启,进入到recovery模式,修复损坏的固件。这样对设备的启动速度影响会减少到最小。
版本服务器,版本服务器保存着终端的固件版本和标签镜像文件,接收来自嵌入式终端的分段版本请求,根据嵌入式终端发送的版本号和分段编号,将对应固件版本的特定分段和该分段对应的签名信息发送给嵌入式终端。该服务器是广域网中的一台服务器,也可以是与嵌入式终端处在同一局域网中的一台智能终端、嵌入式设备等,甚至可以位于嵌入式终端内部的一个软件服务。
本实施例包括多个实施方式:
装置侧方法实施方式一
本实例提供了一种自动检测固件损坏,自动定位固件损坏的位置,自动下载固件损坏部分对应的正确软件,并且自动修复损坏软件的方法和系统。图4是本公开实施例的系统组件示意图,如图4所示,包含嵌入式固件分段标记工具101、嵌入式终端设备102和版本服务器103。分段标记工具101将嵌入式固件分段打标签,并将所有的标签写入到一个专有的版本镜像文件中,固件和标签文件会同时存储在嵌入式设备102和版本服务器103中;嵌入式设备102和版本服务器103物理上通过USB连接,通过TCP进行通讯。嵌入式设备102在启动过程中会按照与分段标记工具相同的分段方式计算各个分段的标签,当检测到不一致时,嵌入式设备102从版本服务器103获取损坏段固件,然后修复损坏段;版本服务器103,存放嵌入式设备的固件和标签文件,当收到嵌入式终端的请求时,会将终端要求的固件分段发送给嵌入式终端。
图5为本实例提供的方法的流程示意图,包括:
步骤S201:嵌入式终端固件生成后,分段标记工具会将嵌入式固件分段打标签,并将所有的标签写入到一个专有的版本镜像文件中。
步骤S202:通过固件下载工具将固件和标签同时下载到嵌入式终端中,后续嵌入式终端在每次启动时都会通过标签检查固件是否被损坏。
步骤S203:嵌入式启动时,会按照与分段标记工具相同的分段方式计算各个分段的标签,然后与标签镜像文件中对应分段的标签比较,检查是否一致,如果不一致则,该段分段已损坏,如果一致,则该分段正常。嵌入式终端循环检测固件所有分段的签名,如果 都正确,则执行步骤S204,否则执行步骤S205。
步骤S204:由于固件的所有分段签名都是正确的,所以固件没有损坏,嵌入式终端执行正常的启动流程。
步骤S205:执行到这一步,说明固件已经损坏,记录损坏的固件分段,重启嵌入式终端,进入recovery模式,然后嵌入式终端连接到版本服务器,将固件版本号和损坏分段号发送给版本服务器,版本服务器根据版本号的分段号,将正确的固件分段发送给嵌入式终端。
步骤S206:嵌入式终端拿到正确的固件分段后,将错误的固件分段擦除,然后重新写入正确的固件分段,然后重启嵌入式终端,让终端进入到正常启动模式。
分段标记工具将固件分段打标签,用于后续的固件损坏检测,本实例中,签名算法采用哈希算法SHA256,分段长度是nand flash的块大小,目前常见的nand flash块大小是128Kbyte。图6是本公开实施例的分段标签生成图,见图6所示:
301是嵌入式设备的固件,逻辑上我们按照128Kbyte的长度将固件301分段,并且每个分段都有一个逻辑上的编号,本实例中编号从1开始;302是分段标记工具,分段标记工具将固件301的每个分段采用SHA256算法哈希,生成一个32字节的哈希值,这个值就是一段固件的标签;303是标签镜像文件,保存着通过分段标记工具302生成的分段标签,每个标签都有个编号,编号和固件的分段编号一一对应。
固件分段大小的选择可以结合实际情况选择。如果嵌入式终端使用了flash媒介存储固件,分段大小可以是flash的块大小或者页大小,也可以是块大小和页大小的整数倍,这样可以提高固件读取的效率。如果嵌入式终端和版本服务器之间的传输媒介速率很高,我们可以将分段大小取大些,这样可以缩短固件校验时间;如果嵌入式终端盒版本服务器之间的传输媒介速率低或者需要花费费用,可以将分段大小取小一些。
另外固件分段大小如果是存储媒介的最小读取尺寸,我们可以采取按需校验,只有该段固件需要执行时,从存储媒介加载到内存后,首先校验该分段固件,校验通过后再执行该分段固件。
嵌入式设备使用过程中,如果由于某种原因,固件发生了损坏,嵌入式设备会检测固件的损坏,并自动修复固件,图7是本公开实施例的嵌入式设备固件检测修复流程图,流程见图7:
步骤401:设备上电启动
步骤402:嵌入式设备上电后首先加载bootloader,在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。bootloader一般存放在EPROM或者NOR flash中,这些存储介质的寿命都很长,不容易损坏,所以这段固件不做损坏检查。
步骤403:bootloader加载固件和固件标签到内存中,此时固件还没有开始运行,只 是加载到内存中。
步骤404:bootloader按照与分段标记工具相同的方式,将固件逻辑上进行分段,并且从第一个分段开发,采用SHA 256算法计算分段标签,这个标签称之为SIGi1,然后从嵌入式设备中保存的分段标签中读出该分段对应的标签SIGi2。
固件分段大小的选择可以结合实际情况选择。如果嵌入式终端使用了flash媒介存储固件,分段大小可以是flash的块大小或者页大小,也可以是块大小和页大小的整数倍,这样可以提高固件读取的效率。如果嵌入式终端和版本服务器之间的传输媒介速率很高,我们可以将分段大小取大些,这样可以缩短固件校验时间;如果嵌入式终端盒版本服务器之间的传输媒介速率低或者需要花费费用,可以将分段大小取小一些。
另外固件分段大小如果是存储媒介的最小读取尺寸,我们可以采取按需校验,只有该段固件需要执行时,从存储媒介加载到内存后,首先校验该分段固件,校验通过后再执行该分段固件。
步骤S405:比较SIGi1和SIGi2是否相等,如果相等,执行步骤S406,否则执行步骤S408。
步骤S406:执行到这一步,说明当前的分段标签正确,此时检查当前分段是否是固件的最后一个分段,如果是,说明固件的所有分段标签都是正确的,执行步骤S407,否则,跳到步骤S404,继续检查下一个分段的标签是否正确。
步骤S407:如果执行到这一步,说明固件的标签全部正确,固件没有被损坏,则开始执行固件,设备正常启动。
步骤S408:如果执行到这一步,说明固件的当前分段签名校验失败,记录当前分段编号,并将设备的启动模式修改为recovery模式,然后重启设备。
步骤S409:recovery模式下,设备运行另外一套的固件,该固件只保证设备具有基本的功能,该基本功能可以保证嵌入式设备能够从版本服务器获取正确的固件分段,并修复该分段。设备进入到recovery模式后,通过tcp与版本服务器连接,然后将设备的当前的固件版本号和损坏分段的分段编号发送给版本服务器,然后服务器会将正确的固件分段发给嵌入式设备。
版本服务器,可以是运行在远端的一台服务器,也可以是运行在嵌入式终端的一个应用程序。
步骤S410:将损坏的固件分段擦除,然后写入正确的固件分段。保险期间,将该分段的标签也重新写入到设备中。
步骤S411:将设备的模式修改成正常模式,然后跳到步骤S401重新执行正常启动流程。
在本实例中,版本服务器是通过USB接口与嵌入式终端连接的一个智能设备,嵌入式设备作为版本服务器的一个模块,为版本服务器实现无线上网的功能,其特征是有较大的flash存储空间,用来保存嵌入式设备的固件。图8是本实施例的版本服务器传输固件 分段流程图,嵌入式设备与版本服务器传输固件分段的示例流程见图8:
由于本实例中,嵌入式设备与版本服务器集成在一起,所以在传输版本分段时,没有采用加密传输的方式,实际实现过程中,可以根据需要,增加SSL等加密传输的机制。
步骤S501:版本服务器启动后,会开启TCP服务,等待嵌入式设备的连接请求。
步骤S502:嵌入式设备箱版本服务器发送tcp建立请求,经过tcp的三次握手后,tcp连接建立成功。
步骤S503:嵌入式设备发送固件版本号和出现故障的固件分段编号给版本服务器。
步骤S504:版本服务器根据接收的版本号和分段编号,从本地保存的固件版本中查找对应的分段和分段标签,查到后,将分段和分段标签发送给嵌入式设备。
步骤S505:嵌入式设备收到固件分段和分段标签后,采用SHA256计算该分段对应的分段标签,这个标签我们称之SIGi1,从版本服务器收到的标签称之SIGi2。
步骤S506:比较SIGi1和SIGi2,如果相等,收到的固件分段正确,执行步骤S507,否则跳到步骤S503尝试重新获取固件分段,总的尝试次数不超过3次。
步骤S507:分段获取正确。
装置侧方法实施方式二
本实施方式大部分实现都和实施方式一相同,唯一的区别是嵌入式设备启动过程中对分段的检测过程不一样,下来示意性说明嵌入式设备的固件校验过程。
当嵌入式设备的固件很大时,设备运行时,不是所有的固件都运行,如果启动过程中,对所有固件都检测,则启动时间会增加很多,所以我们可以选择合适固件的分段大小,使得分段大小正好是读flash的最小单元,也就是flash的页大小,固件分段的校验放在放在将固件分段加载到内存的时刻,这样,固件校验花费的额外时间,只是从内存中计算签名的时间,这个时间很短,几乎可以忽略不计。这种校验方式特别对有文件系统的固件非常有效,我们拿带linux操作系统的嵌入式设备举例说明。图9是本实施例按页大小分段时嵌入式设备固件检测修复流程图,校验流程见图9:
步骤601:设备上电启动
步骤602:嵌入式设备上电后首先加载bootloader,bootloader再加载kernel,由于kernel的校验可以用实施方式一中的方式进行校验,这里就不细说了。
步骤603:kernel加载完成后,会开始运行根文件系统上的应用程序,运行应用程序时,首先要将程序加载到内存中,应用程序保存在flash上,读flash的最小单元是flash页大小,正好与固件的分段大小一致,所以可以在读入一页时,进行固件分段校验。
步骤604:kernel采用SHA 256算法计算分段标签,这个标签称之为SIGi1,然后从嵌入式设备中保存的分段标签中读出该分段对应的标签SIGi2。
步骤S605:比较SIGi1和SIGi2是否相等,如果相等,执行步骤S606,否则执行步骤S608。
步骤S606:执行到这一步,说明当前的分段标签正确,此时检查当前分段是否是应 用程序的最后一个分段,如果是,说明应用程序的所有分段标签都是正确的,执行步骤S607,否则,跳到步骤S604,继续检查下一个分段的标签是否正确。
步骤S607:如果执行到这一步,说明应用程序的标签全部正确,固件没有被损坏,则开始执行应用程序,设备正常启动。
步骤S608:如果执行到这一步,说明固件的当前分段签名校验失败,记录当前分段编号,并将设备的启动模式修改为recovery模式,然后重启设备。
步骤S609:recovery模式下,设备运行另外一套的固件,该固件只保证设备具有基本的功能,该基本功能可以保证嵌入式设备能够从版本服务器获取正确的固件分段,并修复该分段。设备进入到recovery模式后,通过tcp与版本服务器连接,然后将设备的当前的固件版本号和损坏分段的分段编号发送给版本服务器,然后服务器会将正确的固件分段发给嵌入式设备。
步骤S610:将损坏的固件分段擦除,然后写入正确的固件分段。保险期间,将该分段的标签也重新写入到设备中。
步骤S611:将设备的模式修改成正常模式,然后跳到步骤S601重新执行正常启动流程。
本实施例的方案可以应用在车载Tbox或者车载通讯模块产品,一般都会通过USB接口与汽车的车机连接,车机一般运行android等只能操作系统,具有较大的FLASH空间,所以我们可以把tbox或者车载模块的固件版本放到车机上,当车载tbox或者车载模块的固件损坏时,可以通过tcp从车机上获取正确的固件。该方式可以很方便的实现固件自动修复。
另外,物联网中,设备都分布在各个角落,设备一旦出现固件损坏,维护成本将会非常高,而且物联网模块一搬都使用NB-IOT,或者MTC,这些技术的速率非常低,本公开可以方便快捷的修复模块的固件。
当然其他嵌入式设备,例如ufi,数据卡,手机等,都可以采用本公开进行固件修复。
实施例4
本公开的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S1,检测设备的固件是否损坏;
S2,在检测到固件损坏时,使用正确版本修复固件,其中,正确版本与固件的损坏位置对应。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行检测设备的固件是否损坏;
可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行在检测到固件损坏时,使用正确版本修复固件,其中,正确版本与固件的损坏位置对应。
可选地,本实施例中的示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本公开的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本公开不限制于任何特定的硬件和软件结合。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
根据本公开提供的固件修复方案,在设备启动时,检测所述设备的固件是否损坏;在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与损坏的固件对应。解决了相关技术中无法自动修复固件的技术问题,提高了用户体验。
Claims (13)
- 一种固件修复方法,包括:检测设备的固件是否损坏;在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与固件的损坏位置对应。
- 根据权利要求1所述的方法,其中,检测所述设备的固件是否损坏包括:分段检测所述固件是否损坏,其中,所述固件通过标签进行分段标记。
- 根据权利要求1所述的方法,其中,在检测所述设备的固件是否损坏之前,所述方法还包括:在所述固件生成后,分段标记所述固件,并将标记的标签写入镜像文件;下载所述固件和所述标签到所述设备。
- 根据权利要求3所述的方法,其中,检测所述设备的固件是否损坏包括:计算所述固件各个分段的签名;遍历比较所述签名与各个分段在所述镜像文件中的标签是否对应;在第一分段的签名与所述第一分段在所述镜像文件中的标签不对应时,确定所述固件损坏,其中,所述第一分段是所述固件的任一分段。
- 根据权利要求4所述的方法,其中,在确定所述固件损坏之后,所述方法还包括:记录所述第一分段的签名,所述签名用于表征所述第一分段在所述固件中的位置。
- 根据权利要求4所述的方法,其中,使用所述正确版本修复所述固件包括:重启所述设备进入恢复recovery模式;从服务器获取所述第一分段的正确版本;使用所述正确版本覆盖损坏的所述第一分段。
- 根据权利要求3所述的方法,其中,分段标记所述固件包括以下之一:根据所述固件的存储媒介类型确定分段的大小,并标记各个分段;根据所述设备的传输速率确定分段的大小,并标记各个分段。
- 一种固件修复装置,包括:检测模块,用于检测设备的固件是否损坏;修复模块,用于在检测到所述固件损坏时,使用正确版本修复所述固件,其中,所述正确版本与固件的损坏位置对应。
- 根据权利要求8所述的装置,其中,所述装置还包括:标记模块,用于在所述检测模块检测所述设备的固件是否损坏之前,在所述固件生成后,分段标记所述固件,并将标记的标签写入镜像文件;下载模块,用于下载所述固件和所述标签到所述设备。
- 根据权利要求9所述的装置,其中,所述检测模块包括:计算单元,用于计算所述固件各个分段的签名;比较单元,用于遍历比较所述签名与各个分段在所述镜像文件中的标签是否对应;确定单元,用于在第一分段的签名与所述第一分段在所述镜像文件中的标签不对应时,确定所述固件损坏,其中,所述第一分段是所述固件的任一分段。
- 根据权利要求10所述的装置,其中,所述修复模块包括:重启单元,用于重启所述设备进入恢复recovery模式;获取单元,用于从服务器获取所述第一分段的正确版本;修复单元,用于使用所述正确版本覆盖损坏的所述第一分段。
- 一种存储介质,其中,所述存储介质包括存储的程序,其中,所述程序运行时执行权利要求1至7中任一项所述的方法。
- 一种处理器,其中,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至7中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711004698.4 | 2017-10-24 | ||
CN201711004698.4A CN108205446A (zh) | 2017-10-24 | 2017-10-24 | 固件修复方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2019080840A1 true WO2019080840A1 (zh) | 2019-05-02 |
Family
ID=62604403
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/CN2018/111459 WO2019080840A1 (zh) | 2017-10-24 | 2018-10-23 | 固件修复方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108205446A (zh) |
WO (1) | WO2019080840A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111328043A (zh) * | 2020-03-03 | 2020-06-23 | 江西江铃集团新能源汽车有限公司 | 车联网终端t-box长链接控制方法及系统 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108205446A (zh) * | 2017-10-24 | 2018-06-26 | 中兴通讯股份有限公司 | 固件修复方法及装置 |
CN109660398A (zh) * | 2018-12-21 | 2019-04-19 | 深圳创维数字技术有限公司 | 路由器系统修复方法、终端及存储介质 |
CN109783150A (zh) * | 2019-01-31 | 2019-05-21 | 深兰科技(上海)有限公司 | 一种嵌入式系统启动防砖方法及装置 |
CN111064723B (zh) * | 2019-12-12 | 2022-08-30 | 杭州涂鸦信息技术有限公司 | 一种基于备份系统的空中下载升级方法及系统 |
CN113127252A (zh) * | 2021-05-14 | 2021-07-16 | 江苏华存电子科技有限公司 | 一种存储器装置中固件智能修复方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103823723A (zh) * | 2014-02-19 | 2014-05-28 | 惠州Tcl移动通信有限公司 | 一种移动终端的触摸屏固件修复方法和装置 |
CN104602221A (zh) * | 2013-11-01 | 2015-05-06 | 龙尚科技(上海)有限公司 | 一种基于gprs的远程升级设计方式的模块 |
CN106843958A (zh) * | 2017-01-18 | 2017-06-13 | 成都黑盒子电子技术有限公司 | 一种嵌入式固件升级方法 |
CN108205446A (zh) * | 2017-10-24 | 2018-06-26 | 中兴通讯股份有限公司 | 固件修复方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7907531B2 (en) * | 2005-06-13 | 2011-03-15 | Qualcomm Incorporated | Apparatus and methods for managing firmware verification on a wireless device |
US9158605B2 (en) * | 2010-12-01 | 2015-10-13 | Microsoft Technology Licensing, Llc | Method, system and device for validating repair files and repairing corrupt software |
CN102810138B (zh) * | 2012-06-19 | 2015-12-02 | 北京奇虎科技有限公司 | 一种用户端文件的修复方法和系统 |
AU2012395331B2 (en) * | 2012-11-21 | 2017-06-01 | Huawei Technologies Co., Ltd. | Method and apparatus for recovering data |
CN104244306A (zh) * | 2014-09-15 | 2014-12-24 | 杭州华三通信技术有限公司 | 一种接入点固件升级方法和装置 |
CN106933637A (zh) * | 2017-03-17 | 2017-07-07 | 深圳创维-Rgb电子有限公司 | 一种系统分区的修复方法及装置 |
-
2017
- 2017-10-24 CN CN201711004698.4A patent/CN108205446A/zh not_active Withdrawn
-
2018
- 2018-10-23 WO PCT/CN2018/111459 patent/WO2019080840A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104602221A (zh) * | 2013-11-01 | 2015-05-06 | 龙尚科技(上海)有限公司 | 一种基于gprs的远程升级设计方式的模块 |
CN103823723A (zh) * | 2014-02-19 | 2014-05-28 | 惠州Tcl移动通信有限公司 | 一种移动终端的触摸屏固件修复方法和装置 |
CN106843958A (zh) * | 2017-01-18 | 2017-06-13 | 成都黑盒子电子技术有限公司 | 一种嵌入式固件升级方法 |
CN108205446A (zh) * | 2017-10-24 | 2018-06-26 | 中兴通讯股份有限公司 | 固件修复方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111328043A (zh) * | 2020-03-03 | 2020-06-23 | 江西江铃集团新能源汽车有限公司 | 车联网终端t-box长链接控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108205446A (zh) | 2018-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2019080840A1 (zh) | 固件修复方法及装置 | |
CN109634645B (zh) | 固件升级方法及终端 | |
CN106250192B (zh) | 上位机的软件升级方法及系统 | |
US8423991B2 (en) | Embedded network device and firmware upgrading method | |
US7836444B2 (en) | Mobile communication terminal having embedded system for software download and method for software download | |
CN110083374B (zh) | 一种升级回滚方法、系统及终端设备 | |
US20140310698A1 (en) | Apparatus and method for upgrading firmware of mobile terminal | |
US20110004871A1 (en) | Embedded electronic device and firmware updating method thereof | |
US20090094450A1 (en) | Firmware image update and management | |
CN101807152B (zh) | 自我验证选择只读存储器的基本输出入系统及其验证方法 | |
CN107783776B (zh) | 固件升级包的处理方法及装置、电子设备 | |
CN110333891A (zh) | 基于物联网的增强型ota升级的方法 | |
CN111813428A (zh) | 终端固件的升级方法、装置、电子设备及存储介质 | |
US20080270677A1 (en) | Safe software revision for embedded systems | |
CN112416406B (zh) | 终端设备升级方法、装置、终端设备和介质 | |
CN107239411B (zh) | 一种车载控制器内存管理方法及系统 | |
CN111552491A (zh) | 移动载体的中转设备的固件升级的方法、装置与存储介质 | |
CN109766140A (zh) | 一种机顶盒启动异常的定位方法及装置 | |
CN106210877A (zh) | 智能电视的系统升级方法及装置 | |
WO2015184732A1 (zh) | 引导程序的存储方法、故障恢复方法及设备、计算机存储介质 | |
CN109375953B (zh) | 一种操作系统启动方法及装置 | |
CN105677409A (zh) | 一种系统升级方法及装置 | |
CN107656765A (zh) | 一种设备初始化的方法、系统及终端设备 | |
CN108255644B (zh) | 文件系统恢复方法及装置 | |
WO2017173924A1 (zh) | 切换文件系统的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 18871660 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 18871660 Country of ref document: EP Kind code of ref document: A1 |