一种更新引导加载程序的方法及装置与流程

文档序号:18617851发布日期:2019-09-06 22:12阅读:266来源:国知局
一种更新引导加载程序的方法及装置与流程

本申请涉及数据更新技术领域,特别是涉及一种更新ecu中引导加载程序的方法及装置。



背景技术:

在电子控制单元(electroniccontrolunit,ecu)中的操作系统运行之前,通常是由该ecu中的预先存储的引导加载程序(bootloader)来完成这个系统的加载启动任务,以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终操作系统运动准备好正确的环境。当ecu中bootloader的功能不满足实际需求时,通常需要对ecu中的bootloader进行更新。

目前更新ecu中bootloader的方式中,主要是ecu进行开壳处理,即从ecu所在设备中单独取出ecu,并通过调用相应的调试器向该ecu中刷写更新版本的bootloader,从而完成ecu中bootloader的更新。这种更新bootloader的方式,使得每次在更新ecu中的bootloader时都需要对ecu所在设备进行开壳处理,开壳风险较高。而在其它更新bootloader的方式中,是预先将更新程序存储于ecu的存储装置(如ram或者flash等)中,当ecu中当前使用的bootloader需要进行更新时,则利用该存储装置中预先存储的更新程序,利用新版本的bootloader更新ecu中旧版本的bootloader。这种更新方式,不仅需要占用额外的存储空间来长久存储更新程序,而且,ecu中的更新程序固定,无法实现对该更新程序进行升级。



技术实现要素:

本申请实施例提供了一种更新引导加载程序的方法及装置,以使得在无需开壳的情况下,可以实现对ecu中bootloader的更新,并且,无需占用ecu中额外的存储空间,同时可以实现对更新程序的升级。

第一方面,本申请实施例提供了一种更新引导加载程序的方法,所述方法包括:

将目标程序存储于电子控制单元ecu中的第一存储区域,所述目标程序至少包括更新程序,所述第一存储区域在存储所述目标程序之前用于存储应用程序;

存储新版本的加载引导程序;

通过执行所述更新程序,将所述ecu中第二存储区域中旧版本的引导加载程序,更新为所述新版本的引导加载程序。

在一些可能的实施方式中,所述目标程序还包括新版本的加载引导程序,所述存储新版本的加载引导程序,包括:

在所述第一存储区域中存储所述新版本的加载引导程序。

在一些可能的实施方式中,所述通过执行所述更新程序,将所述ecu中第二存储区域中旧版本的引导加载程序,更新为所述新版本的引导加载程序,包括:

校验所述新版本的引导加载程序与所述第二存储区域中旧版本的引导加载程序是否一致;

当确定所述新版本的引导加载程序与所述旧版本的引导加载程序不一致时,将所述ecu中第二存储区域中旧版本的引导加载程序更新为所述新版本的引导加载程序。

在一些可能的实施方式中,所述方法还包括:

在将所述第二存储区域中旧版本的引导加载程序更新为所述新版本的引导加载程序后,恢复所述应用程序在所述第一存储区域中的存储。

第二方面,本申请实施例还提供了一种更新引导加载程序的装置,所述装置包括:

第一存储模块,用于将目标程序存储于电子控制单元ecu中的第一存储区域,所述目标程序至少包括更新程序,所述第一存储区域在存储所述目标程序之前用于存储应用程序;

第二存储模块,用于存储新版本的加载引导程序;

更新模块,用于通过执行所述更新程序,将所述ecu中第二存储区域中旧版本的引导加载程序,更新为所述新版本的引导加载程序。

在一些可能的实施方式中,所述目标程序还包括新版本的加载引导程序,所述第二存储模块,具体用于在所述第一存储区域中存储所述新版本的加载引导程序。

在一些可能的实施方式中,所述更新模块,包括:

校验单元,用于校验所述新版本的引导加载程序与所述第二存储区域中旧版本的引导加载程序是否一致;

更新单元,用于当确定所述新版本的引导加载程序与所述旧版本的引导加载程序不一致时,将所述ecu中第二存储区域中旧版本的引导加载程序更新为所述新版本的引导加载程序。

在一些可能的实施方式中,所述装置还包括:

恢复模块,用于在将所述第二存储区域中旧版本的引导加载程序更新为所述新版本的引导加载程序后,恢复所述应用程序在所述第一存储区域中的存储。

