升级方法、嵌入式系统、终端及计算机存储介质与流程

文档序号:26003513发布日期:2021-07-23 21:21阅读:64来源:国知局
升级方法、嵌入式系统、终端及计算机存储介质与流程

本申请涉及嵌入式系统技术领域,具体涉及一种升级方法、嵌入式系统、终端及计算机存储介质。



背景技术:

嵌入式系统升级的一般方式是,bootloader将升级程序数据写入到flash指定地址,然后启动该程序。这其中存在以下问题:如果在升级过程中断电或升级包在复制中出错,则会导致升级失败。而升级之前的程序又被覆盖,导致嵌入式系统不能正常工作。



技术实现要素:

针对上述技术问题,本申请提供一种升级方法、嵌入式系统、终端及计算机存储介质,能有效避免嵌入式系统在升级失败时,不能正常启动的问题。

为解决上述技术问题,本申请提供一种升级方法,应用于嵌入式系统,包括:

步骤201.根据升级请求指令确定所述嵌入式系统的程序版本变更信息;

步骤202.根据所述程序版本变更信息确定待更新版本的程序包所在的存储区;

步骤203.根据所述存储区的程序包更新运行区。

其中,所述步骤201,包括:

若升级请求指令为版本升级,且升级次数等于零,则确定所述程序变更信息为版本升级;

若升级请求指令为版本回滚,则确定所述程序变更信息为版本回滚;

若升级请求指令为版本升级,且升级次数不等于零,则确定所述程序变更信息为版本回滚。

其中,所述步骤202,包括:

若所述程序变更信息为版本升级,则确定待更新版本的程序包所在的存储区为第一存储区,所述第一存储区的程序包版本为升级程序包;

若所述程序变更信息为版本回滚,则确定待更新版本的程序包所在的存储区为第二存储区,所述第二存储区的程序包版本与所述运行区的程序包版本一致。

其中,所述步骤201之前,还包括:

接收升级请求指令;

根据所述升级程序包更新所述第一存储区。

其中,所述根据所述升级程序包更新所述第一存储区之前,还包括:

比较各存储区的程序包版本;

确定低版本的程序包所在的存储区为第一存储区;

擦除所述第一存储区的程序包。

其中,所述根据所述升级程序包更新所述第一存储区,包括:

复制所述升级程序包至所述第一存储区;

对所述第一存储区接收到的升级程序包逐帧校验。

其中,所述步骤203之后,还包括:

在所述运行区启动程序包;

若启动失败,则执行步骤201以实现所述运行区的程序包版本回滚;

若启动正常,则根据所述升级次数显示升级消息。

本申请还提供一种嵌入式系统,所述嵌入式系统包括启动区、数据区、运行区和多个存储区;

所述多个存储区,用于存储多个版本的程序包;

所述运行区,用于存储并运行程序包,包括存储升级程序包的第一存储区和存储当前运行版本的程序包的第二存储区;

所述数据区,用于记录升级过程中的中间数据;

所述启动区,用于引导程序运行,以执行如上所述的升级方法。

本申请还提供一种终端,包括至少一个处理器和至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理器并且存储用于由所述至少一个处理器执行的指令,所述指令当由所述至少一个处理器执行时,使得所述终端执行如上所述的升级方法。

本申请还提供一种计算机存储介质,所述计算机存储介质上存储有计算机程序指令;所述计算机程序指令被处理器执行时实现如上所述的升级方法。

本申请的升级方法、嵌入式系统、终端及计算机存储介质,升级方法应用于嵌入式系统,包括:根据升级请求指令确定嵌入式系统的程序版本变更信息;根据程序版本变更信息确定待更新版本的程序包所在的存储区;根据存储区的程序包更新运行区。通过上述方式,本申请能有效避免嵌入式系统在升级失败时,不能正常启动的问题。

附图说明

图1是根据本发明实施例示出的升级方法的流程示意图;

图2是根据本发明实施例示出的升级程序包烧写流程示意图;

图3是根据本发明实施例示出的升级方法的具体流程示意图;

