首页> 中国专利> 引导程序更新方法、装置、设备及计算机可读介质

引导程序更新方法、装置、设备及计算机可读介质

摘要

本申请涉及一种引导程序更新方法、装置、设备及计算机可读介质。该方法包括:在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序;在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序,第三引导程序中携带有引导程序更新文件,引导程序更新文件包括第一引导程序和/或第二引导程序的更新文件,第三引导程序用于更新第一引导程序和/或第二引导程序;执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新。本申请解决了bootloader升级流程复杂、安全性低的技术问题。

著录项

  • 公开/公告号CN113254048A

    专利类型发明专利

  • 公开/公告日2021-08-13

    原文格式PDF

  • 申请/专利权人 深之蓝(天津)水下智能科技有限公司;

    申请/专利号CN202110682819.0

  • 申请日2021-06-21

  • 分类号G06F8/65(20180101);G06F11/14(20060101);

  • 代理机构11662 北京华夏泰和知识产权代理有限公司;

  • 代理人阴亮;刘蔓莉

  • 地址 300453 天津市滨海新区中关村科技园泉州道1号1-5轴101室

  • 入库时间 2023-06-19 12:13:22

说明书

技术领域

本申请涉及嵌入式技术领域,尤其涉及一种引导程序更新方法、装置、设备及计算机可读介质。

背景技术

嵌入式MCU(Microcontroller Unit,微控制单元)booloader作为MCU启动运行的引导程序,同时负责为应用程序固件进行升级,但是bootloader程序存在的漏洞会严重影响MCU的正常运行,因此bootloader程序同样面临升级更新的需求。

目前,相关技术中,升级bootloader的方案比较繁琐,配置参数和系统运行数据容易丢失,导致容易宕机。

针对bootloader升级流程复杂、安全性低的问题,目前尚未提出有效的解决方案。

发明内容

本申请提供了一种引导程序更新方法、装置、设备及计算机可读介质,以解决bootloader升级流程复杂、安全性低的技术问题。

根据本申请实施例的一个方面,本申请提供了一种引导程序更新方法,包括:

在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序,第一引导程序用于引导微控制器启动,并确定所要跳转的执行程序,第二引导程序用于更新所述微控制器的应用程序,应用程序用于记录微控制器提供的控制服务;

在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序,第三引导程序中携带有引导程序更新文件,引导程序更新文件包括第一引导程序和/或第二引导程序的更新文件,第三引导程序用于更新第一引导程序和/或第二引导程序;

执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新。

可选地,第一引导程序的程序数据存储在第一分区,第二引导程序的程序数据存储在第二分区,第一分区和第二分区为引导程序区;在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序包括:

从第二分区提取第二引导程序的程序数据,并获取第二引导程序的程序数据的第一原始校验码,第一原始校验码为第二引导程序编码完成后生成的,第一原始校验码存储于第二分区中的校验码存储扇区;

确定第二引导程序的程序数据的第一当前校验码;

在第一当前校验码与第一原始校验码一致的情况下,启动第二引导程序。

可选地,目标应用程序的程序数据存储在第三分区,第三分区为应用程序区,引导程序区和应用程序区均为第一缓存器中的扇区;在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序包括:

接收第三引导程序的程序数据,并将第三引导程序的程序数据转存至第一备份区,第一备份区为第二缓存器中的扇区;

在第三引导程序的程序数据转存完成后,擦除第三分区中存储的目标应用程序的原始数据;

将第一备份区中第三引导程序的程序数据复制到第三分区,以对目标应用程序进行更新。

可选地,对目标应用程序进行更新之后,所述方法还包括:

从第三分区提取更新后的目标应用程序的程序数据,并获取第三引导程序的程序数据的第二原始校验码,第二原始校验码为第三引导程序编码完成后生成的,第二原始校验码存储于第三分区中的校验码存储扇区;

确定更新后目标应用程序的程序数据的第二当前校验码;

在第二当前校验码与第二原始校验码一致的情况下,向第一引导程序传递正常启动标识,并重新启动第一引导程序。

可选地,执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新包括:

在第一引导程序检测到正常启动标识的情况下,启动更新后的目标应用程序,其中,更新后的目标应用程序用于实现第三引导程序的预设功能;

在更新后的目标应用程序中,将第一分区中存储的第一引导程序的原始数据复制到第二备份区,第二备份区为第二缓存器中的扇区;

备份完成后,擦除第一分区中存储的原始数据;

将第一引导程序的更新文件复制到第一分区,以对第一引导程序进行更新;

和/或,

在第一引导程序检测到正常启动标识的情况下,启动更新后的目标应用程序,其中,更新后的目标应用程序用于实现第三引导程序的预设功能;

在更新后的目标应用程序中,将第二分区中存储的第二引导程序的原始数据复制到第三备份区,第三备份区为第二缓存器中的扇区;

备份完成后,擦除第二分区中存储的原始数据;

