基于RTOS的OTA升级方法、系统、设备及存储介质
文献发布时间:2023-06-19 10:32:14
技术领域
本发明涉及APP应用程序空中升级技术领域,具体涉及一种基于RTOS(Real-timeoperating system,实时操作系统)的OTA(Over the Air,空中升级)升级方法和系统。
背景技术
原有的APP(应用程序)的OTA方案为了保证APP升级包的存储稳定性,首先采用FTP(File Transfer Protocol,文件传输协议)或HTTP(HyperText Transfer Protocol,超文本传输协议)等网络下载方式,将APP升级包首先下载到客户端设备的额外开辟的一块闪存分区中,重启设备进入开始升级;然后从闪存中读取升级包到内存再对其进行校验,校验成功后再将其覆盖到原来的闪存分区,并擦除额外开辟的分区。以上的现有技术方案存在以下不足:首先,为了保证兼容性,防止升级过程中造成原存储于闪存中的旧版本APP损坏或丢失,需要在闪存中划分额外的升级专用的闪存分区,即OTA分区,用于存储APP升级包,而且该分区理论上还需大于APP升级包,从而造成了闪存空间的消耗。
其次,在现有的OTA方案中,需要从闪存中读取升级包到内存再对其进行校验,校验通过则将其覆盖到原来分区的同时清除OTA分区,并再次开机,将升级的APP加载至内存运行;校验失败则清除OTA分区,使用原APP加载到内存并再次开机。因此,整个过程至少涉及两次闪存写入、两次闪存擦除以及一次闪存读取操作,加上需重启设备,从而耗时较长。
最后,现有的方案需要在每次开机时检查OTA分区,通过判断标识符或者检查OTA分区中是否存在升级包等方式来决定是否进行升级,因此开机系统和程序的准备就绪时间较长。
发明内容
本发明要解决的技术问题是为了克服现有技术中对于APP应用程序进行空中升级耗时较多且占用闪存空间较大的缺陷,提供一种基于RTOS的OTA升级方法和系统。
本发明是通过下述技术方案来解决上述技术问题:
本发明提供了一种基于RTOS的OTA升级方法,用于对APP应用程序进行OTA升级,所述APP应用程序位于闪存;包括以下步骤:
将所述APP应用程序对应的APP升级包下载至APP内存分区,所述APP内存分区位于内存;
对所述APP升级包执行校验操作;
若所述校验操作通过,则将所述APP升级包写入APP闪存分区,并覆盖所述APP应用程序,所述APP闪存分区位于所述闪存。
较佳地,在将所述APP应用程序对应的APP升级包下载至APP内存分区的步骤前,还包括以下步骤:
所述APP应用程序向OTA线程发出对所述APP升级包的下载请求;
所述OTA线程挂起并删除所述APP应用程序正在运行的所有线程;
所述OTA线程清空所述APP内存分区;
所述OTA线程发起对所述APP升级包的下载。
较佳地,在对所述APP升级包执行校验操作的步骤后,若所述校验操作失败,则执行以下步骤:
清空所述APP内存分区;
将所述APP应用程序加载至所述APP内存分区。
较佳地,所述校验操作包括以下步骤:
将所述APP升级包的校验和预设校验参数进行比较,若相等则校验成功,若不相等则校验失败。
本发明还提供了一种基于RTOS的OTA升级系统,用于对APP应用程序进行OTA升级,所述APP应用程序位于闪存;所述OTA升级系统包括:
下载模块,用于将所述APP应用程序对应的APP升级包下载至APP内存分区,所述APP内存分区位于内存;
校验模块,用于对所述APP升级包执行校验操作;
升级模块,用于在所述校验操作通过时,将所述APP升级包写入APP闪存分区,并覆盖所述APP应用程序,所述APP闪存分区位于所述闪存。
较佳地,所述OTA升级系统还包括下载准备模块,所述下载准备模块包括:
下载请求单元,用于通过所述APP应用程序向OTA线程发出对所述APP升级包的下载请求;
线程清理单元,用于通过所述OTA线程挂起并删除所述APP应用程序正在运行的所有线程;
内存清空单元,用于通过所述OTA线程清空所述APP内存分区;
下载启动单元,用于通过所述OTA线程发起对所述APP升级包的下载。
较佳地,所述OTA升级系统还包括APP恢复模块,用于在所述校验操作失败时,清空所述APP内存分区;并将所述APP应用程序加载至所述APP内存分区。
较佳地,所述校验模块包括:
校验结果获取单元,用于将所述APP升级包中的校验参数和预设校验参数进行比较,若相等则校验成功,若不相等则校验失败。
本发明还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明的基于RTOS的OTA升级方法。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本发明的基于RTOS的OTA升级方法的步骤。
本发明的积极进步效果在于:本发明提供的基于RTOS的OTA升级方法、系统、电子设备和可读介质,通过将APP升级包首先下载至内存中并在内存中对其进行校验,减少了对闪存的读写次数,避免了在闪存中划定专用分区;从而提升了OTA操作的效率,节省了设备的闪存空间,也加快了开机的速度。
附图说明
图1为本发明的实施例1的基于RTOS的OTA升级方法的流程图。
图2为本发明的实施例1的一种可选的实施方式的流程图。
图3为本发明的实施例2的基于RTOS的OTA升级系统的模块示意图。
图4为本发明的实施例2的一种可选的实施方式的模块示意图。
图5为本发明实施例3的电子设备的结构框图。
具体实施方式
下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
实施例1
参见图1,本发明提供了一种基于RTOS的OTA升级方法,基于RTOS的分离式二次开发模式进行OTA空中升级。所谓分离式二次开发是指RTOS中kernel(内核任务)与设备中的APP分别进行编译,如系统编译连接得到可执行文件kernel.bin即作系统的镜像文件,以及设备APP编译链接得到可执行文件customer_app.bin,分别加载到设备内存后连接运行。
本实施例的方法适用于一种模块,包括控制单元(如MCU(Microcontroller Unit,微控制单元))、存储部件(如闪存和内存)。模块运行实时操作系统例如threadX。APP的运行过程是在设备每次开机后,系统的kernel内核任务引导完毕并完成初始化后引导APP运行。具体步骤是:内核任务从闪存存储APP的专用分区(以下简称:APP闪存分区,可设置为256KB)读取上述customer_app.bin,加载到内存里专门用于APP操作的分区(以下简称:APP内存分区,可设置为512KB),并经过校验后,跳转到customer_app.bin的入口,对APP执行初始化操作,本实施例提供的升级方法即基于以上软硬件环境具体实现。
本实施例提供的基于RTOS的OTA升级方法用于对APP应用程序进行OTA升级,具体包括以下步骤:
S1.将APP升级包下载至APP内存分区,APP内存分区位于内存。
区别于现有技术中将APP升级包下载至闪存分区,本实施例需要将APP升级包首先下载至内存中。下载APP升级包通过HTTP或者FTP线程实现,下载到APP内存分区的APP升级包通常在文件头包含有APP升级包的元数据,例如可采用八个字节存放整个文件的大小以及CRC校验值,将头文件后的正文例如前述的升级包从第九个字节开始依次存放到APP内存分区,头文件包含的元数据,例如前述的八个字节保存到相关参数集中,例如将文件大小和CRC校验值分别存到变量size和变量value中用于校验。
S2.对APP升级包执行校验操作。
即首先使用kernel内置的CRC程序对此时APP分区中的内容进行校验,也就是将APP升级包中的校验参数和预设校验参数进行比较,若相等则校验成功,若不相等则校验失败。校验成功说明APP升级包的下载有效,若不相等则校验失败。需要指出的是,此处对于APP升级包的校验方式包括但不限于上述的CRC校验,也可以包括其他适用的校验方式例如MD5校验等。
S3.若校验通过,则将APP升级包写入APP闪存分区,并覆盖升级前的APP应用程序,APP闪存分区位于闪存。
若校验成功则将此时APP内存分区的内容覆盖写入到APP闪存分区,由于内存断电数据丢失,闪存断电数据保存,因此下次开机时将会从新的customer_APP.bin启动。
下载成功后,用于下载APP升级包的OTA线程休眠,将控制权转移到更新后的APP的方法,例如可以将连接寄存器的值设为升级后的入口函数,从而系统自动转移到APP应用程序执行代码。具体地,将连接寄存器的值修改为升级后的customer_app.bin的入口函数,系统调用返回,即可重新开始执行升级后的customer_app.bin。
APP内存分区不但用于存放APP升级包,也用于运行APP应用程序的代码。所以,在下载之前要删除当前APP正在运行的一切线程,然后清空目前的APP内存分区才能开始下载。本实施例中,参见图2所示,在步骤S1前还包括以下步骤:
S11.APP应用程序向OTA线程发出对APP升级包的下载请求。
S12.OTA线程挂起并删除APP应用程序当前正在运行的所有线程。
S13.OTA线程清空APP内存分区。
S14.OTA线程发起对APP升级包的下载。
以上,即是在APP应用程序发出对升级包的下载请求后,由OTA线程接管并开启下载的过程。例如,将HTTP和FTP下载线程作为内核线程,删除APP中此刻正在运行的线程以释放堆栈空间,清空APP内存分区,为APP应用程序的OTA升级做好准备,然后执行下载。
作为一种较佳的实施方式,若上述步骤S2的结果为校验失败,则需要进行回退操作,即清空APP内存分区,并将升级前的APP应用程序加载至APP内存分区,这样可以恢复对于原来的APP应用程序的正常使用。
具体地,将APP内存分区清零后,从APP闪存分区再次加载升级前的customer_APP.bin到APP内存分区,将连接寄存器的值修改为升级前的customer_app.bin入口函数,系统调用返回即跳转到customer_app.bin入口,重新启动customer_app.bin的初始化。
本实施例提供的基于RTOS的OTA升级方法,通过将APP升级包首先下载至内存中并在内存中对其进行校验,减少了对闪存的读写次数,避免了在闪存划定专用OTA分区;从而提升了APP应用程序空中升级的效率,节省了设备闪存的空间,并加快了开机的速度。
实施例2
参见图3,本发明提供了一种基于RTOS的OTA升级系统,可基于RTOS的分离式二次开发模式进行OTA空中升级。所谓分离式二次开发是指RTOS中kernel(内核任务)与设备中的APP分别进行编译,如系统编译连接得到可执行文件kernel.bin即作系统的镜像文件,以及设备APP编译链接得到可执行文件customer_app.bin,分别加载到设备内存后连接运行。
本实施例的系统适用于一种模块,包括控制单元(如MCU(Microcontroller Unit,微控制单元))、存储部件(如闪存和内存)。模块运行实时操作系统例如threadX。APP的运行过程是在设备每次开机后,系统的kernel内核任务引导完毕并完成初始化后引导APP运行。本实施例的系统可以执行以下步骤即:内核任务从闪存存储APP的专用分区(以下简称:APP闪存分区,可设置为256KB)读取上述customer_app.bin,加载到内存里专门用于APP操作的分区(以下简称:APP内存分区,可设置为512KB),并经过校验后,跳转到customer_app.bin的入口,对APP执行初始化操作,本实施例提供的升级系统基于上述软硬件环境具体实现。
本实施例提供的基于RTOS的OTA升级系统包括:
下载模块1,用于将APP升级包下载至APP内存分区,APP内存分区位于内存。
区别于现有技术中将APP升级包下载至闪存分区,本实施例的下载模块1需要将APP升级包首先下载至内存中。下载APP升级包通过HTTP或者FTP线程实现,下载到APP内存分区的APP升级包通常在文件头包含有APP升级包的元数据,例如可采用八个字节存放整个文件的大小以及CRC校验值,将头文件后的正文例如前述的升级包从第九个字节开始依次存放到APP内存分区,头文件包含的元数据,例如前述的八个字节保存到相关参数集中,例如将文件大小和CRC校验值分别存到变量size和变量value中用于校验。
校验模块2,用于对APP升级包执行校验操作。
即使用kernel内置的CRC程序对此时APP分区中的内容进行校验,也就是将APP升级包中的校验参数和预设校验参数进行比较,若相等则校验成功,若不相等则校验失败。校验成功说明APP升级包的下载有效,若不相等则校验失败。需要指出的是,此处对于APP升级包的校验方式包括但不限于上述的CRC校验,也可以包括其他适用的校验方式例如MD5校验等。
升级模块3,用于在校验通过时将APP升级包写入APP闪存分区,APP闪存分区位于闪存;即校验成功时升级模块3将此时APP内存分区的内容覆盖写入到APP闪存分区,由于内存断电数据丢失,闪存断电数据保存,因此下次开机时将会从新的customer_APP.bin启动。
本实施例中,参见图4所示,还包括下载准备模块4,下载准备模块4具体包括:
下载请求单元11,用于通过所述APP应用程序向OTA线程发出对所述APP升级包的下载请求;
线程清理单元12,用于通过所述OTA线程挂起并删除所述APP应用程序正在运行的所有线程;
内存清空单元13,用于通过所述OTA线程清空所述APP内存分区;
下载启动单元14,用于通过所述OTA线程发起对所述APP升级包的下载。
具体地,下载请求单元11通过APP应用程序发出对升级包的下载请求后,线程清理单元12通过OTA线程挂起并删除所述APP应用程序正在运行的所有线程。例如,将HTTP和FTP下载线程作为内核线程,删除APP此刻正在运行的线程以释放堆栈空间,内存清空单元13清空APP内存分区,为APP的OTA升级做好准备,然后下载启动单元14开启下载。
本实施例的升级系统中,还包括APP恢复模块5,用于在校验操作失败时清空APP内存分区;并将所述APP应用程序加载至所述APP内存分区。
这样APP恢复模块可以恢复对于原来的APP应用程序的正常使用。具体地,APP恢复模块5将APP内存分区清零后,从APP闪存分区再次加载升级前的customer_APP.bin到APP内存分区,将连接寄存器的值修改为升级前的customer_app.bin入口函数,系统调用返回即跳转到customer_app.bin入口,重新启动customer_app.bin的初始化。
本实施例提供的基于RTOS的OTA升级系统,通过设置相应的模块将APP升级包首先下载至内存中,并在内存中对其进行校验,减少了对闪存的读写次数,避免了在闪存划定专用分区;从而提升了空中升级的效率,节省了设备闪存的空间,并加快了开机的速度。
实施例3
图5为本发明实施例3提供的一种电子设备的结构示意图。电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现实施例1中的基于RTOS的OTA升级方法。图5显示的电子设备30仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,电子设备30可以以通用计算设备的形式表现,例如其可以为服务器设备。电子设备30的组件可以包括但不限于:上述至少一个处理器31、上述至少一个存储器32、连接不同系统组件(包括存储器32和处理器31)的总线33。
总线33包括数据总线、地址总线和控制总线。
存储器32可以包括易失性存储器,例如随机存取存储器(RAM)321和/或高速缓存存储器322,还可以进一步包括只读存储器(ROM)323。
存储器32还可以包括具有一组(至少一个)程序模块324的程序/实用工具325,这样的程序模块324包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
处理器31通过运行存储在存储器32中的计算机程序,从而执行各种功能应用以及数据处理,例如本发明实施例1中的基于RTOS的OTA升级方法。
电子设备30也可以与一个或多个外部设备34(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(I/O)接口35进行。并且,模型生成的设备30还可以通过网络适配器36与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图5所示,网络适配器36通过总线33与模型生成的设备30的其它模块通信。应当明白,尽管图中未示出,可以结合模型生成的设备30使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID(磁盘阵列)系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了电子设备的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
实施例4
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,程序被处理器执行时实现实施例1中基于RTOS的OTA升级方法中的步骤。
其中,可读存储介质可以采用的更具体可以包括但不限于:便携式盘、硬盘、随机存取存储器、只读存储器、可擦拭可编程只读存储器、光存储器件、磁存储器件或上述的任意合适的组合。
在可能的实施方式中,本发明还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行实现实施例1中基于RTOS的OTA升级方法中的步骤。
其中,可以以一种或多种程序设计语言的任意组合来编写用于执行本发明的程序代码,程序代码可以完全地在用户设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户设备上部分在远程设备上执行或完全在远程设备上执行。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
- 基于RTOS的OTA升级方法、系统、设备及存储介质
- 一种基于地图数据的车辆OTA升级安全控制方法、系统、终端设备及存储介质