在本申请实施例的上述实现方式中,当确定需要更新ecu中的bootloader时,可以将目标程序存储于ecu中的第一存储区域中,其中,该目标程序至少包括更新程序,并且,第一存储区域在存储目标程序之前被用于存储应用程序,然后,可以在ecu中存储新版本的引导加载程序,并通过执行该更新程序,将所述ecu中第二存储区域中旧版本的引导加载程序,更新为所述新版本的引导加载程序。由此可见,在更新bootloader的过程中,可以采用向ecu中刷写应用程序的方式将更新程序刷写到ecu中用于存储应用程序的第一存储区域中,从而通过执行该第一存储区域中的更新程序,可以实现在不开壳的情况下,利用新版本的bootloader更新ecu中旧版本的bootloader,进而对ecu中的bootloader的更新,并且,由于每次更新bootloader时都是将更新程序烧录至ecu中原先存储应用程序的区域,因此,也无需占用ecu额外的存储空间;同时,每次更新ecu中的bootloader时,更新程序可以根据实际需求进行设定,并不固定,从而也可以实现对更新程序的升级。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本申请实施例中一应用场景示意图;

图2为本申请实施例中一种更新引导加载程序的方法流程示意图;

图3为ecu中存储区域的划分示意图;

图4为新版本的bootloader与更新程序在第一存储区域中的存储示意图;

图5为本申请实施例中一种更新引导加载程序的装置结构示意图。

具体实施方式

当ecu中的bootloader功能不能满足实际应用的需求时,通常需要对ecu中的bootloader进行升级更新。而现有的更新ecu中bootloader的两种方式,均具有一定的缺陷。具体的,对于第一种更新bootloader的实施方式,由于ecu通常是嵌入硬件设备中,因此,当需要对ecu中的引导加载程序进行更新时,通常需要对ecu所在设备进行开壳处理,以取出硬件设备中的ecu,并通过调用相应的调试器向该ecu中刷写新版本的bootloader,从而利用新版本的bootloader更新ecu中旧版本的bootloader。但是,由于在更新ecu中bootloader时需要对硬件设备进行开壳,开壳过程中硬件设备受损的风险较高。为此,在另一种无需开壳即可完成更新bootloader的实施方式中,通常是预先在ecu的ram或者flash存储器中存储更新程序,而当ecu中的引导加载程序需要进行升级更新时,可以利用ecu的ram或者flash存储器中存储的更新程序,可以将ecu中旧版本的引导加载程序更新为刷写至ecu中的新版本的加载引导程序,从而在无需开壳的条件下完成ecu中bootloader的更新。但是,这种更新bootloader的实施方式中,不仅需要长时间额外占用ecu中ram或者flash存储器中一定大小的存储空间来存储更新程序,而且,由于存储于ecu中的更新程序固定,即更新ecu中bootloader的方法固定,从而无法对ecu中的更新程序进行升级更新。

基于此,本申请实施例提供了一种更新引导加载程序的方法,以使得在无需开壳的情况下,可以实现对ecu中bootloader的升级更新,并且,无需占用ecu额外的存储空间。具体实现时,当确定需要更新ecu中的bootloader时,可以将目标程序存储于ecu中的第一存储区域中,其中,该目标程序至少包括更新程序,并且,第一存储区域在存储目标程序之前被用于存储应用程序,然后,可以在ecu中存储新版本的引导加载程序,并通过执行该更新程序,将所述ecu中第二存储区域中旧版本的引导加载程序,更新为所述新版本的引导加载程序。由此可见,在更新bootloader的过程中,可以采用向ecu中刷写应用程序的方式将更新程序刷写到ecu中用于存储应用程序的第一存储区域中,从而通过执行该第一存储区域中的更新程序,可以实现在不开壳的情况下,利用新版本的bootloader更新ecu中旧版本的bootloader,进而对ecu中的bootloader的更新,并且,由于每次更新bootloader时都是将更新程序烧录至ecu中原先存储应用程序的区域,因此,也无需占用ecu额外的存储空间;同时,每次更新ecu中的bootloader时,更新程序可以根据实际需求进行设定,并不固定,从而也可以实现对更新程序的升级。

作为一种示例,本申请实施例可以应用于如图1所示的示例性应用场景。在该应用场景中,用户101可以在上位机102开发出新版本的bootloader,并且,当ecu103中的bootloader需要进行更新时,用户101可以将上位机102与ecu103进行连接,并且,将上位机102中保存的新版本的bootloader以及更新程序一起刷写至ecu103中原先用于存储应用程序的第一存储区域;ecu103在完成新版本bootloader以及更新程序的存储后,可以通过执行该更新程序,利用该新版本的bootloader更新ecu中第二存储区域中旧版本的bootloader,从而完成ecu中bootloader的升级更新。

可以理解的是,上述场景仅是本申请实施例提供的一个场景示例,本申请实施例并不限于此场景,而可以应用于任何可适用的应用场景中。

为使本申请的上述目的、特征和优点能够更加明显易懂,下面将结合附图对本申请实施例中的各种非限定性实施方式进行示例性说明。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