将第二引导程序的更新文件复制到第二分区,以对第二引导程序进行更新。

可选地,对第一引导程序进行更新和/或对第二引导程序进行更新之后,所述方法还包括:

从第一分区提取更新后的第一引导程序的程序数据,并获取第一引导程序的更新文件的第三原始校验码,第三原始校验码为第一引导程序的更新文件编码完成后生成的,第三原始校验码存储于第一分区中的校验码存储扇区;

确定更新后第一引导程序的程序数据的第三当前校验码;

在第三当前校验码与第三原始校验码一致的情况下,确定第一引导程序更新成功;

和/或,

从第二分区提取更新后的第二引导程序的程序数据,并获取第二引导程序的更新文件的第四原始校验码,第四原始校验码为第二引导程序的更新文件编码完成后生成的,第四原始校验码存储于第二分区中的校验码存储扇区;

确定更新后第二引导程序的程序数据的第四当前校验码;

在第四当前校验码与第四原始校验码一致的情况下,确定第二引导程序更新成功。

可选地,

在接收第三引导程序的程序数据的进程中断的情况下,向第一引导程序发送传输失败标识,以使得第一引导程序检测到传输失败标识时,启动第二引导程序重新更新目标应用程序;

在将第一备份区中第三引导程序的程序数据复制到第三分区的进程中断,和/或更新后的目标应用程序校验未通过的情况下,向第一引导程序发送第一更新失败标识,以使得第一引导程序检测到第一更新失败标识时,启动第二引导程序重新更新目标应用程序;

在将第一分区中存储的第一引导程序的原始数据复制到第二备份区的进程中断,和/或更新后的第一引导程序校验未通过的情况下,从第二备份区恢复第一引导程序的原始数据,并向第一引导程序发送第二更新失败标识,以执行原始的第一引导程序并重新引导目标应用程序更新第一引导程序;

在将第二分区中存储的第二引导程序的原始数据复制到第三备份区的进程中断,和/或更新后的第二引导程序校验未通过的情况下,向第一引导程序发送第三更新失败标识,以执行第一引导程序并重新引导目标应用程序更新第二引导程序。

根据本申请实施例的另一方面,本申请提供了一种引导程序更新装置,包括:

启动模块,用于在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序,第一引导程序用于引导微控制器启动,并确定所要跳转的执行程序,第二引导程序用于更新微控制器的应用程序,应用程序用于记录微控制器提供的控制服务;

应用程序更新模块,用于在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序,第三引导程序中携带有引导程序更新文件,引导程序更新文件包括第一引导程序和/或第二引导程序的更新文件,第三引导程序用于更新第一引导程序和/或第二引导程序;

引导程序逆向更新模块,用于执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新。

根据本申请实施例的另一方面,本申请提供了一种电子设备,包括存储器、处理器、通信接口及通信总线,存储器中存储有可在处理器上运行的计算机程序,存储器、处理器通过通信总线和通信接口进行通信,处理器执行计算机程序时实现上述方法的步骤。

根据本申请实施例的另一方面,本申请还提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质,程序代码使处理器执行上述的方法。

本申请实施例提供的上述技术方案与相关技术相比具有如下优点:

本申请技术方案为在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序,第一引导程序用于引导微控制器启动,并确定所要跳转的执行程序,第二引导程序用于更新所述微控制器的应用程序,应用程序用于记录微控制器提供的控制服务;在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序,第三引导程序中携带有引导程序更新文件,引导程序更新文件包括第一引导程序和/或第二引导程序的更新文件,第三引导程序用于更新第一引导程序和/或第二引导程序;执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新。本申请无需设置多个引导程序和多个应用程序来更新目标引导程序,仅需将一个应用程序升级为虚拟引导程序来逆向升级目标引导程序,简化了流程的同时提升了安全性,且降低了成本,可以部署在各类规模的微控制器中,解决了bootloader升级流程复杂、安全性低的技术问题,对bootloader0的更新也使得bootloader0能够与最新拓展的分区及各分区添加的功能相适应、匹配,避免了指向性错误的发生,有效减少了未知错误的发生。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为根据本申请实施例提供的一种可选的引导程序更新方法流程图;

图2为根据本申请实施例提供的一种可选的Flash分区示意图;

图3为根据本申请实施例提供的一种可选的引导程序有效性校验流程图;

图4为根据本申请实施例提供的一种可选的应用程序更新流程图;

图5为根据本申请实施例提供的一种可选的应用程序有效性校验流程图;

图6为根据本申请实施例提供的一种可选的第一引导程序更新流程图;

图7为根据本申请实施例提供的一种可选的第二引导程序更新流程图;

图8为根据本申请实施例提供的一种可选的第一引导程序有效性校验流程图;

图9为根据本申请实施例提供的一种可选的第二引导程序有效性校验流程图;

图10为根据本申请实施例提供的一种可选的引导程序更新装置框图;