图4是根据本发明实施例示出的指令回滚的流程示意图;

图5是根据本发明实施例示出的嵌入式系统的结构示意图。

具体实施方式

以下由特定的具体实施例说明本申请的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本申请的其他优点及功效。

在下述描述中,参考附图,附图描述了本申请的若干实施例。应当理解,还可使用其他实施例,并且可以在不背离本申请的精神和范围的情况下进行机械组成、结构、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,这里使用的术语仅是为了描述特定实施例,而并非旨在限制本申请。

虽然在一些实例中术语第一、第二等在本文中用来描述各种元件,但是这些元件不应当被这些术语限制。这些术语仅用来将一个元件与另一个元件进行区分。

再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、步骤、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、步骤、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“a、b或c”或者“a、b和/或c”意味着“以下任一个:a;b;c;a和b;a和c;b和c;a、b和c”。仅当元件、功能、步骤或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。

第一实施例

图1是根据第一实施例示出的升级方法的流程示意图。如图1所示,本实施例的升级方法,包括:

步骤201,根据升级请求指令确定嵌入式系统的程序版本变更信息;

步骤202,根据程序版本变更信息确定待更新版本的程序包所在的存储区;

步骤203,根据存储区的程序包更新运行区。

本申请将嵌入式系统flash拆分成启动区、运行区、存储区和数据区。启动区,即bootloader,用于引导程序运行。运行区,即imagerun,用于存储并运行程序。存储区,包括image0、image1等,用于存储多个版本的可执行程序包。数据区,即data区,用于记录bootloader升级信息,各个存储区存储的镜像程序版本信息以及系统数据等。需要说明的是,运行程序具有写入升级程序包到存储区的功能,并在数据区记录升级过程信息。在第一次烧录程序时,运行区和存储区的程序版本一致,并保存烧录相关信息到数据区。运行区和存储区的程序运行空间地址一致,程序镜像数据一致,满足发行版本统一性。嵌入式系统升级出错时,可根据存储区的程序包将运行区的程序包回滚至之前版本,从而保证嵌入式系统正常启动。

在一实施方式中,开始升级之前,接收到升级请求指令,比较各存储区的程序包版本,确定低版本的程序包所在的存储区为第一存储区,并擦除第一存储区的程序包。擦除第一存储区的程序包之后,接收升级程序包,将升级程序包烧写至存储区。烧写完成后,对升级标志位置位,确认开始升级。

图2是根据本发明实施例示出的升级程序包烧写流程示意图。如图2所示,运行程序收到升级请求指令后,比较各个存储区中镜像程序包的版本号。本实施例中存储区为两个,即image0和image1。比较image0和image1中镜像程序的版本号,擦除低版本镜像程序所在的存储区,若各存储区版本相同则擦除image0。然后,运行程序逐帧复制并校验升级程序包到擦除的存储区,直至复制完整个升级程序包。若校验时检测到版本不正确,则重发升级请求指令,以确保准确复制升级程序包。在bootloader升级过程中,bootloader选择升级程序包所在存储区,以确保使用正确的程序包对嵌入式系统进行升级。需要说明的是,将低版本的程序包保存在其他存储区,如将运行区升级前的程序包备份至第二存储区,使升级失败后运行区的程序可回滚至之前版本,确保嵌入式系统能正常运行。当然,在其他实施例中,还可设置存储区数量多于两个,以存储当前程序版本之前的程序版本,或存储多种升级程序包,以实现更加灵活的程序版本变更策略。

在一实施方式中,升级请求指令包括升级请求标志位和升级方向标志位。可选地,根据升级方向标志位确定程序版本变更信息,然后根据程序版本变更信息确定待更新版本的程序包所在的存储区。若升级请求指令为版本升级,且升级次数等于零,则确定程序变更信息为版本升级;若升级请求指令为版本回滚,则确定程序变更信息为版本回滚;若升级请求指令为版本升级,且升级次数不等于零,则确定程序变更信息为版本回滚。接着,根据程序变更信息查找对应的程序包所在的存储区。若程序变更信息为版本升级,则确定待更新版本的程序包所在的存储区为第一存储区,第一存储区的程序包版本为升级程序包;若程序变更信息为版本回滚,则确定待更新版本的程序包所在的存储区为第二存储区,第二存储区的程序包版本与运行区的程序包版本一致。通过升级请求指令和升级过程对升级次数的计数,实现了指令升级、指令回滚和自动回滚三种升级方式的有机结合,保证嵌入式系统升级后能正常运行。