参阅图2,图2示出了本申请实施例中一种更新引导加载程序方法的流程示意图,该方法具体可以包括:

s201:将目标程序存储于ecu中的第一存储区域,其中,该目标程序至少包括更新程序,并且该第一存储区域在存储目标程序之前用于存储应用程序。

s202:存储新版本的加载引导程序。

s203:执行该更新程序,将ecu中第二存储区域中旧版本的引导加载程序更新为新版本的引导加载程序。

实际应用中,ecu的存储区域可以划分为第一存储区域、第二存储区域以及其它数据存储区域三个区域,如图3所示。其中,第一存储区域用于存储应用程序,第二存储区域用于存储bootloader,而其它数据存储区域用于存储诸如运行参数、加密数据等数据。

本实施例中,当需要对ecu中第二存储区域中存储的旧版本的bootloader进行升级更新时,虽然无法直接向第二存储区域中刷写新版本的bootloader,但是可以参照现有的向第一存储区域中刷写应用程序的刷写流程,向该第一存储区域中刷写目标程序,也即将目标程序存储于原先用于存储应用程序的存储区域中。其中,该目标程序至少包括更新程序。这样,ecu中可以无需使用额外的存储空间来长期存储更新程序,并且,当ecu中存储有新版本的bootloader时,可以在ecu中通过执行该更新程序,利用新版本的bootloader更新第二存储区域中旧版本的bootloader。

值得注意的是,新版本的加载引导程序,可以是随更新程序一起被刷写至ecu中,即上述目标程序除了可以包括更新程序之外,还可以包括新版本的bootloader。如图4所示,在第一存储区域中不仅可以存储有新版本的bootloader,还可以存储该更新程序。这样,当新版本的bootloader被刷写到ecu中的第一存储区域中后,可以自动或者人为触发该更新程序被执行,从而使得将第二存储区域中的bootloader更新为新版本的bootloader。

实际应用中,目标程序在该第一存储区域中的地址范围是与该第一存储区域中原应用程序的地址范围一致。因此,当需要更新ecu中的bootloader时,可以临时使用原应用程序的地址空间,以将目标程序刷写至第一存储区域中。可以理解,在该实施方式中,由于每次更新bootloader时,被刷写至第一存储区域中的目标程序都是临时占用原应用程序的地址范围,无需占用额外的ram或者flash存储器中的存储空间。

而在其它可能的实施方式中,被刷写至第一存储区域中的目标程序也可以仅是更新程序,并且,当更新程序被刷写至第一存储区域后,可以再将新版本的bootloader刷写至ecu中。值得注意的是,该新版本的bootloade可以是被存储于ecu中的ram(并不属于第一存储区域)中。在该实施方式中,可以不用在将新版本的bootloader中的所有数据全部刷写至ecu中后才进行bootloader的更新,而可以进行分段更新。比如,新版本的bootloader在被刷写十分之一后,可以先用该十分之一的数据更新第二存储区域中的bootloader的对应部分,并且在完成该部分的更新后,可以再刷写下一十分之一的数据,并进行下一十分之一数据的更新,按照该方式进行分段更新,从而最终完成所有bootloader数据的更新。

进一步的,当更新程序被执行时,ecu可以比较或者校验当前第一存储区域中新版本的bootloader与第二存储区域中旧版本的bootloader是否一致。可以理解,若ecu中旧版本的bootloader的功能不满足实际应用的需求时,可以对ecu中旧版本的bootloader进行更新,而在其它可能的应用场景中,也可能是需要定期的对ecu中的bootloader进行更新,此时,每次更新时刷写至第一存储区域中新版本的bootloader,可能与第二存储区域中旧版本的bootloader不一致,也可能与第二存储区域中新版本的一致。因此,在一些可能的实施方式中,ecu可以是在确定两个版本的bootloader不一致时,才将第二存储区域中的bootloader替换为新版本的bootloader,而当两个版本的bootloader一致时,ecu无需再消耗计算资源进行bootloader的替换。这样,可以避免ecu每次上电时都会利用第一存储区域中的bootloader更新第二存储区域中的bootloader,而且,实际应用中,第一存储区域可以为flash存储器,而flash存储器的擦除次数是有限的,对两个版本的bootloader进行一致性校验可以避免ecu浪费flash的擦除次数,也可以避免在不必要的更新bootloader的过程中,因为ecu断电而造成bootloader不完整,进而造成ecu的无法运行。

其中,校验两个版本的bootloader是否一致的实施方式较多,可以参照现有技术中对两段数据进行一致性校验的方式。比如,可以是将两个版本的bootloader中的程序代码进行逐一对比;也可以是分别计算出两个版本的bootloader的哈希值,从而对两个哈希值进行比对;也可以是利用循环冗余校验(cyclicredundancycheck,crc)对两个版本的bootloader进行一致性校验等。