图11为本申请实施例提供的一种可选的电子设备结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本申请的说明,其本身并没有特定的意义。因此,“模块”与“部件”可以混合地使用。

相关技术中,升级bootloader的方案比较繁琐,配置参数和系统运行数据容易丢失,导致容易宕机。

现有技术方案通常有以下分类:

bootloader+app模式,适合小型mcu,缺点是升级失败需要再次升级,且无法保证为bootloader安全升级;

bootloader+app+bank模式,同样无法保证为bootloader安全升级;

bootloader+app1+app2模式,此方案能保证升级app失败后能从另外一个app启动;

bootloader1+bootloader2+app1模式(bootloader1和bootloader2均可作为mcu的引导程序,且功能互补),此种方案适合具有大空间flash的mcu,成本较高且实现繁琐;

bootloader1+bootloader2+app1+app2模式,此种方案适合具有大空间flash的mcu,成本较高且实现繁琐。

因此,低成本、易实现、安全性高、流程简单的bootloader升级是亟需的。

为了解决背景技术中提及的问题,根据本申请实施例的一方面,提供了一种引导程序更新方法的实施例。

可选地,在本申请实施例中,上述引导程序更新方法可以由微控制器执行,如图1所示,该方法可以包括以下步骤:

步骤S102,在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序,第一引导程序用于引导微控制器启动,并确定所要跳转的执行程序,第二引导程序用于更新所述微控制器的应用程序,应用程序用于记录微控制器提供的控制服务。

Bootloader作为嵌入式MCU启动运行的引导程序,同时负责为应用程序进行升级。

本申请实施例中,第一引导程序可以作为嵌入式MCU启动运行的引导程序,可以表示为bootloader0,第二引导程序可以负责为应用程序进行升级,可以表示为bootloader1。上述引导程序更新标识用于指示更新bootloader0和/或bootloader1,即本申请技术方案可以更新嵌入式MCU启动运行的引导程序,还可以更新用于更新应用程序的第二引导程序。

现有技术中不会对bootloader0程序进行升级,因为bootloader0程序仅作为引导向目标分区跳转和固件恢复功能,不会对其增加其他功能。然而随着分区拓展和bootloader1、应用程序的功能迭代,原始的bootloader0程序不可避免会发生指向性错误或其他未知错误,因此为了及时与分区拓展以及与功能迭代相匹配,同时也为了减少未知错误的发生,需要对bootloader0程序进行更新。

该引导程序更新标识可以是开发人员在将第一引导程序、第二引导程序的更新文件编码完成后向微控制器发送的。微控制器接收到该引导程序更新标识后,在下一次或用户指定时间上电启动时,经过第一引导程序bootloader0的检测,识别到该引导程序更新标识,则由第一引导程序bootloader0引导至执行第二引导程序bootloader1,而不是引导至执行应用程序app,从而开始引导程序的更新步骤。

步骤S104,在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序,第三引导程序中携带有引导程序更新文件,引导程序更新文件包括第一引导程序和/或第二引导程序的更新文件,第三引导程序用于更新第一引导程序和/或第二引导程序。

本申请实施例中,在由第一引导程序bootloader0引导至执行第二引导程序bootloader1的过程中,由第二引导程序bootloader1等待上位机的更新指令。第二引导程序bootloader1接收到更新指令并响应更新指令返回准备好进行更新的指示消息后,上位机向微控制器发送第三引导程序的程序数据。由于第二引导程序bootloader1的作用是升级微控制器中的应用程序app,因此第二引导程序bootloader1将第三引导程序的程序数据作为应用程序app的更新文件,对目标应用程序进行更新。而第三引导程序中携带有第一引导程序bootloader0和/或第二引导程序bootloader1的更新文件,第三引导程序用于更新第一引导程序bootloader0和/或第二引导程序bootloader1,就使得目标应用程序在更新之后其功能就替换为了第三引导程序的功能,即更新第一引导程序bootloader0和/或第二引导程序bootloader1,从而就将目标应用程序变成了一个虚拟引导程序。

步骤S106,执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新。

本申请实施例中,目标应用程序更新后,其功能替换为了第三引导程序的功能,从而就将目标应用程序变成了一个虚拟引导程序,此时即可执行目标应用程序以更新第一引导程序bootloader0和/或第二引导程序bootloader1。

采用本申请技术方案,无需设置多个引导程序和多个应用程序来更新目标引导程序,仅需将一个应用程序升级为虚拟引导程序来逆向升级目标引导程序,简化了流程的同时提升了安全性,且降低了成本,可以部署在各类规模的微控制器中,解决了bootloader升级流程复杂、安全性低的技术问题,对bootloader0的更新也使得bootloader0能够与最新拓展的分区及各分区添加的功能相适应、匹配,避免了指向性错误的发生,有效减少了未知错误的发生。