在一实施方式中,根据存储区的程序包更新运行区之后,在运行区启动程序包。若启动失败,则重新执行步骤201以实现运行区的程序包版本回滚。若启动正常,则根据升级次数显示升级消息。

图3是根据本发明实施例示出的升级方法的具体流程示意图。图4是根据本发明实施例示出的指令回滚的流程示意图。如图3和图4所示,将升级包烧写之第一存储区之后,系统重启。指令升级时,在系统启动后,bootloader分别检测升级标志位和升级方向标志位。若升级标志位已置位,则确定变更系统程序版本。接着根据升级方向标志位判断后续操作为系统升级或回滚。若系统升级,即将运行区的当前程序升级为高版本。判断升级计数是否等于零,若是,bootloader比较存储区image0和image1中程序的版本号,找到高版本的程序,即升级程序包。此时升级次数加1,bootloader复制第一存储区的数据包到imagerun运行区。复制完成后,从imagerun中启动程序。若运行程序无法启动,对嵌入式系统进行重启。bootloader在下次重启后,根据升级标志位和升级计数执行系统回滚。升级次数加1,bootloader复制第二存储区的数据包到imagerun运行区。复制完成后,从imagerun中启动程序。若系统正常启动,则复位升级标志位。判断升级次数是否大于1,若是,则上传升级失败消息;若否,则上传升级成功消息。最后复位升级计数的参数。通过上述方式,实现了升级出错后回滚至之前程序。

指令回滚时,在系统启动后,bootloader分别检测升级标志位和升级方向标志位。若升级标志位已置位,则确定变更系统程序版本。接着根据升级方向标志位判断后续操作为系统回滚。复位升级方向标志位,bootloader比较存储区image0和image1中程序的版本号,找到低版本的程序。升级次数加1,bootloader复制第二存储区的数据包到imagerun运行区。

本实施例的升级方法,应用于嵌入式系统,包括:根据升级请求指令确定嵌入式系统的程序版本变更信息;根据程序版本变更信息确定待更新版本的程序包所在的存储区;根据存储区的程序包更新运行区。通过上述方式,本申请能有效避免嵌入式系统在升级失败时,不能正常启动的问题。

第二实施例

图5是根据第二实施例示出的嵌入式系统的结构示意图。如图5所示,嵌入式系统包括启动区bootloader、数据区data、运行区imagerun和多个存储区;

多个存储区,用于存储多个版本的程序包;

运行区,用于存储并运行程序包,包括存储升级程序包的第一存储区image0和存储当前运行版本的程序包的第二存储区image1;

数据区,用于记录升级过程中的中间数据,如记录bootloader升级信息,image0和image1镜像版本信息以及系统数据;

启动区,用于引导程序运行,以执行如第一实施例的升级方法。

可选地,imagerun,image0和image1程序运行空间地址一致,程序镜像数据一致,满足发行版本统一性。嵌入式系统升级出错时,可根据存储区的程序包将运行区的程序包回滚至之前版本,从而保证嵌入式系统正常启动。

本申请还提供一种终端,包括至少一个处理器和至少一个存储器,至少一个存储器被耦合到至少一个处理器并且存储用于由至少一个处理器执行的指令,指令当由至少一个处理器执行时,使得终端执行如第一实施例所述的升级方法。

本申请还提供一种计算机存储介质,计算机存储介质上存储有计算机程序指令;计算机程序指令被处理器执行时实现如第一实施例所述的升级方法。

上述实施例仅例示性说明本申请的原理及其功效,而非用于限制本申请。任何熟悉此技术的人士皆可在不违背本申请的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本申请所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本申请的权利要求所涵盖。

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