CN116301995A - 基于bootloader架构的固件升级方法 - Google Patents
基于bootloader架构的固件升级方法 Download PDFInfo
- Publication number
- CN116301995A CN116301995A CN202310299210.4A CN202310299210A CN116301995A CN 116301995 A CN116301995 A CN 116301995A CN 202310299210 A CN202310299210 A CN 202310299210A CN 116301995 A CN116301995 A CN 116301995A
- Authority
- CN
- China
- Prior art keywords
- upgrade
- firmware
- code
- firmware file
- instruction
- 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
- 238000000034 method Methods 0.000 title claims abstract description 21
- 238000004891 communication Methods 0.000 claims abstract description 9
- 230000009191 jumping Effects 0.000 claims abstract description 3
- 238000012795 verification Methods 0.000 claims description 16
- 125000004122 cyclic group Chemical group 0.000 claims description 5
- 238000013461 design Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- 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
- G06F9/4406—Loading of operating system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种方便、有效、快捷、可移植性高且支持固件的备份保存的基于bootloader架构的固件升级方法。本发明包括以下步骤:A.启动嵌入式***,初始化硬件,初始化通讯串口并开启通讯串口接受数据;B.根据升级标志位判断是否进入升级模式,需正常启动程序则跳转到代码区运行程序代码;C.若升级标志位为1,进入升级模式,代码直接在bootloader运行,等待上位机代码固件的下发或备份升级指令的下发;D.设计了在bootloader跳转到代码区之前会有时间t供使用者发送指令,若需要中断跳转进程可通过指令更改升级标志位,再进行升级标志位的判断,实现升级模式的切换,保留后续的固件下载功能和备份升级功能。本发明应用于嵌入式***架构的技术领域。
Description
技术领域
本发明涉及嵌入式***架构设计领域,特别涉及一种基于bootloader架构的固件升级方法。
背景技术
万物互联时代的到来,越来越多的智能产品拥有了在线升级的能力,不论是***的更新、产品的迭代或是漏洞的修复都需要产品具有升级固件的能力,其中比较重要的一环便是通过bootloader对设备的固件进行管理和升级。固件升级过程中,常常会遇到升级被外界因素打断的情况,如断电或通讯异常等,需要有一种机制保护程序区代码在升级成功前不被擦除或更改;在代码启动时,也有几率代码区的代码因某些特殊原因无法启动,需要研发一种机制对此种情况做出对应的响应,即使出现代码区代码损坏,也能保留手段进行升级和更新,保证设备的正常启动。
其中bootloader是指嵌入式***在加电后执行的第一段代码,在它完成芯片和相关硬件的初始化后,再将操作***或固化的嵌入式应用程序装载到内存中然后跳转到应用程序所在的空间,启动设备运行,是一个引导加载程序。
发明内容
本发明所要解决的技术问题是克服现有技术的不足,提供了一种基于bootloader架构的固件升级方式,本发明实现的方法方便、有效、快捷,可移植性高,支持固件的备份保存,且能解决固件升级时遇到的安全机制、运行代码区域无法正常启动的问题。
本发明所采用的技术方案是:本发明包括一种基于bootloader架构的固件升级方法,它包括以下步骤:
S1.***设备上电后,启动嵌入式***,初始化硬件,初始化通讯串口并开启通讯串口接收数据;
S2.预留时间t供使用者发送指令,判断升级标记位是否需要切换模式;
S3.由bootloader引导,根据升级标记位判断是否进入升级模式,若无指令输入,则升级标记位为0,正常启动程序并由bootloader跳转到代码区运行程序代码;
S4.若上位机输入指令,则升级标志位为1,进入升级模式,代码直接在bootloader运行,不进行代码区跳转的操作,等待上位机的固件文件的指令下发或上位机的备份升级的指令下发;
S5.若上位机下发固件文件,则需进行固件文件的下载;
S6.对下载的固件文件进行识别校验,若固件文件校验判断为不符合时,则清空相关升级标志位后重启,恢复正常运行;
S7.若固件文件校验判断为符合对应设备的升级固件文件后开始进行下载到设备外部Flssh进行备份;
S8.对外部Flssh备份的升级固件文件进行识别校验,若升级固件文件校验失败时,则清空相关升级标志位后重启,恢复正常运行;
S9.若升级固件文件校验通过时,开始拷贝,从外部Flash备份的升级固件文件覆盖到程序代码区,覆盖升级完成后清除相关升级标志位重启设备,完成一次升级;
S10.若上位机直接下发备份升级指令,则从无需进行步骤S5-步骤S7的固件文件下载,直接读取备份区的升级固件文件,然后进入步骤S8和步骤S9对升级固件文件进行校验后开始升级。
进一步的,所述步骤S4通过配套设计的上位机与设备进行通讯,下发固件文件的指令或备份升级指令,对上位机指令中的固件文件和对应的固件ID内容进行识别,所述固件ID是事先约定好的内容,需要升级固件文件的固件ID与设备代码里保存的一致,识别无误后开始进行升级包的下载接收,同时设备会保存升级固件文件的基本信息到外部Flash,用于备份升级的校验识别使用。
进一步的,所述的固件文件的校验和升级固件的校验均采用循环冗余校验。
更进一步的,若步骤S9中的程序拷贝过程中遇到了问题,导致代码区的代码不完整而无法启动,可返回进入步骤S4进入升级模式,发起重新的升级或者把备份区的代码重新进行验证后再进行拷贝,确保设备不会因外界因素的影响无法启动。
本发明的有益效果是:1.本发明采用在bootloader跳转到代码区之前会有时间t供使用者发送指令的设计,可以中断跳转,从而实现在固件代码区无法正常启动时也可以进入升级模式,保留任何时候更新代码固件的手段;2.通过对符合校验的固件文件下载到设备外部Flssh进行备份,形成升级固件文件,可直接输入指令发起,通过备份区的固件发起升级,从而确保程序能进行备份升级,提供升级功能所需的多种技术的可靠实现,缩短开发周期,避免重复设计。
附图说明
图1是本发明的流程示意图。
具体实施方式
如图1所示,在本实施例中,本发明包括以下步骤:
S1.***设备上电后,启动嵌入式***,初始化硬件,初始化通讯串口并开启通讯串口接收数据;
S2.预留时间2秒等待使用者在上位机中发送指令,判断是否需要切换模式;
S3.若无指令输入,代码由bootloader正常跳转到代码区运行;
S4.若跳转到代码区运行前,上位机输入指令,则判断升级标志位为1并进入升级模式,如0x5A、0xA5、0x11、0x22、0x33、n,其中n=0x01切换到升级模式,n=0x02进行备份升级,代码直接在bootloader运行,不进行代码区跳转的操作,等待上位机的固件文件的指令下发或上位机的备份升级的指令下发;
S5.若上位机按照协议分包下发固件文件,则需进行固件文件的下载;
S6.设备根据首包数据对下载的固件文件进行识别校验,所述首包数据包括固件名称、固件大小、下发的包数和效验码,对上位机指令中的固件文件和对应的固件ID内容进行识别,所述固件ID是事先约定好的内容,需要升级固件文件的固件ID与设备代码里保存的一致,识别无误后开始进行升级包的下载接收,同时设备会保存升级固件文件的基本信息到外部Flash,用于备份升级的校验识别使用若固件文件校验判断为不符合时,则清空相关升级标志位后重启,恢复正常运行;
S7.若固件文件校验判断为符合对应设备的升级固件文件后开始进行下载到设备外部Flssh进行备份,该过程中升级固件文件下载时,会一边下载一边保存到设备的外部Flash进行备份保存,为保证数据可靠性,下载的内容会以数据包为单位进行校验,校验无误才会写入相对应的外部Flash的备份代码区域,可以用于后边的备份升级;
S8.对外部Flssh备份的升级固件文件进行识别校验,若升级固件文件校验失败时,则清空相关升级标志位后重启,恢复正常运行;
S9.若升级固件文件校验通过时,开始拷贝,从外部Flash备份的升级固件文件覆盖到程序代码区,覆盖升级完成后清除相关升级标志位重启设备,完成一次升级;即从下载完成后会进行整个固件代码的校验,从外部Flash读取到缓冲区,使用循环冗余校验,确认升级固件代码完整后,开始从外部Flash(备份区)拷贝代码到程序运行区,拷贝完成后,相对应标志位清空复位,代码重启便完成一次程序的固件升级;
S10.若上位机直接下发备份升级指令,可直接监测备份区是否保存有升级文件,实现直接从备份区拷贝代码到程序区,进行校验后开始实现备份升级,无需下载固件文件,每次的升级下载的固件文件都会存储在外部Flash,包括固件的基本信息等都会保留作为备份,这个机制是本发明的核心思想,确保了程序在任何时候都能正常启动与提高升级的安全性。
在本实施例中,所述的固件文件的校验和升级固件的校验均采用循环冗余校验,循环冗余校验是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误;生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化;一般来说,循环冗余校验的值都是32位的整数;由于本函数易于用二进制的计算机硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。
在本实施例中,若步骤S9中的程序拷贝过程中遇到了问题,导致代码区的代码不完整而无法启动,可进入步骤S4进入升级模式,发起重新的升级或者把备份区的代码重新进行验证后再进行拷贝,确保设备不会因外界因素的影响无法启动。
综上所述,本发明提供了一种基于bootloader架构的固件升级方法,用于解决以往升级过程中的安全性问题以及增加备份固件文件功能,支持备份升级,保证升级有效性和安全性;支持自定义指令实现跳转切换,在跳转到代码区前阻断跳转,进入升级模式,以此提高设备的固件升级安全性,保留方式进行备份升级,保证设备的可靠运行
虽然本发明的实施例是以实际方案来描述的,但是并不构成对本发明含义的限制,对于本领域的技术人员,根据本说明书对其实施方案的修改及与其他方案的组合都是显而易见的。
Claims (4)
1.一种基于bootloader架构的固件升级方法,其特征在于,它包括以下步骤:
S1.***设备上电后,启动嵌入式***,初始化硬件,初始化通讯串口并开启通讯串口接收数据;
S2.预留时间t供使用者发送指令,判断升级标记位是否需要切换模式;
S3.由bootloader引导,根据升级标记位判断是否进入升级模式,若无指令输入,则升级标记位为0,正常启动程序并由bootloader跳转到代码区运行程序代码;
S4.若上位机输入指令,则升级标志位为1,进入升级模式,代码直接在bootloader运行,不进行代码区跳转的操作,等待上位机的固件文件的指令下发或上位机的备份升级的指令下发;
S5.若上位机下发固件文件,则需进行固件文件的下载;
S6.对下载的固件文件进行识别校验,若固件文件校验判断为不符合时,则清空相关升级标志位后重启,恢复正常运行;
S7.若固件文件校验判断为符合对应设备的升级固件文件后开始进行下载到设备外部Flssh进行备份;
S8.对外部Flssh备份的升级固件文件进行识别校验,若升级固件文件校验失败时,则清空相关升级标志位后重启,恢复正常运行;
S9.若升级固件文件校验通过时,开始拷贝,从外部Flash备份的升级固件文件覆盖到程序代码区,覆盖升级完成后清除相关升级标志位重启设备,完成一次升级;
S10.若上位机直接下发备份升级指令,则从无需进行步骤S5-步骤S7的固件文件下载,直接读取备份区的升级固件文件,然后进入步骤S8和步骤S9对升级固件文件进行校验后开始升级。
2.根据权利要求1所述的基于bootloader架构的固件升级方法,其特征在于:所述步骤S4通过配套设计的上位机与设备进行通讯,下发固件文件的指令或备份升级指令,对上位机指令中的固件文件和对应的固件ID内容进行识别,所述固件ID是事先约定好的内容,需要升级固件文件的固件ID与设备代码里保存的一致,识别无误后开始进行升级包的下载接收,同时设备会保存升级固件文件的基本信息到外部Flash,用于备份升级的校验识别使用。
3.根据权利要求1所述的基于bootloader架构的固件升级方法,其特征在于:所述的固件文件的校验和升级固件的校验均采用循环冗余校验。
4.根据权利要求1所述的基于bootloader架构的固件升级方法,其特征在于:若步骤S9中的程序拷贝过程中遇到了问题,导致代码区的代码不完整而无法启动,可进入步骤S4进入升级模式,发起重新的升级或者把备份区的代码重新进行验证后再进行拷贝,确保设备不会因外界因素的影响无法启动。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310299210.4A CN116301995A (zh) | 2023-03-24 | 2023-03-24 | 基于bootloader架构的固件升级方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310299210.4A CN116301995A (zh) | 2023-03-24 | 2023-03-24 | 基于bootloader架构的固件升级方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116301995A true CN116301995A (zh) | 2023-06-23 |
Family
ID=86818469
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310299210.4A Pending CN116301995A (zh) | 2023-03-24 | 2023-03-24 | 基于bootloader架构的固件升级方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116301995A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117932625A (zh) * | 2024-03-25 | 2024-04-26 | 慧翰微电子股份有限公司 | 一种嵌入式设备的升级方法、装置、电子设备及存储介质 |
-
2023
- 2023-03-24 CN CN202310299210.4A patent/CN116301995A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117932625A (zh) * | 2024-03-25 | 2024-04-26 | 慧翰微电子股份有限公司 | 一种嵌入式设备的升级方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8539471B2 (en) | Updating firmware of an electronic device | |
TWI384367B (zh) | 韌體更新系統及方法 | |
US7971199B1 (en) | Mobile device with a self-updating update agent in a wireless network | |
CN109189445B (zh) | 一种物联网设备程序升级的方法 | |
US7512749B2 (en) | Safe software revision for embedded systems | |
CN107783776B (zh) | 固件升级包的处理方法及装置、电子设备 | |
US20050132351A1 (en) | Updating electronic device software employing rollback | |
US7805637B2 (en) | Network equipment and a method for monitoring the start up of such equipment | |
CN110333891A (zh) | 基于物联网的增强型ota升级的方法 | |
CN105260215A (zh) | 一种u盘升级车载行车记录仪终端的方法 | |
CN102184111B (zh) | 操作***在线升级方法及带操作***的设备 | |
CN112612524A (zh) | Linux***启动的方法、装置、设备及存储介质 | |
CN113254048B (zh) | 引导程序更新方法、装置、设备及计算机可读介质 | |
KR20080023841A (ko) | 펌웨어 업그레이드와 손상된 펌웨어 자동 복구 시스템 및방법 | |
CN108345464A (zh) | 一种安卓***的启动方法及安卓车机 | |
CN116301995A (zh) | 基于bootloader架构的固件升级方法 | |
CN112433769A (zh) | 一种bmc启动方法、装置、计算机设备及存储介质 | |
CN116820528A (zh) | 固件版本升级方法、装置、芯片和电子设备 | |
CN117130672A (zh) | 服务器启动流程控制方法、***、终端及存储介质 | |
CN112527371B (zh) | 一种引导加载程序升级方法、装置、电子设备及存储介质 | |
JP2005284902A (ja) | 端末装置、その制御方法及び制御プログラム、ホスト装置、その制御方法及び制御プログラム、遠隔更新システム、方法及びプログラム | |
CN115658152A (zh) | 固件升级方法、固件、电子设备和计算机可读存储介质 | |
CN114546455A (zh) | 一种双分区的mcu软件升级方法及装置 | |
CN114996717A (zh) | 一种防止误擦除的升级程序设计方法 | |
CN114995852A (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 |