可选地,第一引导程序的程序数据存储在第一分区,第二引导程序的程序数据存储在第二分区,第一分区和第二分区为引导程序区。

本申请实施例中,如图2所示,第一引导程序bootloader0的程序数据存储在第一分区,即bootloader0区,第二引导程序bootloader1的程序数据存储在第二分区,即bootloader1区。微控制器上电启动时,首先是加载bootloader0区的程序数据,从而执行第一引导程序bootloader0,第一引导程序bootloader0根据引导程序更新标识引导微控制器加载bootloader1区的程序数据,从而执行第二引导程序。该bootloader0区和bootloader1区均为引导程序区。

如图3所示,步骤S102在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序可以包括以下步骤:

步骤S302,从第二分区提取第二引导程序的程序数据,并获取第二引导程序的程序数据的第一原始校验码,第一原始校验码为第二引导程序编码完成后生成的,第一原始校验码存储于第二分区中的校验码存储扇区。

本申请实施例中,为了系统的稳定性和安全运行,第一引导程序bootloader0在引导微控制器加载bootloader1区以执行第二引导程序bootloader1之前,需要对第二引导程序bootloader1进行有效性校验。首先,从bootloader1区提取第二引导程序的程序数据,并从bootloader1区获取第二引导程序的第一原始校验码。该第一原始校验码为开发人员在将第二引导程序编码完成后生成的,用以标识第二引导程序的原始代码数据。

步骤S304,确定第二引导程序的程序数据的第一当前校验码。

本申请实施例中,利用从bootloader1区提取的程序数据,计算第二引导程序bootloader1的第一当前校验码,该第一当前校验码即为该第二引导程序bootloader1当前的程序数据的标识。

步骤S306,在第一当前校验码与第一原始校验码一致的情况下,启动第二引导程序。

本申请实施例中,将第二引导程序的第一当前校验码和第一原始校验码进行比较,二者一致,说明第二引导程序与原始代码相同,没有被篡改,说明当前的第二引导程序有效。此时第一引导程序bootloader0即可引导微控制器加载bootloader1区的程序数据,从而启动第二引导程序bootloader1。

本申请实施例中,bootloader1区的程序数据可以在独立于微控制器的其他缓存器中备份,从而在bootloader1无效时,从对应的缓存器中提取备份的bootloader1程序数据用以在紧急情况下保证系统可以正常运行。

可选地,目标应用程序的程序数据存储在第三分区,第三分区为应用程序区,引导程序区和应用程序区均为第一缓存器中的扇区。

本申请实施例中,如图2所示,目标应用程序的程序数据存储在第三分区,即APP应用程序区,图中引导程序区和应用程序区均为微控制器中的缓存扇区,即第一缓存器中的扇区。

如图4所示,步骤S104在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序包括以下步骤:

步骤S402,接收第三引导程序的程序数据,并将第三引导程序的程序数据转存至第一备份区,第一备份区为第二缓存器中的扇区。

本申请实施例中,启动第二引导程序bootloader1之后,bootloader1等待上位机的更新指令。bootloader1接收到更新指令并响应更新指令返回准备好进行更新的指示消息后,上位机向微控制器发送第三引导程序的程序数据。bootloader1将第三引导程序的程序数据转存至第一备份区,如图2所示,第一备份区可以是图示中的备份1区,用以暂存和备份第三引导程序的程序数据,备份1区所在的缓存器为与微控制器的缓存分立的其他缓存器,即片外Flash分区,使得微控制器遇到数据丢失时,可以从备份区提取相应的数据使用。

步骤S404,在第三引导程序的程序数据转存完成后,擦除第三分区中存储的目标应用程序的原始数据。

本申请实施例中,备份完成后,bootloader1将APP应用程序区的数据擦除,从而为升级目标应用程序腾出数据存储空间。

步骤S406,将第一备份区中第三引导程序的程序数据复制到第三分区,以对目标应用程序进行更新。

本申请实施例中,bootloader1将APP应用程序区的数据擦除后,即可将备份1区中存储的第三引导程序的程序数据复制到APP应用程序区,从而将目标应用程序升级为虚拟引导程序(虚拟bootloader)。

本申请实施例中,执行更新后的目标应用程序(虚拟bootloader)之前,还需编译APP应用程序区存储的第三引导程序,生成bin文件,之后将bin文件转换为数组,将数组定义到目标应用程序的数据区,从而得到虚拟bootloader。

可选地,若发生擦除APP应用程序区原始数据失败、复制第三引导程序的程序数据失败、进程中断等意外情况时,可以重启微控制器,经过执行bootloader0,bootloader0引导向执行bootloader1,bootloader1再次擦除APP应用程序区原始数据,并重新复制第三引导程序的程序数据至APP应用程序区,进而将目标应用程序升级为虚拟引导程序。

将目标应用程序升级为虚拟bootloader之后,为了保证系统稳定性和安全运行,还需要对升级后的目标应用程序即虚拟bootloader进行有效性校验。