当然,在其它可能的实施方式中,ecu也可以直接利用第一存储区域中新版本的bootloader更新第二存储区域中旧版本的bootloader。即,无论每次刷写至第一存储区域中的bootloader是否与第二存储区域中的bootloader相同,ecu均可以执行第二存储区域中bootloader的替换。

需要说明的是,目标程序在被刷写至第一存储区域后,可以覆盖第一存储区域中原有的应用程序,此时,在进一步的实施方式中,还可以在完成对第一存储区域中bootloader的更新后,恢复之前被覆盖的应用程序在第一存储区域中的存储,或者说将第一存储区域中存储的数据恢复成更新bootloader前第一存储区域中的数据,以便于该ecu的正常运行。

本实施例中,当确定需要更新ecu中的bootloader时,可以将目标程序存储于ecu中的第一存储区域中,其中,该目标程序至少包括更新程序,并且,第一存储区域在存储目标程序之前被用于存储应用程序,然后,可以在ecu中存储新版本的引导加载程序,并通过执行该更新程序,将所述ecu中第二存储区域中旧版本的引导加载程序,更新为所述新版本的引导加载程序。由此可见,在更新bootloader的过程中,可以采用向ecu中刷写应用程序的方式将更新程序刷写到ecu中用于存储应用程序的第一存储区域中,从而通过执行该第一存储区域中的更新程序,可以实现在不开壳的情况下,利用新版本的bootloader更新ecu中旧版本的bootloader,进而对ecu中的bootloader的更新,并且,由于每次更新bootloader时都是将更新程序烧录至ecu中原先存储应用程序的区域,因此,也无需占用ecu额外的存储空间;同时,每次更新ecu中的bootloader时,更新程序可以根据实际需求进行设定,并不固定,从而也可以实现对更新程序的升级。

此外,本申请实施例还提供了一种更新引导加载程序的装置。参阅图5,图5示出了本申请实施例中一种更新引导加载程序的装置的结构示意图,装置500包括:

第一存储模块501,用于将目标程序存储于电子控制单元ecu中的第一存储区域,所述目标程序至少包括更新程序,所述第一存储区域在存储所述目标程序之前用于存储应用程序;

第二存储模块502,用于存储新版本的加载引导程序;

更新模块503,用于通过执行所述更新程序,将所述ecu中第二存储区域中旧版本的引导加载程序,更新为所述新版本的引导加载程序。

在一些可能的实施方式中,所述目标程序还包括新版本的加载引导程序,所述第二存储模块502,具体用于在所述第一存储区域中存储所述新版本的加载引导程序。

在一些可能的实施方式中,所述更新模块503,包括:

校验单元,用于校验所述新版本的引导加载程序与所述第二存储区域中旧版本的引导加载程序是否一致;

更新单元,用于当确定所述新版本的引导加载程序与所述旧版本的引导加载程序不一致时,将所述ecu中第二存储区域中旧版本的引导加载程序更新为所述新版本的引导加载程序。

在一些可能的实施方式中,所述装置500还包括:

恢复模块,用于在将所述第二存储区域中旧版本的引导加载程序更新为所述新版本的引导加载程序后,恢复所述应用程序在所述第一存储区域中的存储。

需要说明的是,上述装置各模块与单元之间的信息交互、执行过程等内容,由于与本申请实施例中方法实施例基于同一构思,其带来的技术效果与本申请实施例中方法实施例相同,具体实施过程与带来的技术效果可参见本申请实施例前述所示的方法实施例中的叙述,此处不再赘述。

本实施例中,在更新bootloader的过程中,可以采用向ecu中刷写应用程序的方式将更新程序刷写到ecu中用于存储应用程序的第一存储区域中,从而通过执行该第一存储区域中的更新程序,可以实现在不开壳的情况下,利用新版本的bootloader更新ecu中旧版本的bootloader,进而对ecu中的bootloader的更新,并且,由于每次更新bootloader时都是将更新程序烧录至ecu中原先存储应用程序的区域,因此,也无需占用ecu额外的存储空间;同时,每次更新ecu中的bootloader时,更新程序可以根据实际需求进行设定,并不固定,从而也可以实现对更新程序的升级。

本申请实施例中提到的“第一存储区域”等名称中的“第一”只是用来做名字标识,并不代表顺序上的第一。该规则同样适用于“第二”等。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(英文:read-onlymemory,rom)/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如路由器等网络通信设备)执行本申请各个实施例或者实施例的某些部分所述的方法。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅是本申请示例性的实施方式,并非用于限定本申请的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1