CN115061704A - 一种固件升级方法和电子设备 - Google Patents
一种固件升级方法和电子设备 Download PDFInfo
- Publication number
- CN115061704A CN115061704A CN202210639309.XA CN202210639309A CN115061704A CN 115061704 A CN115061704 A CN 115061704A CN 202210639309 A CN202210639309 A CN 202210639309A CN 115061704 A CN115061704 A CN 115061704A
- Authority
- CN
- China
- Prior art keywords
- partition
- firmware
- program
- starting
- memory
- 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
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
技术领域
本申请涉及软件升级技术领域,特别涉及一种固件升级方法和电子设备。
背景技术
由于产品规划、功能增加、软件故障(bug)等各种原因,电子设备出厂前软件不可能做到非常完善,加上为了快速抢占市场,有时候产品开发时间都比较短,在产品开发前期很可能产品功能需求不是特别清晰,有些功能还需要在现场不断验证下完善。设备出厂运行一段时间后,极有可能要软件升级,并且希望升级过程中业务程序不被打断,继续进行服务,即在后台静默升级。
使用烧录工具对单片机(MCU)升级时需要拆开外壳,并且不能实现远程升级,设备必须要返厂处理,这样的升级方式存在升级过程繁琐、升级效率较低。
因此需要一种MCU固件在线升级的方法。现有的MCU固件升级方式通常是分为启动(boot)分区和程序(app)分区,需要升级时触发标志位进入boot区,进行对app分区进行刷写,该方式升级时不在app区运行,也就意味着业务功能会暂停服务,并且如果由于通信接口或者通信协议等的变更需要更新boot功能时,就无法实现安全地更新,例如更新boot时突然掉电,就可能导致boot功能损坏,系统无法启动,只能拆外壳或者机箱进行程序烧录。
现有boot和app升级方式中,其中通信接口、通信协议栈、流程控制、加解密等代码在boot和app两个分区会各有一份,代码重复性和维护成本都较高。
现有技术中还通过将升级文件烧录至快闪(Flash)存储器中的代码备份区,在固件再次启动时,运行代码备份区的程序,以实现固件升级,但这种方式对设备芯片的存储空间有较高要求,需要保证至少双倍程序代码段的Flash资源。
发明内容
本申请方案要解决的技术问题是固件升级时业务功能不能正常服务、更新麻烦、代码重复性和维护成本高。
为解决上述技术问题,本申请方案提供一种固件升级方法,其特征在于,包括以下步骤:
系统启动进入启动分区执行程序,检测启动标志,若所述启动标志被清除,则进入程序分区执行程序;
若所述启动标志被设置为升级状态值,将储存在下载分区的固件信息和固件包复制到程序分区,然后进行完整性校验,校验通过则清除启动标志,再进入程序分区执行程序;
在所述程序分区执行程序,当有固件升级需求,则接收升级的固件信息和固件包并储存至所述下载分区;
在所述升级的固件信息和固件包接收完成后,进行完整性校验和合法性校验,校验通过则为所述启动标志设置升级状态值。
可选的,所述固件升级方法还包括:检测启动标志,若所述启动标志为系统初始值则清除启动标志,再进入程序分区执行程序。
可选的,所述启动分区、程序分区和下载分区位于同一存储器。
可选的,所述启动分区和程序分区位于同一存储器,所述下载分区与程序分区位于不同的存储器。
可选的,所述启动分区和程序分区位于处理器内置的程序存储器,所述下载分区位于处理器内置的数据存储器或者处理器外接的存储器。
可选的,所述固件信息和固件包储存于所述下载分区的连续空间,或者,所述固件信息和固件包分散储存于所述下载分区的非连续空间。
可选的,所述完整性校验包括:采用信息摘要算法验证文件传输的完整一致。
可选的,所述合法性校验包括:
校验堆栈指针地址范围是否在存储器地址空间内;
校验程序指针地址范围是否在存储器地址空间内;
校验中断向量表指针地址范围是否在存储器地址空间内;
校验固件中是否包含通用唯一识别码。
为解决上述技术问题,本申请技术方案还提供电子设备,包括:处理器和用于储存一个或多个程序的存储器;所述一个或多个程序被所述处理器执行,使得所述处理器实现所述的固件升级方法。
可选的,所述处理器为单片机。
与现有技术相比,本申请技术方案至少具有以下有益效果:
在启动分区只进行程序分区跳转和固件复制,将通信接口、通信协议栈、流程控制、加解密等功能从启动分区剥离,因此启动分区的逻辑简单,不易出错,代码量可以显著减少,开发快速,通用性强,且便于维护。
由于启动分区没有通信接口、通信协议栈、流程控制、加解密等功能,随着程序分区的固件升级,程序分区的通信接口、通信协议栈、流程控制、加解密等功能也可以随之升级,解决了传统启动分区的一些功能不能升级或不易升级的问题。
升级过程在程序分区进行,升级过程中业务功能可以不间断服务,解决了固件升级过程中业务功能服务暂停的问题,同时借助于程序分区有更多的通信接口和通信协议栈,获取固件的方式更加灵活多样。
现有应用代码备份区进行固件升级的方式,要求程序分区和代码备份区的内存空间必须连续,而本申请方案中只对启动分区和程序分区有位置和空间连续要求,下载分区的空间和存储位置比较灵活,可以位于内置数据存储器或者外置快闪存储器,也可以分别从内置数据存储器和外置快闪存储器各分出部分,甚至可以压缩存储以节省空间,下载分区空间可以比程序分区空间小,内存空间不必须连续,可以分散存储,灵活性高。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的固件升级方法的流程示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请技术方案提供了一种固件升级方法,包括以下步骤:
系统启动进入启动(boot)分区执行程序,检测启动标志(bootflag),若所述启动标志(bootflag)被清除,则进入程序(app)分区执行程序;
若所述启动标志(bootflag)被设置为升级状态值,将储存在下载(download)分区的固件信息和固件包复制到程序(app)分区,然后进行完整性校验,校验通过则清除启动标志(bootflag),再进入程序(app)分区执行程序;
在所述程序(app)分区执行程序,当有固件升级需求,则接收升级的固件信息和固件包并储存至所述下载(download)分区;
在所述升级的固件信息和固件包接收完成后,进行完整性校验和合法性校验,校验通过则为所述启动标志(bootflag)设置升级状态值。
进一步,所述固件升级方法还包括:检测启动标志(bootflag),若所述启动标志(bootflag)为系统初始值则清除启动标志(bootflag),再进入程序(app)分区执行程序。
本申请技术方案还提供一种电子设备,包括:处理器和用于储存一个或多个程序的存储器;所述一个或多个程序被所述处理器执行,使得所述处理器实现所述的固件升级方法。
本申请技术方案采用启动分区、程序分区和下载分区的分区方式,将启动分区的功能剥离出来合并到程序分区,下载分区用于储存更新的固件,由此解决固件升级时业务功能不能正常服务、更新boot麻烦、代码重复性和维护成本高的问题。
下面以所述处理器为单片机为例,结合附图和实施例对本申请技术方案进行详细说明。
请参考图1,执行步骤S1,系统启动进入boot分区执行程序。
执行步骤S2,检测bootflag,判断bootflag是否被清除;若bootflag被清除,则执行步骤S3,进入app分区执行程序。本实施例中,bootflag被清除是指将bootflag设置为0,在其他实施例中,也可以设置其它值以标记bootflag被清除。
若步骤S2判断bootflag没有被清除,则执行步骤S4,判断bootflag是否被设置为升级状态值;若bootflag被设置为升级状态值,则执行步骤S5,将储存在download分区的固件信息和固件包复制到app分区,然后执行步骤S6。本实施例中,bootflag被设置为升级状态值是指将bootflag设置为1,在其他实施例中,也可以设置其它值为升级状态值,以此标记bootflag,使系统启动后先升级(更新)app分区的固件再执行app分区的更新后的程序。
执行步骤S6,进行完整性校验,判断完整性校验是否通过;若校验通过则执行步骤S7,清除bootflag,接着执行步骤S3;若校验未通过则执行步骤S5,重新复制download分区的固件信息和固件包到app分区。所述完整性校验包括:采用信息摘要算法(MD5,Message-Digest Algorithm)验证文件传输的完整一致。
若步骤S4判断bootflag未被设置为升级状态值,则执行步骤S7清除bootflag,接着执行步骤S3。
需要说明的是,通常来说,bootflag的系统初始值(默认值)为255(十六进制0xff),如果bootflag为255,说明是未初始化的新设备,因此在具体实施例中,检测bootflag还可以包括判断bootflag是否为系统初始值,若是则清除bootflag,再进入app分区执行程序。判断bootflag是否为系统初始值可以在判断bootflag是否被清除前执行,也可以在判断bootflag是否被设置为升级状态值前执行。在boot分区先判断bootflag是否为系统初始值,可以使未初始化的新设备快速进入app分区,提高新设备启动速度。
执行步骤S3,进入app分区执行程序。具体地,进入app分区执行各种初始化配置,然后执行步骤S8和步骤S9,运行业务程序和升级检测程序。
步骤S9中,运行升级检测程序包括判断是否有固件升级需求;当有固件升级需求则执行步骤S10,否则执行步骤S8。
执行步骤S10,接收升级的固件信息和固件包并储存至download分区。具体地,如果有固件升级需求,例如,收到上位机或者远程云平台发送的升级请求或指令,则下载升级的固件,即接收升级的固件信息和固件包,并保存到download分区。
接着执行步骤S11,判断是否接收完成,若固件包接收完成则执行步骤S12,否则继续执行步骤S8。本实施例中,固件是否接收完成的判断依据可以结合多条逻辑进行逻辑与判断,例如,通信协议(通信接口收到最后一帧数据标识)、固件长度(大小)、接收到的数据大小和固件大小相同等。
执行步骤S12,进行固件完整性校验和合法性校验,判断完整性校验和合法性校验是否通过,若是则执行步骤S13,否则继续执行步骤S8。
执行步骤S13,为bootflag设置升级状态值,继续执行步骤S8。
本实施例中,所述完整性校验包括:采用信息摘要算法MD5验证文件传输的完整一致。因为固件信息和固件包完全接收不一定正确接收,因此进行信息摘要算法(MD5,Message-Digest Algorithm)校验判断是为了判断接收文件是否正确或是否有损坏。
MD5信息摘要算法是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致,它是业界通用也是常用的数据完整性校验算法,替代方式也可以是SHA128校验或SHA256校验等。
进一步,所述合法性校验包括:校验堆栈指针(SP,stack point)地址范围是否在存储器(处理器内置的程序存储器)地址空间内;校验程序指针(PC,program counter)地址范围是否在存储器地址空间内;校验中断向量表指针地址范围是否在存储器地址空间内;校验固件中是否包含通用唯一识别码(UUID,Universally Unique Identifier)。
具体地,现有技术一般只进行MD5判断,但是这个只能确保发送方和接收方数据一致,如果发送方由于某些原因本身就错发了文件或者数据,也就是接收方拿到的数据就是错的,这样MD5也是可以校验成功的,接收方和发送方数据是一致的,但是数据内容实际是错误的,这样刷写到单片机后会运行不了的,因此结合单片机的体系架构,以ARM单片机为例,ARM的中断向量中文件最开始存放的是堆栈指针,接着是复位地址(PC指针)等,因为这些地址是要执行的,必然在单片机的内存空间范围上,如果我们判断范围不合法也可以认定为发送方上传固件时可能出错,拒绝执行升级,由此保护单片机程序。UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。可以在程序开发时为该程序生成一个UUID,这样程序升级包中必然有这个字段数据,如果升级过程中没有发现这个数据,可以认为升级包错误或者误传(将其他项目的升级包传到了该项目上)。
另外需要说明的是,本实施例的固件升级过程在app分区进行,升级过程中业务功能可以不间断服务,也就是图1中步骤S8运行业务程序可以是不间断运行,解决了固件升级过程中业务功能服务暂停的问题。
若在执行步骤S8至步骤S12过程中出现断电、数据错乱等异常情况,只要没有执行到步骤S13,就不会设置bootflag,下次启动从步骤S1开始还是执行原固件,继续执行步骤S2、步骤S3、步骤S8。在执行步骤S13后,如果系统重新复位或者重新上电,从步骤S1开始执行,继续执行步骤S2、步骤S4至步骤S7、步骤S3、步骤S8执行新固件。
上述固件升级方法的一个具体实例可以为:系统上电进入boot分区,检测bootflag标志,如果bootflag标志为255(十六进制0xff,说明是新系统,flash默认值),则bootflag清零并跳转到app分区执行;如果bootflag为0,直接跳转到app分区执行;如果bootflag为1则拷贝download分区固件到app分区,完整性校验通过后,清零bootflag,然后跳转到app分区执行。
进入app分区后,执行业务程序,如果接收到升级指令,通过上位机或者远端下载固件到download分区,进行MD5值校验,用于校验固件完整性,进行PC指针地址、SP堆栈指针地址、中断向量表地址、UUID、版本信息等一系列校验保证固件合法性和可用性,若所有的校验都通过,设置bootflag为1,等待下次重启时切换新版本固件运行;若校验不通过,上报升级失败。
升级中若出现断电、数据错乱等异常情况,不会设置bootflag,下次启动还是原固件,程序仍然可以执行,不受任何影响。升级中业务程序正常服务,升级后不立即切换新版本,等待下次重启后切换新版本。
在一个实施例中,所述启动分区、程序分区和下载分区位于同一存储器。例如,可以将处理器内置的程序存储器(如flash存储器)划分出boot分区、app分区和download分区。其中,boot分区只进行了判断、app分区跳转和固件复制,逻辑简单,代码量极少,因此可以分配极少的空间;由于在boot分区进行固件复制以完成app分区的固件升级,固件信息和固件包的下载和储存至download分区为数据存储,download分区不需要具有执行权限,因此download分区相比于app分区的空间占用少。
在另一实施例中,所述启动分区和程序分区位于同一存储器,所述下载分区与程序分区位于不同的存储器。如果单片机内置的flash空间较小,由于download分区不需要具有执行权限,而boot分区和app分区需要有执行权限,因此可以将download分区与boot分区、app分区分离,具体地,boot分区和app分区位于处理器内置的程序存储器(如内置的flash存储器),download分区位于处理器内置的数据存储器(如eeprom)或者处理器外接的存储器(如外接的flash存储器)。
进一步,所述固件信息和固件包储存于所述下载分区的连续空间,或者,所述固件信息和固件包分散储存于所述下载分区的非连续空间。换言之,固件储存在download分区不需要执行,只要可以存储数据的空间都可以设置download分区,甚至可以进行压缩节省空间,或者分散加载在不同的存储缝隙中,这样可以将内置flash分区利益最大化,尽可能满足更大的app程序开发需求。
综上所述,在阅读本详细公开内容之后,本领域技术人员可以明白,前述详细公开内容可以仅以示例的方式呈现,并且可以不是限制性的。尽管这里没有明确说明,本领域技术人员可以理解本申请意图囊括对实施例的各种合理改变,改进和修改。这些改变,改进和修改旨在由本公开提出,并且在本公开的示例性实施例的精神和范围内。
Claims (10)
1.一种固件升级方法,其特征在于,包括以下步骤:
系统启动进入启动分区执行程序,检测启动标志,若所述启动标志被清除,则进入程序分区执行程序;
若所述启动标志被设置为升级状态值,将储存在下载分区的固件信息和固件包复制到程序分区,然后进行完整性校验,校验通过则清除启动标志,再进入程序分区执行程序;
在所述程序分区执行程序,当有固件升级需求,则接收升级的固件信息和固件包并储存至所述下载分区;
在所述升级的固件信息和固件包接收完成后,进行完整性校验和合法性校验,校验通过则为所述启动标志设置升级状态值。
2.如权利要求1所述的固件升级方法,其特征在于,还包括:检测启动标志,若所述启动标志为系统初始值则清除启动标志,再进入程序分区执行程序。
3.如权利要求1或2所述的固件升级方法,其特征在于,所述启动分区、程序分区和下载分区位于同一存储器。
4.如权利要求1或2所述的固件升级方法,其特征在于,所述启动分区和程序分区位于同一存储器,所述下载分区与程序分区位于不同的存储器。
5.如权利要求4所述的固件升级方法,其特征在于,所述启动分区和程序分区位于处理器内置的程序存储器,所述下载分区位于处理器内置的数据存储器或者处理器外接的存储器。
6.如权利要求1或2所述的固件升级方法,其特征在于,所述固件信息和固件包储存于所述下载分区的连续空间,或者,所述固件信息和固件包分散储存于所述下载分区的非连续空间。
7.如权利要求1或2所述的固件升级方法,其特征在于,所述完整性校验包括:采用信息摘要算法验证文件传输的完整一致。
8.如权利要求1或2所述的固件升级方法,其特征在于,所述合法性校验包括:
校验堆栈指针地址范围是否在存储器地址空间内;
校验程序指针地址范围是否在存储器地址空间内;
校验中断向量表指针地址范围是否在存储器地址空间内;
校验固件中是否包含通用唯一识别码。
9.一种电子设备,其特征在于,包括:处理器和用于储存一个或多个程序的存储器;所述一个或多个程序被所述处理器执行,使得所述处理器实现如权利要求1至8任一项所述的固件升级方法。
10.如权利要求9所述的电子设备,其特征在于,所述处理器为单片机。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210639309.XA CN115061704A (zh) | 2022-06-07 | 2022-06-07 | 一种固件升级方法和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210639309.XA CN115061704A (zh) | 2022-06-07 | 2022-06-07 | 一种固件升级方法和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115061704A true CN115061704A (zh) | 2022-09-16 |
Family
ID=83200169
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210639309.XA Pending CN115061704A (zh) | 2022-06-07 | 2022-06-07 | 一种固件升级方法和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115061704A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117055929A (zh) * | 2023-10-11 | 2023-11-14 | 国网信息通信产业集团有限公司 | 一种实现双芯系统安全升级的方法、设备及介质 |
-
2022
- 2022-06-07 CN CN202210639309.XA patent/CN115061704A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117055929A (zh) * | 2023-10-11 | 2023-11-14 | 国网信息通信产业集团有限公司 | 一种实现双芯系统安全升级的方法、设备及介质 |
CN117055929B (zh) * | 2023-10-11 | 2024-01-09 | 国网信息通信产业集团有限公司 | 一种实现双芯系统安全升级的方法、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7991988B2 (en) | Communication device and firmware update method thereof | |
US9483246B2 (en) | Automated modular and secure boot firmware update | |
CN110597542B (zh) | 软件自动ota升级方法及装置、电子设备 | |
US20100132042A1 (en) | Method for upgrading antivirus software and terminal and system thereof | |
US9205809B2 (en) | Vehicle unit and method for operating the vehicle unit | |
US20120260250A1 (en) | Information processing device, virtual machine creation method, and application distribution system | |
WO2013103023A1 (ja) | 情報処理装置、情報処理方法、およびコンピュータプログラム | |
CN101807152B (zh) | 自我验证选择只读存储器的基本输出入系统及其验证方法 | |
CN108509215B (zh) | 一种系统软件的更换方法、装置、终端设备及存储介质 | |
CN105637521B (zh) | 一种数据处理方法及智能终端 | |
CN112947977A (zh) | 一种软件在线升级方法及系统 | |
CN101329631A (zh) | 一种嵌入式系统自动检测和恢复启动的方法及装置 | |
CN110874467B (zh) | 信息处理方法、装置、系统以及处理器、存储介质 | |
CN103106083B (zh) | 一种固件的加载方法及装置 | |
WO2016062146A1 (zh) | 序列号信息的更新方法、装置及终端 | |
CN113900693B (zh) | 一种固件升级方法、装置、系统、电子设备及存储介质 | |
CN109416629A (zh) | 固件升级方法、电子设备、相机系统和无人飞行器 | |
US20130080751A1 (en) | Method and device for updating bios program for computer system | |
CN115061704A (zh) | 一种固件升级方法和电子设备 | |
CN105045671A (zh) | 一种智能终端的系统升级方法及装置 | |
CN114265603A (zh) | 基于不对称分区的系统升级方法、装置和电子设备 | |
WO2018166322A1 (zh) | 系统分区的修复方法及装置 | |
WO2022058459A1 (en) | Bootloaders | |
KR100775431B1 (ko) | 임베디드 시스템 및 임베디드 시스템의 펌웨어 업데이트방법 | |
CN117235707A (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 |