可选地,如图5所示,对目标应用程序进行更新之后,所述方法还包括:

步骤S502,从第三分区提取更新后的目标应用程序的程序数据,并获取第三引导程序的程序数据的第二原始校验码,第二原始校验码为第三引导程序编码完成后生成的,第二原始校验码存储于第三分区中的校验码存储扇区。

本申请实施例中,对升级后的目标应用程序即虚拟bootloader进行有效性校验时,首先,从APP应用程序区提取当前目标应用程序的程序数据(即第三引导程序的程序数据),并从APP应用程序区获取第三引导程序的第二原始校验码。该第二原始校验码为开发人员在将第三引导程序编码完成后生成的,用以标识第三引导程序的原始代码数据。

步骤S504,确定更新后目标应用程序的程序数据的第二当前校验码。

本申请实施例中,利用从APP应用程序区提取的程序数据,计算当前目标应用程序(第三引导程序)的第二当前校验码,该第二当前校验码即为该第三引导程序当前的程序数据的标识。

步骤S506,在第二当前校验码与第二原始校验码一致的情况下,向第一引导程序传递正常启动标识,并重新启动第一引导程序。

本申请实施例中,将第三引导程序的第二当前校验码和第二原始校验码进行比较,二者一致,说明第三引导程序与原始代码相同,没有被篡改,说明当前的第三引导程序有效。此时第二引导程序bootloader1向第一引导程序bootloader0发送正常启动标识,并引导微控制器重新启动第一引导程序bootloader0,重新启动第一引导程序bootloader0时,需要进行软件复位。

在重新执行第一引导程序bootloader0时,bootloader0检测到正常启动标识,从而引导微控制器加载APP应用程序区的程序数据,进而执行更新后的目标应用程序。

可选地,如图6所示,执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新包括以下步骤:

步骤S602,在第一引导程序检测到正常启动标识的情况下,启动更新后的目标应用程序,其中,更新后的目标应用程序用于实现第三引导程序的预设功能。

本申请实施例中,在重新执行第一引导程序bootloader0时,bootloader0检测到正常启动标识,从而引导微控制器加载APP应用程序区的程序数据,进而执行更新后的目标应用程序。更新后的目标应用程序实际上实现第三引导程序的预设功能,而此时第三引导程序中携带有第一引导程序的更新文件,即此时第三引导程序用于更新第一引导程序,此时的目标应用程序实际上变成了虚拟bootloader。

步骤S604,在更新后的目标应用程序中,将第一分区中存储的第一引导程序的原始数据复制到第二备份区,第二备份区为第二缓存器中的扇区。

本申请实施例中,虚拟bootloader先将bootloader0区存储的该第一引导程序bootloader0的原始数据备份到第二备份区,从而在更新第一引导程序bootloader0失败时,可以从第二备份区恢复bootloader0的原始数据,避免系统无法运行。如图2所示,第二备份区可以是图示中的备份2区,用以暂存和备份第一引导程序的原始数据,备份2区所在的缓存器为与微控制器的缓存分立的其他缓存器,即片外Flash分区,使得微控制器遇到数据丢失时,可以从备份区提取相应的数据使用。该片外Flash分区中,还可以设置设备信息区,用于存储微控制器的运行信息,设置升级状态区,用于记录应用程序、引导程序的升级状态。

步骤S606,备份完成后,擦除第一分区中存储的原始数据。

本申请实施例中,备份完成后,虚拟bootloader将bootloader0区的数据擦除,从而为升级bootloader0腾出数据存储空间。

步骤S608,将第一引导程序的更新文件复制到第一分区,以对第一引导程序进行更新。

本申请实施例中,虚拟bootloader将bootloader0区的数据擦除后,即可将携带的第一引导程序的更新文件复制到bootloader0区,从而更新bootloader0。

可选地,若发生擦除bootloader0区原始数据失败、复制第一引导程序的更新文件失败、进程中断等意外情况时,可以重启微控制器,此时bootloader0区数据损坏,无法启动bootloader0,为了保证系统正常启动,微控制器可以直接加载bootloader1区的数据,从而直接以bootloader1启动,在bootloader1中持续等待更新指令,从而再次更新bootloader0。微控制器还可以从备用启动区加载数据启动,从而等待更新指令再次更新bootloader0。再次更新bootloader0时,bootloader1或其他备用引导程序引导向执行虚拟bootloader,虚拟bootloader再次备份并擦除bootloader0区原始数据,并重新复制bootloader0的更新文件至bootloader0区,进而更新bootloader0。或者,为了保障系统安全可以中断bootloader0更新,即bootloader1或其他备用引导程序可以从第二备份区恢复bootloader0的原始数据,使得微控制器在下一次上电启动时,可以从bootloader0正常启动。

