CN114780122A - 嵌入式设备固件更新方法以及嵌入式设备 - Google Patents
嵌入式设备固件更新方法以及嵌入式设备 Download PDFInfo
- Publication number
- CN114780122A CN114780122A CN202210386463.0A CN202210386463A CN114780122A CN 114780122 A CN114780122 A CN 114780122A CN 202210386463 A CN202210386463 A CN 202210386463A CN 114780122 A CN114780122 A CN 114780122A
- Authority
- CN
- China
- Prior art keywords
- firmware
- data
- partition
- embedded device
- update
- 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/656—Updates while running
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Abstract
本申请公开了一种嵌入式设备固件更新方法以及嵌入式设备,嵌入式设备的存储器中设置有第一固件分区、第二固件分区以及引导加载分区,其中,第一固件分区用于存储第一固件,第二固件分区用于存储至少一个第二固件,第一固件包括对所述第二固件实现远程固件更新的最小代码集合,该方法包括:检测到对第二固件进行更新的第一触发事件;判断当前运行的固件是否为第一固件,如果否,则将当前运行的固件切换为第一固件;从源设备获取对第二固件进行更新的第二固件更新数据,将接收到的第二固件更新数据写入到第二固件分区。本申请减少了对嵌入式设备硬件的存储空间的需求,节省了硬件成本,为嵌入式设备集成更多设备功能提供了可能性。
Description
技术领域
本申请涉及嵌入式技术领域,尤其涉及一种嵌入式设备固件更新方法以及嵌入式设备。
背景技术
物联网技术的快速发展促进了低成本嵌入式设备的大规模使用,这些低成本嵌入式设备被广泛部署在智能家居、智慧工业和医疗保健等应用场景中,完成智能感知、智能控制、智能组网等功能。在嵌入式设备中,固件通常存储在闪存(Flash)、SD卡和固态硬盘等非易失性存储设备上,设备启动后将存储的固件加载到RAM内存中执行指定的功能。固件定义了产品的主要功能,设备厂商经常通过FOTA(Firmware Over the Air)远程固件更新技术对设备软件进行快速迭代,来满足市场对产品功能的需求,改善用户体验,远程修复固件的安全漏洞。
现有对嵌入式设备进行固件更新时,为实现良好的容错性、安全性和可实施性,通常需要至少两个与固件大小相当的固件存储区域,这主要取决于两方面的限制:(1)已经被加载到RAM里的固件数据通常不能够被擦除;(2)为保证良好的容错性,需要一个具备OTA功能的备份固件。
为充分理解上述两个方面,以经典的FOTA“乒乓升级“方案为例进行叙述。实现“乒乓”升级的存储空间划分示意图如图1所示,其中引导加载(bootloader)分区用于存储系统引导加载(bootloader)程序;系统参数分区用于存储FOTA升级的标志位、连接网络信息、系统参数等数据;两个固件分区app_0分区和app_1分区分别用于存储固件app_0以及app_1。
上述第(1)点是指,当设备运行app_0时,因为系统正在加载app_0分区的固件数据到设备内存中运行,因此此时不能将接收的新固件写入到app_0分区,只能将接收的新固件写入到app_1分区,然后在系统参数分区中设置app_1分区为待引导分区,重启设备后,bootloader程序将检测系统参数,并加载app_1分区中的新固件来完成固件更新。相同地,当设备运行app_1时,只能将新固件写入到app_0分区,执行上述类似过程,完成固件的更新。
上述第(2)点是指嵌入式设备至少包含两个可以支持FOTA功能的app_0固件、app_1固件,若仅一个固件能执行FOTA功能,则该固件一旦损坏或者变的不安全(比如被植入病毒程序),则设备将无法安全地执行FOTA,导致设备无法正常运行。
上述“乒乓升级”的实现方案尽管可以实现较好的FOTA更新功能,但是需要应用至少两个与固件大小相当的存储区域。而越智能化或者功能越丰富的设备,固件体积往往越大,固件存储设备作为存储固件(固件app_0/固件app_1)的硬件载体,既是不可或缺的系统组成部分,也是最终影响产品价格的主要因素。较高的硬件成本不仅会限制开发人员开发智能化、功能丰富的产品,限制产品在市场的推广,也阻碍用户以较低的成本体验物联网产品丰富的功能。
因此,如何解决嵌入式设备实现固件更新时,需要较多的固件存储空间,导致产品成本高、无法集成更多设备功能的问题,是本领域中亟待解决的技术问题之一。
应理解,上述所列举的技术问题仅作为示例而非对本发明的限制,本发明并不限于同时解决上述所有技术问题的技术方案。本发明的技术方案可以实施为解决上述或其他技术问题中的一个或多个。
发明内容
为解决上述和其他问题,本申请提供了一种嵌入式设备固件更新方法,所述嵌入式设备的存储器中设置有第一固件分区、第二固件分区以及引导加载分区,其中,所述第一固件分区用于存储第一固件,所述第二固件分区用于存储至少一个第二固件,所述第一固件包括对所述第二固件实现远程固件更新的最小代码集合,所述引导加载分区用于加载所述第一固件以及所述第二固件,所述方法包括:
检测到对所述第二固件进行更新的第一触发事件;
判断当前运行的固件是否为所述第一固件,如果否,则将当前运行的固件切换为所述第一固件;
从源设备获取对所述第二固件进行更新的第二固件更新数据,将接收到的所述第二固件更新数据写入到所述第二固件分区,以在将运行的固件切换为第二固件时,加载所述第二固件更新数据。
可选地,所述第一触发事件包括以下任意一种:
接收到所述源设备发送的所述第二固件的版本存在更新的推送信息;
向所述源设备发送所述第二固件的版本是否存在更新的查询请求,并接收所述源设备发送的版本存在更新的回复信息。
可选地,所述将接收到的所述第二固件更新数据写入到所述第二固件分区包括:
所述第二固件更新数据为更新后的第二固件数据,将接收到的所述第二固件数据直接替换旧的第二固件数据写入到所述第二固件分区;或
所述第二固件更新数据为旧的第二固件数据与更新后的第二固件数据的差分数据,将接收的所述差分数据与旧的第二固件数据进行合成,生成更新后的第二固件数据写入到所述第二固件分区。
可选地,所述将当前运行的固件切换为所述第一固件包括:
将所述第一固件设置为下一次重启时引导加载程序所需引导的固件;
调用重启接口,重启所述嵌入式设备;
运行所述引导加载程序,引导运行所述第一固件。
可选地,所述在将运行的固件切换为第二固件时,加载所述第二固件更新数据包括:
将所述第二固件设置为下一次重启时引导加载程序所需引导的固件;
调用重启接口,重启所述嵌入式设备;
运行所述引导加载程序,引导运行所述第二固件,加载所述第二固件更新数据。
可选地,在所述引导运行所述第二固件之前还包括:
判断所述第二固件是否为加密固件,如果是,则在所述引导加载分区中执行解密操作。
可选地,在所述引导运行所述第二固件之前还包括:
在所述引导加载分区中对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;
若校验通过,则引导运行所述第二固件。
可选地,所述第二固件为多个时,在所述对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验之后还包括:
若待引导的第二固件校验未通过,则遍历所述嵌入式设备中其他的第二固件,进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;
若校验通过,则引导运行该校验通过的第二固件;或
所述第二固件为一个时,在所述对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验之后还包括:
若待引导的第二固件校验未通过,则退回运行所述第一固件;
若校验通过,则引导运行该第二固件。
可选地,还包括:
检测到对所述第一固件进行更新的第二触发事件;
判断当前运行的固件是否为所述第二固件,如果否,则将当前运行的固件切换为所述第二固件;
从所述源设备获取对所述第一固件进行更新的第一固件更新数据,将接收到的所述第一固件更新数据写入到所述第一固件分区,以在将运行的固件切换为第一固件时,加载所述第一固件更新数据。
可选地,所述将接收到的所述第一固件更新数据写入到所述第一固件分区包括:
所述第一固件更新数据为更新后的第一固件数据,将接收到的所述第一固件数据直接替换旧的第一固件数据写入到所述第一固件分区;或
所述第一固件更新数据为旧的第二固件数据与更新后的第二固件数据的差分数据,将接收的所述差分数据与旧的第一固件数据进行合成,生成更新后的第一固件数据写入到所述第一固件分区。
可选地,所述在将运行的固件切换为第一固件时,加载所述第一固件更新数据包括:
将所述第一固件设置为下一次重启时引导加载程序所需引导的固件;
调用重启接口,重启所述嵌入式设备;
运行所述引导加载程序,引导运行所述第一固件,加载所述第一固件更新数据。
可选地,在所述引导运行所述第一固件之前还包括:
在所述引导加载分区中对所述第一固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;
若校验通过,则引导运行所述第一固件。
可选地,所述源设备为云服务器、或本地服务器、或mesh网络的节点、或低功耗蓝牙网络的设备。
可选地,所述第二固件为多个时,所述第二固件中只有一个包括对所述第一固件实现固件更新的代码集合。
本申请还提供了一种嵌入式设备,所述嵌入式设备的存储器中设置有第一固件分区、第二固件分区以及引导加载分区,其中,所述第一固件分区用于存储第一固件,所述第二固件分区用于存储至少一个第二固件,所述第一固件包括对所述第二固件实现远程固件更新的最小代码集合,所述引导加载分区用于加载所述第一固件以及所述第二固件,所述存储器中存储的固件被加载到所述嵌入式设备的内存中以实现如上述任一种所述的嵌入式设备固件更新方法。
可选地,所述存储器为非易失性存储器。
本申请所提供的嵌入式设备固件更新方法,在其存储器中设置第一固件分区、第二固件分区以及引导加载分区。该第一固件分区用于存储第一固件,第二固件分区用于存储第二固件。在检测到对第二固件进行更新的第一触发事件时,判断当前运行的固件是否为第一固件,如果否,则将当前运行的固件切换为第一固件。从源设备获取对第二固件进行更新的第二固件更新数据,将接收到的第二固件更新数据写入到第二固件分区,以在将运行的固件切换为第二固件时,加载第二固件更新数据。本申请通过设置第一固件分区以及第二固件分区,其中第一固件分区存储的第一固件,其仅包括对第二固件实现远程固件更新的最小代码集合,因此可以最小化第一固件的体积,从而减少了对嵌入式设备硬件的存储空间的需求,节省了硬件成本。另外,还可以为设备实现其他功能预留出更多的硬件资源,为嵌入式设备集成更多设备功能提供了可能性。同时,相较于现有技术,本方案在有限的硬件资源里,通过最小化第一固件的体积,可以给第二固件留下更多的空间以实现更丰富的功能。此外,本申请还提供了一种具有上述技术优点的嵌入式设备。
附图说明
在下文中,将基于实施例参考附图进一步解释本申请。
图1示出实现“乒乓”升级的存储空间划分示意图;
图2示意性地示出本申请所提供的嵌入式设备固件更新方法中嵌入式设备存储分区的设置情况;
图3示意性地示出本申请所提供的嵌入式设备固件更新方法的一种具体实施方式的流程图;
图4示意性地示出本申请所提供的嵌入式设备固件更新方法的另一种具体实施方式的流程图;
图5示意性地示出本申请所提供的嵌入式设备固件更新方法的又一种具体实施方式的流程图;
图6示意性地示出本申请所提供的嵌入式设备固件更新方法的再一种具体实施方式的流程图。
具体实施方式
以下将结合附图和具体的实施方式,对本申请的方法和系统进行详细说明。应理解,附图所示以及下文所述的实施例仅仅是说明性的,而不作为对本申请的限制。
图2示出本申请所提供的嵌入式设备固件更新方法中嵌入式设备存储分区的设置情况。参照图2,嵌入式设备的存储器中设置有第一固件分区,第二固件分区、引导加载分区以及系统参数分区。其中,存储器为非易失性存储器,例如Flash、硬盘等存储设备。
其中,第一固件分区用于存储第一固件,该第一固件包括对所述第二固件实现远程固件更新的最小代码集合。可以理解的是,第一固件仅用于实现接收第二固件更新数据,并将第二固件更新数据写入到第二固件分区的功能,而不包含设备的其他功能。
进一步地,为了最小化第一固件的体积,在第一固件中可以不对接收的固件进行校验,由引导加载程序对固件的签名信息、哈希值进行校验或执行解密操作。也不管理系统的其他参数,从而保证第一固件的体积足够小。对于系统配置、安全连接、网络信息等数据可以与第二固件共用该类数据。
第二固件分区用于存储至少一个第二固件。其中,该第二固件可以包括设备完整的功能,包括但不限于固件远程更新功能、固件切换功能、系统参数管理功能等。在设备正常运行时,加载该第二固件到内存中运行,以完成设备必要的功能,如修改设备参数、上报采集到的数据、执行数据处理的功能。第二固件可以为多个,分别用于实现不同的设备功能,并且这些第二固件均可以由第一固件进行远程固件更新。
引导加载分区用于存储引导加载(bootloader)程序,加载第一固件以及第二固件。此外,引导加载程序还可以完成检测系统参数、校验固件和判断加载运行哪个固件的功能。
系统参数分区用于存储系统的配置、网络连接信息、系统引导参数等信息。可以理解的是,该系统参数分区在实际的设备中可以划分为多个分区进行管理,在此不做限定。
通过上述分区的设置,可以通过运行第一固件对第二固件进行远程固件更新,当然也可以通过运行第二固件对第一固件进行远程固件更新。下面的实施例介绍了如何通过第一固件对第二固件进行远程固件更新的过程。
图3示出本申请所提供的嵌入式设备固件更新方法的一种具体实施方式的流程图。参照图3,该方法具体包括:
S101:检测到对第二固件进行更新的第一触发事件。
其中,第一触发事件可以为:接收到所述源设备发送的所述第二固件的版本存在更新的推送信息。该推送信息中可以包括新固件的版本号、新固件的下载链接、校验数据等信息。此外,第一触发事件还可以为:向所述源设备发送所述第二固件的版本是否存在更新的查询请求,并接收所述源设备发送的版本存在更新的回复信息。嵌入式设备可以定时或者在每次开机时,向源设备主动发送上述查询请求。
应理解,在本文中“源设备”是指向待升级固件的嵌入式设备提供固件更新数据的任何计算设备。例如,源设备可以为云服务器、或本地服务器、或mesh网络的节点、或低功耗蓝牙(BLE)网络的设备。应理解,源设备可以位于云端,也可以位于本地。源设备与嵌入式设备之间可以采用Wi-Fi、蓝牙、ZigBee、以太网等方式进行通信,具体的实现方法兼容各类通信方式,在此不做限定。
S102:判断当前运行的固件是否为所述第一固件,如果否,则将当前运行的固件切换为所述第一固件。
在检测到需要对第二固件进行固件更新时,判断当前运行的固件是否为第一固件。若当前运行的固件为第一固件,则可以直接执行后续对第二固件进行远程更新的操作。若当前运行的固件为第二固件,则需要将当前运行的固件切换为第一固件,以便由第一固件更新第二固件分区中的第二固件。
S103:从源设备获取对所述第二固件进行更新的第二固件更新数据,将接收到的所述第二固件更新数据写入到所述第二固件分区,以在将运行的固件切换为第二固件时,加载所述第二固件更新数据。
作为一种具体实施方式,将接收到的所述第二固件更新数据写入到所述第二固件分区的过程可以采用全量更新或增量更新两种方式。作为一种优选实施方式,本申请实施例可以采用全量更新的方式对第二固件进行远程更新。
全量更新的过程具体为:第二固件更新数据为更新后的第二固件数据,将接收到的所述第二固件数据直接替换旧的第二固件数据写入到所述第二固件分区。增量更新的过程具体为:第二固件更新数据为旧的第二固件数据与更新后的第二固件数据的差分数据,将接收的所述差分数据与旧的第二固件数据进行合成,生成更新后的第二固件数据写入到所述第二固件分区。
本申请通过设置第一固件分区以及第二固件分区,其中第一固件分区存储的第一固件,其仅包括对第二固件实现远程固件更新的最小代码集合,因此可以最小化第一固件的体积,从而减少了对嵌入式设备硬件的存储空间的需求,节省了硬件成本。另外,还可以将更多的硬件资源用于实现其他功能,为嵌入式设备集成更多设备功能提供了可能性。
本申请所提供的嵌入式设备固件更新方法的另一种具体实施方式的流程图如图4所示,该方法具体包括:
S201:运行第二固件。
嵌入式设备系统上电后,进入引导加载程序。读取系统参数分区中的固件启动标识,判断是否加载第二固件分区的第二固件。如果是,则运行第二固件。
S202:检测到对所述第二固件进行更新的第一触发事件,将所述第一固件设置为下一次重启时引导加载程序所需引导的固件。
具体地,可以在第二固件中通过按键、触摸屏或者网络通信等方式触发检测第一触发事件,如果检测到第一触发事件,则重写系统参数,将第一固件设置为下一次重启时引导加载程序所需引导的固件。
S203:调用重启接口,重启所述嵌入式设备。
S204:运行所述引导加载程序,引导运行所述第一固件。
S205:从源设备获取对所述第二固件进行更新的第二固件更新数据,将接收到的所述第二固件更新数据写入到所述第二固件分区。
在第一固件中通过查询系统参数分区的信息或者采用按键、触摸屏等方式获取下载第二固件更新数据的信息,与源设备建立连接,接收源设备发送的第二固件更新数据,将接收到的第二固件更新数据写入到第二固件分区。
S206:在第二固件更新数据接收完毕后,将所述第二固件设置为下一次重启时引导加载程序所需引导的固件。
S207:调用重启接口,重启所述嵌入式设备。
S208:运行所述引导加载程序,引导运行所述第二固件,加载所述第二固件更新数据。
作为一种具体实施方式,本申请所提供的嵌入式设备固件更新方法中,第二固件可以为多个,分别用于实现不同的功能。其中,至少有一个第二固件包括对第一固件实现固件更新的代码集合。
优选地,多个第二固件中只有一个包括对第一固件实现固件更新的代码集合,仅该对应的第二固件具有更新第一固件的功能。例如,在第一固件分区存储一个第一固件,第二固件分区存储三个第二固件的实施例中,仅有一个第二固件用于实现对第一固件的更新,即该第二固件既可以实现固件功能又可以实现对第一固件的更新,剩余两个第二固件则仅用于实现固件功能。可以理解的是,这里的固件功能例如包括:Wi-Fi连接、记录视频、初始化摄像头、响应摄像头控制的信号等,但不包括对第一固件进行更新的功能。假设实现FOTA功能需要50KB,实现固件功能需要150KB,若采用现有技术进行固件更新,则所需要的存储空间为3*200KB=600KB,而采用本申请实施例的方式,则所需要的存储空间为50KB+200KB(实现固件功能以及对第一固件进行固件更新的第二固件)+2*150(仅实现固件功能的剩余两个第二固件)=550KB。可见,本实施例在第二固件为多个时能够实现节省对应的硬件空间的作用。
作为一种具体实施方式,在引导运行所述第二固件之前还包括:判断所述第二固件是否为加密固件,如果是,则在所述引导加载分区中执行解密操作。
作为一种具体实施方式,在引导运行所述第二固件之前还包括:在所述引导加载分区中对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;若校验通过,则引导运行所述第二固件。
在第二固件为多个时,在所述对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验之后还包括:若待引导的第二固件校验未通过,则遍历所述嵌入式设备中其他的第二固件,进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;若校验通过,则引导运行该校验通过的第二固件。在待引导的第二固件校验未通过时,引导加载程序可以遍历所有的可执行第二固件,尝试发现可以校验通过的固件,并加载该校验通过的固件。
或者,在第二固件为一个时,在所述对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验之后还包括:若待引导的第二固件校验未通过,则退回运行所述第一固件;若校验通过,则引导运行该第二固件。
本实施例通过在引导加载分区中执行校验操作可以保证所加载的固件是正常并且安全的,从而增加系统的安全性。
下面介绍本申请所提供的嵌入式设备固件更新方法中采用第二固件对第一固件进行远程固件更新的过程。如图5本申请所提供的嵌入式设备固件更新方法的又一种具体实施方式的流程图所示,该方法具体包括:
S301:检测到对第一固件进行更新的第二触发事件。
具体地,可以在第二固件中通过按键、触摸屏或者网络通信等方式触发检测第二触发事件。其中,第二触发事件可以为:接收到源设备发送的所述第一固件的版本存在更新的推送信息。该推送信息中可以包括新固件的版本号、新固件的下载链接、校验数据等信息。此外,第二触发事件还可以为:向源设备发送第一固件的版本是否存在更新的查询请求,并接收所述源设备发送的版本存在更新的回复信息。嵌入式设备可以定时或者在每次开机时,向源设备主动发送上述查询请求。
S302:判断当前运行的固件是否为所述第二固件,如果否,则将当前运行的固件切换为所述第二固件。
在检测到需要对第一固件进行固件更新时,判断当前运行的固件是否为第二固件。若当前运行的固件为第二固件,则可以直接执行后续对第一固件进行远程更新的操作。若当前运行的固件不是第二固件,则需要将当前运行的固件切换为第二固件,以便由第二固件更新第一固件分区中的第一固件。
S303:从所述源设备获取对所述第一固件进行更新的第一固件更新数据,将接收到的所述第一固件更新数据写入到所述第一固件分区,以在将运行的固件切换为第一固件时,加载所述第一固件更新数据。
其中,将接收到的所述第一固件更新数据写入到所述第一固件分区可以采用全量更新或增量更新两种方式。作为一种优选实施方式,本申请实施例可以采用增量更新的方式对第一固件进行远程更新。
全量更新的过程具体为:第一固件更新数据为更新后的第一固件数据,将接收到的所述第一固件数据直接替换旧的第一固件数据写入到所述第一固件分区。增量更新的过程具体为:第一固件更新数据为旧的第一固件数据与更新后的第一固件数据的差分数据,将接收的所述差分数据与旧的第一固件数据进行合成,生成更新后的第一固件数据写入到所述第一固件分区。
本申请所提供的嵌入式设备固件更新方法的再一种具体实施方式的流程图如图6所示,该方法具体包括:
S401:运行第二固件。
嵌入式设备系统上电后,运行第二固件。
S402:检测到对所述第一固件进行更新的第二触发事件。
具体地,可以在第二固件中通过按键、触摸屏或者网络通信等方式触发检测第二触发事件。
S403:从所述源设备获取对所述第一固件进行更新的第一固件更新数据,将接收到的所述第一固件更新数据写入到所述第一固件分区。
读取系统参数分区中的连接信息,与源设备建立连接,接收源设备发送的第一固件更新数据,并将该第一固件更新数据写入到第一固件分区中。
S404:将所述第一固件设置为下一次重启时引导加载程序所需引导的固件。
S405:调用重启接口,重启所述嵌入式设备。
S406:运行所述引导加载程序,引导运行所述第一固件,加载所述第一固件更新数据。
在引导运行所述第一固件之前还包括:在所述引导加载分区中对所述第一固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;若校验通过,则引导运行所述第一固件。在引导固件之前进行校验,可以提高系统的安全性。
此外,在S403将接收到的第一固件更新数据写入到第一固件分区之后,可以不立即切换到第一固件来进行远程更新。本申请实施例可以在下次需要更新第二固件时,即检测到对第二固件进行更新的第一触发事件时,将当前运行的固件切换为第一固件,加载第一固件更新数据。
可见,本申请通过设置第一固件分区以及第二固件分区,其中第一固件分区存储的第一固件,其仅包括对第二固件实现远程固件更新的最小代码集合,因此可以最小化第一固件的体积,从而减少了对嵌入式设备硬件的存储空间的需求,节省了硬件成本。另外,还可以将更多的硬件资源用于实现其他功能,为嵌入式设备集成更多设备功能提供了可能性。本申请尤其适用于主程序功能复杂,而远程更新功能实现相对简单的嵌入式设备。
本申请所提供的方法中,两个固件可以分别完成对另一个固件的远程更新,从而保证运行的两个固件都能够升级,修复安全漏洞。进一步地,若某次远程更新后的固件未能够正常加载运行,还可以使用另一个包含远程更新功能的固件重新远程更新损坏的固件。两个可执行固件可以增强系统的可靠性,容错性更好。
此外,本申请所提供的方法,开发人员只需设计两个固件的功能,部署在自身的设备上即可使用,实现简单。其采用的两个固件使用统一的固件格式,方便管理或者使用统一的签名格式、加密、添加校验数据开发更高级的功能。不同厂商的嵌入式设备均可以采用本申请提供的方法实现固件更新,可以跨平台使用,适用范围更广。并且,使用压缩更新、增量更新的设备除需要下载、将下载数据保存到指定存储区域的功能外,还需要更多的内存去执行解压、反差分的过程,而本申请采用的方法对内存消耗较小,有助于提高嵌入式设备的市场竞争力。
此外,本申请还提供了一种嵌入式设备,参照图2,该嵌入式设备的存储器中设置有第一固件分区、第二固件分区以及引导加载分区,其中,所述第一固件分区用于存储第一固件,所述第二固件分区用于存储至少一个第二固件,所述第一固件包括对所述第二固件实现远程固件更新的最小代码集合,所述引导加载分区用于加载所述第一固件以及所述第二固件,所述存储器中存储的固件被加载到所述嵌入式设备的内存中以实现上述任一种所述的嵌入式设备固件更新方法。
其中,存储器为非易失性存储器。
以一款基于乐鑫科技提供的ESP32微控制器单元的Wi-Fi网络摄像头为例,该设备的主要功能为记录视频,通过Wi-Fi控制摄像头的拍摄角度,并实时查看拍摄的内容。如表1所示,用bootloader表示引导加载程序,ota_app表示仅包含远程固件更新功能的第一固件,main_app表示实现设备主要功能的第二固件。本申请实施例所提供的方案中,第二固件main_app大小为1411KB,引导加载程序bootloader的大小为62KB,第一固件ota_app大小为457KB,在ota_app中通过Wi-Fi网络连接以及https通信协议下载新固件并将新固件写入到第一固件分区。使用Linux下集成的压缩性能非常好的xz压缩算法压缩main_app固件得到的压缩固件大小为721KB。
明显地,使用本申请提出的方案可以选择2M大小的固件存储设备。若使用全量更新,则需要至少3M的固件存储设备;若使用基于xz压缩算法的压缩更新,则至少需要2.3M的固件存储设备。可见,本申请所提供的方法节约了嵌入式设备的硬件资源。
表1
虽然出于本公开的目的已经描述了本申请各方面的各种实施例,但是不应理解为将本公开的教导限制于这些实施例。在一个具体实施例中公开的特征并不限于该实施例,而是可以和不同实施例中公开的特征进行组合。例如,在一个实施例中描述的根据本申请的方法的一个或多个特征和/或操作,亦可单独地、组合地或整体地应用在另一实施例中。本领域技术人员应理解,还存在可能的更多可选实施方式和变型,可以对上述系统进行各种改变和修改,而不脱离由本申请权利要求所限定的范围。
Claims (16)
1.一种嵌入式设备固件更新方法,其特征在于,所述嵌入式设备的存储器中设置有第一固件分区、第二固件分区以及引导加载分区,其中,所述第一固件分区用于存储第一固件,所述第二固件分区用于存储至少一个第二固件,所述第一固件包括对所述第二固件实现远程固件更新的最小代码集合,所述引导加载分区用于加载所述第一固件以及所述第二固件,所述方法包括:
检测到对所述第二固件进行更新的第一触发事件;
判断当前运行的固件是否为所述第一固件,如果否,则将当前运行的固件切换为所述第一固件;
从源设备获取对所述第二固件进行更新的第二固件更新数据,将接收到的所述第二固件更新数据写入到所述第二固件分区,以在将运行的固件切换为第二固件时,加载所述第二固件更新数据。
2.如权利要求1所述的嵌入式设备固件更新方法,其特征在于,所述第一触发事件包括以下任意一种:
接收到所述源设备发送的所述第二固件的版本存在更新的推送信息;
向所述源设备发送所述第二固件的版本是否存在更新的查询请求,并接收所述源设备发送的版本存在更新的回复信息。
3.如权利要求1所述的嵌入式设备固件更新方法,其特征在于,所述将接收到的所述第二固件更新数据写入到所述第二固件分区包括:
所述第二固件更新数据为更新后的第二固件数据,将接收到的所述第二固件数据直接替换旧的第二固件数据写入到所述第二固件分区;或
所述第二固件更新数据为旧的第二固件数据与更新后的第二固件数据的差分数据,将接收的所述差分数据与旧的第二固件数据进行合成,生成更新后的第二固件数据写入到所述第二固件分区。
4.如权利要求1至3任一项所述的嵌入式设备固件更新方法,其特征在于,所述将当前运行的固件切换为所述第一固件包括:
将所述第一固件设置为下一次重启时引导加载程序所需引导的固件;
调用重启接口,重启所述嵌入式设备;
运行所述引导加载程序,引导运行所述第一固件。
5.如权利要求1至3任一项所述的嵌入式设备固件更新方法,其特征在于,所述在将运行的固件切换为第二固件时,加载所述第二固件更新数据包括:
将所述第二固件设置为下一次重启时引导加载程序所需引导的固件;
调用重启接口,重启所述嵌入式设备;
运行所述引导加载程序,引导运行所述第二固件,加载所述第二固件更新数据。
6.如权利要求5所述的嵌入式设备固件更新方法,其特征在于,在所述引导运行所述第二固件之前还包括:
判断所述第二固件是否为加密固件,如果是,则在所述引导加载分区中执行解密操作。
7.如权利要求5所述的嵌入式设备固件更新方法,其特征在于,在所述引导运行所述第二固件之前还包括:
在所述引导加载分区中对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;
若校验通过,则引导运行所述第二固件。
8.如权利要求7所述的嵌入式设备固件更新方法,其特征在于,所述第二固件为多个时,在所述对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验之后还包括:
若待引导的第二固件校验未通过,则遍历所述嵌入式设备中其他的第二固件,进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;
若校验通过,则引导运行该校验通过的第二固件;或
所述第二固件为一个时,在所述对所述第二固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验之后还包括:
若待引导的第二固件校验未通过,则退回运行所述第一固件;
若校验通过,则引导运行该第二固件。
9.如权利要求1至3任一项所述的嵌入式设备固件更新方法,其特征在于,还包括:
检测到对所述第一固件进行更新的第二触发事件;
判断当前运行的固件是否为所述第二固件,如果否,则将当前运行的固件切换为所述第二固件;
从所述源设备获取对所述第一固件进行更新的第一固件更新数据,将接收到的所述第一固件更新数据写入到所述第一固件分区,以在将运行的固件切换为第一固件时,加载所述第一固件更新数据。
10.如权利要求9所述的嵌入式设备固件更新方法,其特征在于,所述将接收到的所述第一固件更新数据写入到所述第一固件分区包括:
所述第一固件更新数据为更新后的第一固件数据,将接收到的所述第一固件数据直接替换旧的第一固件数据写入到所述第一固件分区;或
所述第一固件更新数据为旧的第二固件数据与更新后的第二固件数据的差分数据,将接收的所述差分数据与旧的第一固件数据进行合成,生成更新后的第一固件数据写入到所述第一固件分区。
11.如权利要求9所述的嵌入式设备固件更新方法,其特征在于,所述在将运行的固件切换为第一固件时,加载所述第一固件更新数据包括:
将所述第一固件设置为下一次重启时引导加载程序所需引导的固件;
调用重启接口,重启所述嵌入式设备;
运行所述引导加载程序,引导运行所述第一固件,加载所述第一固件更新数据。
12.如权利要求11所述的嵌入式设备固件更新方法,其特征在于,在所述引导运行所述第一固件之前还包括:
在所述引导加载分区中对所述第一固件进行签名信息校验、和/或哈希值校验、和/或文件头信息校验;
若校验通过,则引导运行所述第一固件。
13.如权利要求1至3任一项所述的嵌入式设备固件更新方法,其特征在于,所述源设备为云服务器、或本地服务器、或mesh网络的节点、或低功耗蓝牙网络的设备。
14.如权利要求1至3任一项所述的嵌入式设备固件更新方法,其特征在于,所述第二固件为多个时,所述第二固件中只有一个包括对所述第一固件实现固件更新的代码集合。
15.一种嵌入式设备,其特征在于,所述嵌入式设备的存储器中设置有第一固件分区、第二固件分区以及引导加载分区,其中,所述第一固件分区用于存储第一固件,所述第二固件分区用于存储至少一个第二固件,所述第一固件包括对所述第二固件实现远程固件更新的最小代码集合,所述引导加载分区用于加载所述第一固件以及所述第二固件,所述存储器中存储的固件被加载到所述嵌入式设备的内存中以实现如权利要求1至14任一项所述的嵌入式设备固件更新方法。
16.如权利要求15所述的嵌入式设备,其特征在于,所述存储器为非易失性存储器。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210386463.0A CN114780122A (zh) | 2022-04-11 | 2022-04-11 | 嵌入式设备固件更新方法以及嵌入式设备 |
PCT/CN2023/087611 WO2023198056A1 (zh) | 2022-04-11 | 2023-04-11 | 嵌入式设备固件更新方法以及嵌入式设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210386463.0A CN114780122A (zh) | 2022-04-11 | 2022-04-11 | 嵌入式设备固件更新方法以及嵌入式设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114780122A true CN114780122A (zh) | 2022-07-22 |
Family
ID=82429358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210386463.0A Pending CN114780122A (zh) | 2022-04-11 | 2022-04-11 | 嵌入式设备固件更新方法以及嵌入式设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114780122A (zh) |
WO (1) | WO2023198056A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023198056A1 (zh) * | 2022-04-11 | 2023-10-19 | 乐鑫信息科技(上海)股份有限公司 | 嵌入式设备固件更新方法以及嵌入式设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1200341C (zh) * | 2002-06-25 | 2005-05-04 | 联想(北京)有限公司 | 嵌入式系统中固件程序在线升级的实现方法 |
KR20120041384A (ko) * | 2010-10-21 | 2012-05-02 | 삼성전자주식회사 | 모바일 디바이스의 펌웨어 업데이트 방법 및 장치 |
CN112910714B (zh) * | 2021-03-05 | 2022-04-22 | 中国电子科技集团公司第三十八研究所 | 具有主从机结构的物联网终端设备的远程固件升级方法 |
CN114020526A (zh) * | 2021-10-22 | 2022-02-08 | 深圳市有方科技股份有限公司 | 一种固件升级方法、装置及计算机存储介质 |
CN114780122A (zh) * | 2022-04-11 | 2022-07-22 | 乐鑫信息科技(上海)股份有限公司 | 嵌入式设备固件更新方法以及嵌入式设备 |
CN114780127A (zh) * | 2022-05-09 | 2022-07-22 | 乐鑫信息科技(上海)股份有限公司 | 嵌入式设备固件更新方法、嵌入式设备、开发端设备 |
-
2022
- 2022-04-11 CN CN202210386463.0A patent/CN114780122A/zh active Pending
-
2023
- 2023-04-11 WO PCT/CN2023/087611 patent/WO2023198056A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023198056A1 (zh) * | 2022-04-11 | 2023-10-19 | 乐鑫信息科技(上海)股份有限公司 | 嵌入式设备固件更新方法以及嵌入式设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2023198056A1 (zh) | 2023-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8539471B2 (en) | Updating firmware of an electronic device | |
RU2419839C2 (ru) | Система и способ обновления программы для мобильного терминала с поддержкой ота | |
US20160306624A1 (en) | Vehicle control storage methods and systems | |
US20100132042A1 (en) | Method for upgrading antivirus software and terminal and system thereof | |
CN110597542B (zh) | 软件自动ota升级方法及装置、电子设备 | |
CN108509215B (zh) | 一种系统软件的更换方法、装置、终端设备及存储介质 | |
CN107783776B (zh) | 固件升级包的处理方法及装置、电子设备 | |
JP6585072B2 (ja) | 不揮発性メモリ又はセキュア素子へのデータの読み込みを安全に行うこと | |
WO2019062635A1 (zh) | 升级方法和装置 | |
CN106020875B (zh) | 嵌入式终端的固件更新管理方法和装置 | |
US10235048B2 (en) | Data processing method and smart device | |
EP3066562B1 (en) | Systems and methods for updating system-level services within read-only system images | |
CN102184111B (zh) | 操作系统在线升级方法及带操作系统的设备 | |
CN107566169A (zh) | 一种基于openwrt的固件升级方法及路由器 | |
CN110874467A (zh) | 信息处理方法、装置、系统以及处理器、存储介质 | |
CN114780127A (zh) | 嵌入式设备固件更新方法、嵌入式设备、开发端设备 | |
WO2023198056A1 (zh) | 嵌入式设备固件更新方法以及嵌入式设备 | |
CN105677409A (zh) | 一种系统升级方法及装置 | |
CN115357295B (zh) | 系统回退方法、设备及存储介质 | |
CN114268614A (zh) | 一种设备固件升级方法、装置及系统 | |
CN112667444A (zh) | 一种系统升级方法、存储介质及终端设备 | |
CN113190244A (zh) | 无线模组升级的方法、装置、计算机设备和存储介质 | |
US20230129942A1 (en) | Method for locking a rewritable non-volatile memory and electronic device implementing said method | |
CN117055926A (zh) | 一种远程升级方法和物联网设备 | |
CN113190246A (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 |