可选地,如图7所示,执行更新后的目标应用程序,以使用第二引导程序的更新文件对第二引导程序进行更新包括以下步骤:

步骤S702,在第一引导程序检测到正常启动标识的情况下,启动更新后的目标应用程序,其中,更新后的目标应用程序用于实现第三引导程序的预设功能。

本申请实施例中,在重新执行第一引导程序bootloader0时,bootloader0检测到正常启动标识,从而引导微控制器加载APP应用程序区的程序数据,进而执行更新后的目标应用程序。更新后的目标应用程序实际上实现第三引导程序的预设功能,而此时第三引导程序中携带有第二引导程序的更新文件,即此时第三引导程序用于更新第二引导程序,此时的目标应用程序实际上变成了虚拟bootloader。

步骤S704,在更新后的目标应用程序中,将第二分区中存储的第二引导程序的原始数据复制到第三备份区,第三备份区为第二缓存器中的扇区。

本申请实施例中,虚拟bootloader先将bootloader1区存储的该第二引导程序bootloader1的原始数据备份到第三备份区,从而在更新第二引导程序bootloader1失败时,可以从第三备份区恢复bootloader1的原始数据,避免系统无法运行。在图2所示的片外Flash分区中,可以拓展上述第三备份区。

步骤S706,备份完成后,擦除第二分区中存储的原始数据。

本申请实施例中,备份完成后,虚拟bootloader将bootloader1区的数据擦除,从而为升级bootloader1腾出数据存储空间。

步骤S708,将第二引导程序的更新文件复制到第二分区,以对第二引导程序进行更新。

本申请实施例中,虚拟bootloader将bootloader1区的数据擦除后,即可将携带的第二引导程序的更新文件复制到bootloader1区,从而更新bootloader1。

可选地,若发生擦除bootloader1区原始数据失败、复制第二引导程序的更新文件失败、进程中断等意外情况时,可以重启微控制器,经过执行bootloader0,bootloader0引导向执行虚拟bootloader,虚拟bootloader再次备份并擦除bootloader1区原始数据,并重新复制bootloader1的更新文件至bootloader1区,进而更新bootloader1。

可选地,更新bootloader1之后,擦除APP应用程序区的数据,即删除虚拟bootloader的功能,重新填入应用程序数据,从而使微控制器可以提供对应的控制服务。

本申请实施例中,对bootloader0和bootloader1的更新可以同时进行,也可以单独进行,即第三引导程序中可以同时携带第一引导程序的更新文件和第二引导程序的更新文件,也可以单独携带任一引导程序的更新文件。

更新bootloader0和bootloader1之后,为了保证系统稳定性和安全运行,还需要对更新后的bootloader0和bootloader1进行有效性校验。

可选地,如图8所示,对第一引导程序进行更新之后,所述方法还包括:

步骤S802,从第一分区提取更新后的第一引导程序的程序数据,并获取第一引导程序的更新文件的第三原始校验码,第三原始校验码为第一引导程序的更新文件编码完成后生成的,第三原始校验码存储于第一分区中的校验码存储扇区。

本申请实施例中,对更新后的bootloader0进行有效性校验时,首先,从bootloader0区提取当前bootloader0的程序数据,并从bootloader0区获取bootloader0的更新文件的第三原始校验码。该第三原始校验码为开发人员在将bootloader0的更新文件编码完成后生成的,用以标识bootloader0的更新文件的原始代码数据。

步骤S804,确定更新后第一引导程序的程序数据的第三当前校验码。

本申请实施例中,利用从bootloader0区提取的程序数据,计算当前bootloader0的第三当前校验码,该第三当前校验码即为该bootloader0当前的程序数据的标识。

步骤S806,在第三当前校验码与第三原始校验码一致的情况下,确定第一引导程序更新成功。

本申请实施例中,将bootloader0的第三当前校验码和第三原始校验码进行比较,二者一致,说明更新后的bootloader0与原始代码相同,没有被篡改,说明当前的bootloader0有效,确定bootloader0更新成功。

可选地,如图9所示,对第二引导程序进行更新之后,所述方法还包括:

步骤S902,从第二分区提取更新后的第二引导程序的程序数据,并获取第二引导程序的更新文件的第四原始校验码,第四原始校验码为第二引导程序的更新文件编码完成后生成的,第四原始校验码存储于第二分区中的校验码存储扇区。

本申请实施例中,对更新后的bootloader1进行有效性校验时,首先,从bootloader1区提取当前bootloader1的程序数据,并从bootloader1区获取bootloader1的更新文件的第四原始校验码。该第四原始校验码为开发人员在将bootloader1的更新文件编码完成后生成的,用以标识bootloader1的更新文件的原始代码数据。

步骤S904,确定更新后第二引导程序的程序数据的第四当前校验码。

本申请实施例中,利用从bootloader1区提取的程序数据,计算当前bootloader1的第四当前校验码,该第四当前校验码即为该bootloader1当前的程序数据的标识。

步骤S906,在第四当前校验码与第四原始校验码一致的情况下,确定第二引导程序更新成功。

本申请实施例中,将bootloader1的第四当前校验码和第四原始校验码进行比较,二者一致,说明更新后的bootloader1与原始代码相同,没有被篡改,说明当前的bootloader1有效,确定bootloader1更新成功。

可选地,

在接收第三引导程序的程序数据的进程中断的情况下,向第一引导程序发送传输失败标识,以使得第一引导程序检测到传输失败标识时,启动第二引导程序重新更新目标应用程序;

在将第一备份区中第三引导程序的程序数据复制到第三分区的进程中断,和/或更新后的目标应用程序校验未通过的情况下,向第一引导程序发送第一更新失败标识,以使得第一引导程序检测到第一更新失败标识时,启动第二引导程序重新更新目标应用程序;

在将第一分区中存储的第一引导程序的原始数据复制到第二备份区的进程中断,和/或更新后的第一引导程序校验未通过的情况下,从第二备份区恢复第一引导程序的原始数据,并向第一引导程序发送第二更新失败标识,以执行原始的第一引导程序并重新引导目标应用程序更新第一引导程序;

在将第二分区中存储的第二引导程序的原始数据复制到第三备份区的进程中断,和/或更新后的第二引导程序校验未通过的情况下,向第一引导程序发送第三更新失败标识,以执行第一引导程序并重新引导目标应用程序更新第二引导程序。

采用本申请技术方案,无需设置多个引导程序和多个应用程序来更新目标引导程序,仅需将一个应用程序升级为虚拟引导程序来逆向升级目标引导程序,简化了流程的同时提升了安全性,且降低了成本,可以部署在各类规模的微控制器中,解决了bootloader升级流程复杂、安全性低的技术问题,对bootloader0的更新也使得bootloader0能够与最新拓展的分区及各分区添加的功能相适应、匹配,避免了指向性错误的发生,有效减少了未知错误的发生。

根据本申请实施例的又一方面,如图10所示,提供了一种引导程序更新装置,包括:

启动模块1001,用于在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序,第一引导程序用于引导微控制器启动,并确定所要跳转的执行程序,第二引导程序用于更新微控制器的应用程序,应用程序用于记录微控制器提供的控制服务;

应用程序更新模块1003,用于在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序,第三引导程序中携带有引导程序更新文件,引导程序更新文件包括第一引导程序和/或第二引导程序的更新文件,第三引导程序用于更新第一引导程序和/或第二引导程序;

引导程序逆向更新模块1005,用于执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新。

需要说明的是,该实施例中的启动模块1001可以用于执行本申请实施例中的步骤S102,该实施例中的应用程序更新模块1003可以用于执行本申请实施例中的步骤S104,该实施例中的引导程序逆向更新模块1005可以用于执行本申请实施例中的步骤S106。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块可以通过软件实现,也可以通过硬件实现。

可选地,第一引导程序的程序数据存储在第一分区,第二引导程序的程序数据存储在第二分区,第一分区和第二分区为引导程序区;该启动模块,具体用于:

从第二分区提取第二引导程序的程序数据,并获取第二引导程序的程序数据的第一原始校验码,第一原始校验码为第二引导程序编码完成后生成的,第一原始校验码存储于第二分区中的校验码存储扇区;

确定第二引导程序的程序数据的第一当前校验码;

在第一当前校验码与第一原始校验码一致的情况下,启动第二引导程序。

可选地,目标应用程序的程序数据存储在第三分区,第三分区为应用程序区,引导程序区和应用程序区均为第一缓存器中的扇区;该应用程序更新模块,具体用于:

接收第三引导程序的程序数据,并将第三引导程序的程序数据转存至第一备份区,第一备份区为第二缓存器中的扇区;

在第三引导程序的程序数据转存完成后,擦除第三分区中存储的目标应用程序的原始数据;

将第一备份区中第三引导程序的程序数据复制到第三分区,以对目标应用程序进行更新。

可选地,该应用程序更新模块,还包括应用程序校验单元,用于:

从第三分区提取更新后的目标应用程序的程序数据,并获取第三引导程序的程序数据的第二原始校验码,第二原始校验码为第三引导程序编码完成后生成的,第二原始校验码存储于第三分区中的校验码存储扇区;

确定更新后目标应用程序的程序数据的第二当前校验码;

在第二当前校验码与第二原始校验码一致的情况下,向第一引导程序传递正常启动标识,并重新启动第一引导程序。

可选地,该引导程序逆向更新模块,具体用于:

在第一引导程序检测到正常启动标识的情况下,启动更新后的目标应用程序,其中,更新后的目标应用程序用于实现第三引导程序的预设功能;

在更新后的目标应用程序中,将第一分区中存储的第一引导程序的原始数据复制到第二备份区,第二备份区为第二缓存器中的扇区;

备份完成后,擦除第一分区中存储的原始数据;

将第一引导程序的更新文件复制到第一分区,以对第一引导程序进行更新;

和/或,

在第一引导程序检测到正常启动标识的情况下,启动更新后的目标应用程序,其中,更新后的目标应用程序用于实现第三引导程序的预设功能;

在更新后的目标应用程序中,将第二分区中存储的第二引导程序的原始数据复制到第三备份区,第三备份区为第二缓存器中的扇区;

备份完成后,擦除第二分区中存储的原始数据;

将第二引导程序的更新文件复制到第二分区,以对第二引导程序进行更新。

可选地,该引导程序逆向更新模块,还包括引导程序校验单元,用于:

从第一分区提取更新后的第一引导程序的程序数据,并获取第一引导程序的更新文件的第三原始校验码,第三原始校验码为第一引导程序的更新文件编码完成后生成的,第三原始校验码存储于第一分区中的校验码存储扇区;

确定更新后第一引导程序的程序数据的第三当前校验码;

在第三当前校验码与第三原始校验码一致的情况下,确定第一引导程序更新成功;

和/或,

从第二分区提取更新后的第二引导程序的程序数据,并获取第二引导程序的更新文件的第四原始校验码,第四原始校验码为第二引导程序的更新文件编码完成后生成的,第四原始校验码存储于第二分区中的校验码存储扇区;

确定更新后第二引导程序的程序数据的第四当前校验码;

在第四当前校验码与第四原始校验码一致的情况下,确定第二引导程序更新成功。

可选地,该引导程序更新装置,还包括异常处理模块,用于:

在接收第三引导程序的程序数据的进程中断的情况下,向第一引导程序发送传输失败标识,以使得第一引导程序检测到传输失败标识时,启动第二引导程序重新更新目标应用程序;

在将第一备份区中第三引导程序的程序数据复制到第三分区的进程中断,和/或更新后的目标应用程序校验未通过的情况下,向第一引导程序发送第一更新失败标识,以使得第一引导程序检测到第一更新失败标识时,启动第二引导程序重新更新目标应用程序;

在将第一分区中存储的第一引导程序的原始数据复制到第二备份区的进程中断,和/或更新后的第一引导程序校验未通过的情况下,从第二备份区恢复第一引导程序的原始数据,并向第一引导程序发送第二更新失败标识,以执行原始的第一引导程序并重新引导目标应用程序更新第一引导程序;

在将第二分区中存储的第二引导程序的原始数据复制到第三备份区的进程中断,和/或更新后的第二引导程序校验未通过的情况下,向第一引导程序发送第三更新失败标识,以执行第一引导程序并重新引导目标应用程序更新第二引导程序。

采用本申请技术方案,无需设置多个引导程序和多个应用程序来更新目标引导程序,仅需将一个应用程序升级为虚拟引导程序来逆向升级目标引导程序,简化了流程的同时提升了安全性,且降低了成本,可以部署在各类规模的微控制器中,解决了bootloader升级流程复杂、安全性低的技术问题,对bootloader0的更新也使得bootloader0能够与最新拓展的分区及各分区添加的功能相适应、匹配,避免了指向性错误的发生,有效减少了未知错误的发生。

根据本申请实施例的另一方面,本申请提供了一种电子设备,如图11所示,包括存储器1101、处理器1103、通信接口1105及通信总线1107,存储器1101中存储有可在处理器1103上运行的计算机程序,存储器1101、处理器1103通过通信接口1105和通信总线1107进行通信,处理器1103执行计算机程序时实现上述方法的步骤。

上述电子设备中的存储器、处理器通过通信总线和通信接口进行通信。所述通信总线可以是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。

存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

根据本申请实施例的又一方面还提供了一种具有处理器可执行的非易失的程序代码的计算机可读介质。

可选地,在本申请实施例中,计算机可读介质被设置为存储用于所述处理器执行以下步骤的程序代码:

在第一引导程序检测到引导程序更新标识的情况下,启动第二引导程序,第一引导程序用于引导微控制器启动,并确定所要跳转的执行程序,第二引导程序用于更新所述微控制器的应用程序,应用程序用于记录微控制器提供的控制服务;

在第二引导程序中,接收第三引导程序的程序数据,并将第三引导程序的程序数据作为更新文件更新目标应用程序,第三引导程序中携带有引导程序更新文件,引导程序更新文件包括第一引导程序和/或第二引导程序的更新文件,第三引导程序用于更新第一引导程序和/或第二引导程序;

执行更新后的目标应用程序,以使用第一引导程序的更新文件对第一引导程序进行更新,和/或使用第二引导程序的更新文件对第二引导程序进行更新。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

本申请实施例在具体实现时,可以参阅上述各个实施例,具有相应的技术效果。

可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(Programmable LogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。

对于软件实现,可通过执行本文所述功能的单元来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号