软件升级方法、终端设备及存储介质与流程

文档序号:28950586发布日期:2022-02-19 10:33阅读:174来源:国知局
软件升级方法、终端设备及存储介质与流程

1.本技术涉及软件技术领域,尤其涉及一种软件升级方法、终端设备及存储介质。


背景技术:

2.相关技术中,终端设备的软件升级的过程一般为:终端设备获取软件的待升级文件,将待升级文件写入当前运行的分区之中,终端设备重启并运行待升级文件,完成对软件的升级。
3.但是,在当前在软件升级过程中,待升级文件将会覆盖终端设备分区中原本的运行文件。此时,如果终端设备断电或者待升级文件无法正常加载,而新的运行文件无法正常运行,将会导致终端设备无法正常运行软件甚至无法启动。


技术实现要素:

4.本技术提供一种软件升级方法、终端设备及存储介质,能够提高用户出行预测模型预测的对多个出行指标的预测准确度。
5.第一方面,提供一种软件升级方法,包括:在第一分区启动,并运行预设软件的运行文件;获取预设软件的待升级文件;将待升级文件写入第二分区,得到升级后的预设软件;在第二分区重启终端设备,并运行升级后的预设软件。
6.结合上述第一方面,在一种可能的实现方式中,该方法还包括:在成功运行升级后的预设软件的情况下,将待升级文件写入第一分区;在未成功运行升级后的预设软件的情况下,将第二分区的待升级文件回滚为运行文件。
7.结合上述第一方面,在一种可能的实现方式中,终端设备包括第一寄存器,第二寄存器和第三寄存器;第一寄存器的值用于指示终端设备待启动的分区;第二寄存器的值用于表示软件升级过程中的升级状态;第三寄存器的值用于表示终端设备实际启动时的分区;软件升级过程中的升级状态包括:正常态,用于表示软件升级完成的状态,或者软件升级之前的状态;加载态,用于表示下载待升级文件,以及将待升级文件写入第二分区的状态;激活态,用于表示终端设备在第二分区重启,并运行升级后的预设软件的状态;提交态,用于表示终端设备在成功运行升级后的预设软件的情况下,将待升级文件写入第一分区的状态;回滚态,用于表示终端设备在运行升级后的预设软件失败的情况下,将第二分区的待升级文件回滚为运行文件的状态。
8.结合上述第一方面,在一种可能的实现方式中,,方法还包括:在第一预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为正常态;第一预设条件包括以下至少一项:成功将第二分区的待升级文件回滚为运行文件;将待升级文件写入第一分区,且在第一分区成功运行升级后的预设软件;将待升级文件写入第二分区失败;在第二预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为加载态;第二预设条件包括以下至少一项:终端设备下载待升级文件;或者,终端设备正在向第二分区写入待升级文件;在第三预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为激活态;第三
预设条件包括:终端设备成功将待升级文件写入第二分区,或者,终端设备成功运行升级后的预设软件;在第四预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为提交态;第四预设条件包括:终端设备成功正在向第二分区写入待升级文件;在第五预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为回滚态;第五预设条件包括以下至少一项:终端设备未成功将待升级文件写入第二分区,或者,终端设备在第二分区重启终端设备失败;或者,终端设备未成功运行升级后的预设软件。
9.结合上述第一方面,在一种可能的实现方式中,方法还包括:若第一寄存器和第三寄存器的值不相同,则将第二分区的待升级文件回滚为运行文件;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为加载态,则将第二寄存器的标记更新为正常态;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为提交态,则将待升级文件写入第一分区;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为回滚态,则将第二分区的待升级文件回滚为运行文件。
10.结合上述第一方面,在一种可能的实现方式中,方法还包括:读取第一数据和第二数据;其中,第一数据为第二分区内运行文件中的第一数据量的数据;第二数据为待升级文件中第一数据量的数据;第一数据在运行文件中的读取顺序和第二数据在待升级文件中的读取顺序相同;确定第一数据和第二数据的数据内容是否相同;若不相同,则将第二数据写入第二分区内的运行文件中,并将第一数据替换为第二数据。
11.第二方面,提供一种终端设备,包括获取单元和处理单元;处理单元,用于在第一分区启动,并运行预设软件的运行文件;获取单元,用于获取预设软件的待升级文件;处理单元,还用于将待升级文件写入第二分区,得到升级后的预设软件;处理单元,还用于在第二分区重启终端设备,并运行升级后的预设软件。
12.结合上述第二方面,在一种可能的实现方式中,处理单元,还用于:在成功运行升级后的预设软件的情况下,将待升级文件写入第一分区;在未成功运行升级后的预设软件的情况下,将第二分区的待升级文件回滚为运行文件。
13.结合上述第二方面,在一种可能的实现方式中,终端设备还包括第一寄存器,第二寄存器和第三寄存器;第一寄存器的值用于指示终端设备待启动的分区;第二寄存器的值用于表示软件升级过程中的升级状态;第三寄存器的值用于表示终端设备实际启动时的分区;软件升级过程中的升级状态包括:正常态,用于表示软件升级完成的状态,或者软件升级之前的状态;加载态,用于表示下载待升级文件,以及将待升级文件写入第二分区的状态;激活态,用于表示终端设备在第二分区重启,并运行升级后的预设软件的状态;提交态,用于表示终端设备在成功运行升级后的预设软件的情况下,将待升级文件写入第一分区的状态;回滚态,用于表示终端设备在运行升级后的预设软件失败的情况下,将第二分区的待升级文件回滚为运行文件的状态。
14.结合上述第二方面,在一种可能的实现方式中,在第一预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为正常态;第一预设条件包括以下至少一项:成功将第二分区的待升级文件回滚为运行文件;将待升级文件写入第一分区,且在第一分区成功运行升级后的预设软件;将待升级文件写入第二分区失败;在第二预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为加载态;第二预设条件包括以下至少一项:终端设备下载待升级文件;或者,终端设备正在向第二分区写入待升级文件;在第三预设条
件下,第二寄存器的值用于表示软件升级过程中的升级状态为激活态;第三预设条件包括:终端设备成功将待升级文件写入第二分区,或者,终端设备成功运行升级后的预设软件;在第四预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为提交态;第四预设条件包括:终端设备成功正在向第二分区写入待升级文件;在第五预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为回滚态;第五预设条件包括以下至少一项:终端设备未成功将待升级文件写入第二分区,或者,终端设备在第二分区重启终端设备失败;或者,终端设备未成功运行升级后的预设软件。
15.结合上述第二方面,在一种可能的实现方式中,处理单元,还用于:若第一寄存器和第三寄存器的值不相同,则将第二分区的待升级文件回滚为运行文件;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为加载态,则将第二寄存器的标记更新为正常态;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为提交态,则将待升级文件写入第一分区;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为回滚态,则将第二分区的待升级文件回滚为运行文件。
16.结合上述第二方面,在一种可能的实现方式中,处理单元,具体用于:读取第一数据和第二数据;其中,第一数据为第二分区内运行文件中的第一数据量的数据;第二数据为待升级文件中第一数据量的数据;第一数据在运行文件中的读取顺序和第二数据在待升级文件中的读取顺序相同;确定第一数据和第二数据的数据内容是否相同;若不相同,则将第二数据写入第二分区内的运行文件中,并将第一数据替换为第二数据。
17.第三方面,本技术提供了一种终端设备,该终端设备包括:处理器和通信接口;通信接口和处理器耦合,处理器用于运行计算机程序或指令,以实现如第一方面和第一方面的任一种可能的实现方式中所描述的软件升级方法。
18.第四方面,本技术提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当计算机可读存储介质中的指令由终端设备的处理器执行时,使得终端设备能够执行如第一方面和第一方面的任一种可能的实现方式中描述的软件升级方法。
19.第五方面,本技术提供一种包含指令的计算机程序产品,计算机程序产品包括计算机指令,当计算机指令在终端设备上运行时,使得终端设备执行如第一方面和第一方面的任一种可能的实现方式中所描述的软件升级方法。
20.第六方面,本技术提供一种芯片,芯片包括处理器和通信接口,通信接口和处理器耦合,处理器用于运行计算机程序或指令,以实现如第一方面和第一方面的任一种可能的实现方式中所描述的软件升级方法。
21.上述第二方面至第五方面中任一种实现方式所带来的技术效果可以参见第一方面对应设计所带来的技术效果,此处不再赘述。
22.在本技术中,上述数据处理装置的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本发明类似,属于本发明权利要求及其等同技术的范围之内。
23.本发明的这些方面或其他方面在以下的描述中会更加简明易懂。
24.上述方案至少带来以下有益效果:在本技术提供的软件升级方法中,将终端设备运行的分区划分为第一分区和第二分区;终端设备在第一分区启动并运行软件。升级过程中,终端设备在第二分区进行升级。升级之后,终端设备进行准备切换并重启,从第二分区
运行升级后的软件。这样,终端设备的第一分区中包括升级前的软件的运行文件,第二分区包括待升级文件。如果升级成功,终端设备可以在第二分区正常运行待升级文件,如果升级失败,终端设备可以切换到第一分区并根据第一分区中的运行文件继续正常运行该软件。解决了终端设备因升级失败导致的无法正常运行软件甚至无法正常启动的问题。
附图说明
25.图1为本技术实施例提供的一种终端设备的结构示意图;
26.图2为本技术实施例提供的一种软件升级方法的流程示意图;
27.图3为本技术实施例提供的另一种软件升级方法的流程示意图;
28.图4为本技术实施例提供的另一种软件升级方法的流程示意图;
29.图5为本技术实施例提供的另一种终端设备的结构示意图;
30.图6为本技术实施例提供的另一种软件升级方法的流程示意图;
31.图7为本技术实施例提供的另一种终端设备的结构示意图。
具体实施方式
32.本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。
33.本技术的说明书以及附图中的术语“第一”和“第二”等是用于区别不同的对象,或者用于区别对同一对象的不同处理,而不是用于描述对象的特定顺序。
34.此外,本技术的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选的还包括其他没有列出的步骤或单元,或可选的还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
35.需要说明的是,本技术实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本技术实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
36.在本技术的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
37.为了实现本技术实施例提供的软件升级方法,本技术实施例提供了一种终端设备,用于执行的软件升级方法,该终端设备可以为本技术中涉及的终端设备,或者终端设备中的模块;或者是终端设备中的芯片,也可以是其他用于执行软件升级方法的装置,本技术对此不做限定。
38.图1为本技术实施例提供的一种终端设备的结构示意图。如图1所示,该终端设备100包括至少一个处理器101,通信线路102,以及至少一个通信接口104,还可以包括存储器103。其中,处理器101,存储器103以及通信接口104三者之间可以通过通信线路102连接。
39.处理器101可以是一个中央处理器(central processing unit,cpu),也可以是特定集成电路(application specific integrated circuit,asic),或者是被配置成实施本技术实施例的一个或多个集成电路,例如:一个或多个数字信号处理器(digital signal processor,dsp),或,一个或者多个现场可编程门阵列(field programmable gate array,
fpga)。
40.通信线路102可以包括一通路,用于在上述组件之间传送信息。
41.通信接口104,用于与其他设备或通信网络通信,可以使用任何收发器一类的装置,如以太网,无线接入网(radio access network,ran),无线局域网(wireless local area networks,wlan)等。
42.存储器103可以是只读存储器(read-only memory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、只读光盘(compact disc read-only memory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于包括或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
43.一种可能的设计中,存储器103可以独立于处理器101存在,即存储器103可以为处理器101外部的存储器,此时,存储器103可以通过通信线路102与处理器101相连接,用于存储执行指令或者应用程序代码,并由处理器101来控制执行,实现本技术下述实施例提供的软件升级方法。又一种可能的设计中,存储器103也可以和处理器101集成在一起,即存储器103可以为处理器101的内部存储器,例如,该存储器103为高速缓存,可以用于暂存一些数据和指令信息等。
44.作为一种可实现方式,处理器101可以包括一个或多个cpu,例如图1中的cpu0和cpu1。作为另一种可实现方式,终端设备100可以包括多个处理器,例如图1中的处理器101和处理器107。作为再一种可实现方式,终端设备100还可以包括输出设备105和输入设备106。
45.如图2所示,本技术实施例提供的软件升级方法,应用于如图1所示的终端设备100中,该方法可以通过以下s201-s204实现,下面进行详细说明:
46.s201、终端设备在第一分区启动,并运行预设软件的运行文件。
47.其中,终端设备包括第一分区和第二分区,第一分区包括预设软件的运行文件。
48.一种可能的实现方式中,第一分区和第二分区中均包括该预设软件的运行文件。在终端设备启动时,终端设备确定主区和备区,其中,第一分区即为终端设备初次启动时确定的主区,第二分区即为终端设备初次启动时确定的备区。终端设备从第一分区中启动运行,并在第一分区中加载预设软件的运行文件,运行该预设软件。终端设备初次启动指的是终端设备在进行软件升级之前的最近一次的启动。
49.需要说明的是,终端设备在软件升级过程中可能会进行主备切换,主备切换之后第二分区为主区,第一分区为备区。在本技术中主区为终端设备当前运行的分区,备区为终端设备当前未运行的分区。
50.一种示例,本技术中的终端设备可以是嵌入式设备,第一分区和第二分区可以为嵌入式设备中的flash。
51.此外,需要指出的是,本技术仅以终端设备包括第一分区和第二分区为例进行说明,在具体实现时,终端设备还可以包括更多分区,本技术对此不做限定。
52.s202、终端设备获取预设软件的待升级文件。
53.一种可能的实现方式中,其他设备(例如升级服务器)或者工作人员通过终端设备的输入接口向终端设备输入预设软件的升级消息。该升级消息中包括该预设软件的待升级文件的路径信息。终端设备获取到预设软件的升级消息,解析该升级消息确定升级消息中的待升级文件的路径信息。终端设备根据待升级文件的路径信息获取待升级文件。
54.又一种可能的实现方式中,其他设备或者工作人员通过终端设备的输入接口直接向终端设备输入预设软件的待升级文件。
55.此外,终端设备还可以通过其他方式获取预设软件的待升级文件,本技术对此不做限定。
56.s203、终端设备将待升级文件写入第二分区,得到升级后的预设软件。
57.一种可能的实现方式中,终端设备可以将待升级文件全部写入第二分区中,将待升级文件覆盖该预设软件原本的运行文件,完成对预设软件的升级,得到升级后的预设软件。
58.又一种可能的实现方式中,终端设备比较待升级文件与升级前的运行文件,确定待升级文件相比较于升级前的运行文件所增加/删除/修改的内容,并根据增加/删除/修改的内容对应调整升级前的运行文件,完成对预设软件的升级,得到升级后的预设软件。
59.此外,终端设备还可以通过其他方式将待升级文件写入第二分区,得到升级后的预设软件,本技术对此不做限定。
60.需要指出的是,在终端设备将待升级文件写入第二分区的过程中,终端设备可能发生断电等导致升级无法正常完成的情况。如果终端设备发生断电,终端设备在上电之后终端设备可以通过重新执行上述s201-s203完成对预设软件的升级。
61.s204、终端设备在第二分区重启,并运行升级后的预设软件。
62.具体来说,第二分区为终端设备当前运行的备区,终端设备确定将待升级文件写入第二分区,得到升级后的预设软件之后,终端设备进行主备切换,将第二分区作为主区,将第一分区作为备区。在此之后终端设备在第二分区(主区)重启,并尝试在第二分区运行升级后的预设软件。
63.上述方案至少带来以下有益效果:在本技术提供的软件升级方法中,将终端设备运行的分区划分为第一分区和第二分区;终端设备在第一分区启动并运行软件。升级过程中,终端设备在第二分区进行升级。升级之后,终端设备进行准备切换并重启,从第二分区运行升级后的软件。这样,终端设备的第一分区中包括升级前的软件的运行文件,第二分区包括待升级文件。如果升级成功,终端设备可以在第二分区正常运行待升级文件,如果升级失败,终端设备可以切换到第一分区并根据第一分区中的运行文件继续正常运行该软件。解决了终端设备因升级失败导致的无法正常运行软件甚至无法正常启动的问题。
64.结合图2,如图3所示,在s204之后,方法还包括以下s301-s303,下面进行具体说明:
65.s301、终端设备确定是否成功运行升级后的预设软件。
66.需要指出的是,在上述s203中,终端设备虽然将待升级文件写入第二分区,得到升级后的预设软件,但是当前还无法确定终端设备能够正常运行升级后的预设软件。因此,终端设备需要在重启之后尝试运行升级后的预设软件,确定是否能够成功运行升级后的预设软件。
67.其中,终端设备是否成功运行升级后的预设软件影响终端设备后续执行的步骤。
68.例如,如果终端设备成功运行升级后的预设软件,则终端设备执行以下s302,完成对第一分区的预设软件的升级。
69.如果终端设备未成功运行升级后的预设软件,则终端设备执行以下s303,将第二分区的待升级文件回滚为运行文件。
70.以下分别对s302和s303进行说明。
71.s302、终端设备将待升级文件写入第一分区。
72.也即是说,在成功运行升级后的预设软件的情况下,终端设备将待升级文件写入第一分区。
73.需要说明的是,如果终端设备在第二分区成功运行升级后的预设软件,那么一般来说,终端设备将待升级文件写入第一分区之后,也可以在第一分区根据待升级文件完成对预设软件的升级,并正常运行升级后的预设软件。因此,在成功运行升级后的预设软件的情况下,终端设备将待升级文件写入第一分区,将不会影响终端设备正常运行预设软件。此外,即使在第一分区写入待升级文件失败或者无法正常运行升级后的预设软件,终端设备也可以在第二分区正常运行升级后的预设软件,不影响终端设备的正常使用。
74.s303、终端设备将第二分区的待升级文件回滚为运行文件。
75.也即是说,在未成功运行升级后的预设软件的情况下,终端设备将第二分区的待升级文件回滚为运行文件。
76.需要说明的是,如果终端设备在第二分区未能成功运行升级后的预设软件,那么可能是待升级文件异常或者与终端设备不匹配等原因引起的。此时,终端设备可以首先将第二分区的待升级文件回滚为运行文件,保证终端设备当前能够正常运行预设软件。在此之后,终端设备在尝试重新获取升级包重新升级,或者先运行当前升级前的运行文件,在得到下一次升级指示之后再次进行升级。
77.上述方案至少带来以下有益效果:终端设备在第二分区成功运行升级后的预设软件的情况下,将待升级文件写入第一分区,能够使得终端设备在第一分区也完成对预设软件的正常升级。终端设备在第二分区未成功运行升级后的预设软件的情况下,将第二分区的待升级文件回滚为运行文件,使得终端设备可以在第二分区根据回滚后的运行文件运行预设软件,避免了升级失败导致的无法在第二分区运行该预设软件的问题。
78.如图3所示,在第二分区中也包括预设软件的运行文件的情况下,s203具体可以通过以下s304-s308实现。
79.s304、终端设备读取第一数据和第二数据。
80.其中,第一数据为第二分区内运行文件中的第一数据量的数据;第二数据为待升级文件中第一数据量的数据;第一数据在运行文件中的读取顺序和第二数据在待升级文件中的读取顺序相同。
81.一种可能的实现方式中,第一数据量的大小根据第二分区中的block(块)的大小确定。此时,s304具体可以通过以下过程实现:
82.终端设备确定第二分区的一个block的大小,并将一个block的大小确定为第一数据量的大小。此后,终端设备从第二分区的运行文件中按照运行文件的文件顺序读取第一数据量大小的数据文件作为第一数据;终端设备从待升级文件中按照待升级文件的文件顺
序读取第一数据量大小的数据文件作为第二数据。
83.s305、终端设备确定第一数据和第二数据的数据内容是否相同。
84.一种可能的实现方式中,终端设备可以通过逐个字节比较第一数据和第二数据的字节内容是否相同确定第一数据和第二数据是否相同。
85.在第一数据和第二数据的每个字节的内容都相同的情况下,确定第一数据和第二数据的数据内容相同。在第一数据和第二数据存在一个或多个字节的内容不相同的情况下,确定第一数据和第二数据的数据内容不相同。
86.由于第一数据在运行文件的文件顺序与第二数据在待升级文件中的顺序相同,因此如果第一数据和第二数据相同,则说明相比较于运行文件,待升级文件对运行文件中的第一数据未做升级改动。若第一数据和第二数据不同,则说明相较于运行文件,待升级文件对对运行文件中的第一数据进行了改动。
87.需要指出的是,第一数据和第二数据的数据内容是否相同终端设备后续执行的步骤。
88.例如,如果第一数据和第二数据的数据内容不相同,则终端设备执行以下s306至s308,完成对第一数据的调整,继续向下读取第一数据和第二数据,并逐个比较待升级文件中的第二数据和运行文件中的第一数据是否相同。
89.如果第一数据和第二数据的数据内容相同,则终端设备直接执行以下s308,继续向下读取第一数据和第二数据,并逐个比较待升级文件中的第二数据和运行文件中的第一数据是否相同。
90.以下,分别对s306和s308进行详细说明。
91.s306、终端设备将第二数据写入第二分区内的运行文件中。
92.也即是说,在第一数据和第二数据的数据内容不相同的情况下,终端设备将第二数据写入第二分区内的运行文件中,完成对第一数据的替换。这样,通过逐个比较待升级文件中的每个第二数据和运行文件中读取顺序相同的第一数据,并将第一数据替换为与之不同的第二数据,可以完成对预设软件的升级,得到升级后的预设软件。
93.s307、终端设备确定第二分区内运行文件和待升级文件中的数据是否读取完毕。
94.若是,则终端设备确定升级完成执行上述s204,若否,则终端设备执行以下s308。
95.s308、终端设备按照顺序读取下一个第二分区内运行文件中的第一数据,以及下一个待升级文件中的第二数据,并依次执行上述s304-s308,直到第二分区内运行文件和待升级文件中的数据全部读取完毕。
96.需要指出的是,本技术实施例仅以对第二分区进行软件升级的过程为例进行说明,在具体实施时,对第一分区进行软件升级的过程也可以参照上述s304-s308实现,或者在终端设备还具有其他分区时,其他分区进行软件升级的过程同样可以参照上述s304-s308实现。
97.上述方案至少带来以下有益效果:终端设备对第二分区的运行文件进行升级时,不直接将待升级文件直接全部写入第二分区,而是通过比较运行文件和待升级文件中的数据之间的区别,只将两者之间存在区别的数据文件(也即待升级文件中进行改动的数据文件)写入到第二分区中。
98.由于待升级文件通常只是在运行文件的基础上进行少量修改后得到的升级文件,
待升级文件和运行文件大多数数据都是一样的,因此采用本技术提供的方法可以大大降低写入第二分区的数据量。由于终端设备从第二分区读取数据的速度通常远大于向第二分区写入数据的速度,因此本技术提供的方法还能够提高软件升级效率,降低升级时长。此外,由于终端设备的分区的写入次数是一定的,在分区的写入次数达到一定的次数之后该分区可能将无法继续正常工作,因此本技术降低写入第二分区的数据量还能够提高分区的使用寿命。
99.一种可能的实现方式中,本技术涉及的终端设备包括第一寄存器,第二寄存器和第三寄存器;第一寄存器的值用于指示终端设备待启动的分区;第二寄存器的值用于表示软件升级过程中的升级状态;第三寄存器的值用于表示终端设备实际启动时的分区。
100.软件升级过程中的升级状态包括。
101.正常态,用于表示软件升级完成的状态,或者软件升级之前的状态。
102.加载态,用于表示下载待升级文件,以及将待升级文件写入第二分区的状态。
103.激活态,用于表示终端设备在第二分区重启,并运行升级后的预设软件的状态。
104.提交态,用于表示终端设备在成功运行升级后的预设软件的情况下,将待升级文件写入第一分区的状态。
105.回滚态,用于表示终端设备在运行升级后的预设软件失败的情况下,将第二分区的待升级文件回滚为运行文件的状态。
106.需要指出的是,在第一预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为正常态;第一预设条件包括以下至少一项:成功将第二分区的待升级文件回滚为运行文件;将待升级文件写入第一分区,且在第一分区成功运行升级后的预设软件;将待升级文件写入第二分区失败。
107.在第二预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为加载态;第二预设条件包括以下至少一项:终端设备下载待升级文件;或者,终端设备正在向第二分区写入待升级文件。
108.在第三预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为激活态;第三预设条件包括:终端设备成功将待升级文件写入第二分区,或者,终端设备成功运行升级后的预设软件。
109.在第四预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为提交态;第四预设条件包括:终端设备成功正在向第二分区写入待升级文件。
110.在第五预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为回滚态;第五预设条件包括以下至少一项:终端设备未成功将待升级文件写入第二分区,或者,终端设备在第二分区重启终端设备失败;或者,终端设备未成功运行升级后的预设软件。
111.一种示例,第一寄存器、第二寄存器和第三寄存器的说明如下表1所示。
112.表1
[0113][0114]
基于第一寄存器、第二寄存器和第三寄存器的值,终端设备可以确定从哪个分区进行启动,实际启动成功的分区为哪个分区,以及当前软件升级的状态。此外,终端设备还可以根据第二寄存器的值确定后续对软件升级需要执行的过程。
[0115]
具体来说,如图4所示,在s204之后,终端设备可以通过以下s401-s405确定后续对软件升级需执行的过程。
[0116]
s401、终端设备确定第一寄存器、第二寄存器和第三寄存器的值。
[0117]
s402、若第一寄存器和第三寄存器的值不相同,则终端设备将第二分区的待升级文件回滚为运行文件。
[0118]
需要指出的是,在s204之后,如果第一寄存器和第三寄存器不同,说明终端设备在第二分区重启的时候重启失败,终端设备更新了第三寄存器的值,并在第一分区重启。此时r2寄存器的值为0,但是第一寄存器的值未更新,仍为1。此时,说明终端设备在第二分区重启失败,终端设备无法在第二分区成功运行升级后的预设软件。因此,终端设备需要将第二分区的待升级文件回滚为运行文件。
[0119]
一种可能的实现方式中,在s402中,终端设备还用于将第一寄存器的值修改为第三寄存器的值,并将第二寄存器的标记更新为正常态。
[0120]
s403、若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为加载态,则终端设备将第二寄存器的标记更新为正常态。
[0121]
需要指出的是,第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升
级状态为加载态,表示终端设备获取待升级文件失败,或者将待升级文件写入到第二分区失败。此时,终端设备将第二寄存器的标记更新为正常态,以使得终端设备重新开始软件升级过程。
[0122]
s404、若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为提交态,则终端设备将待升级文件写入第一分区。
[0123]
需要指出的是,第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为提交态,表示终端设备已经成功在第二分区运行了升级后的预设软件,但是终端设备未能将待升级文件写入第一分区。此时,终端设备继续将待升级文件写入第一分区。
[0124]
s405、若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为回滚态,则终端设备将第二分区的待升级文件回滚为运行文件。
[0125]
需要指出的是,第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为提交态,表示未能成功在第二分区运行升级后的预设软件,此时终端设备需要将第二分区的待升级文件回滚为运行文件。
[0126]
上述方案至少带来以下有益效果:终端设备能够基于第一寄存器的值、第二寄存器的值、以及第三寄存器的值确定终端设备当前的升级状态,以及根据当前升级状态确定后续需要执行的步骤。可以使得终端设备在任一个升级过程未能成功执行的情况下,均能继续执行该升级过程。提高了软件升级的成功率,同时避免了终端设备因升级失败导致的无法正常运行软件甚至无法正常启动的问题。
[0127]
又一种可能的实现方式中,如图5所示,终端设备按软件模块划分至少包括以下软件模块:启动(boot)模块501、板级支持包(board support package,bsp)模块502、操作维护(operation maintenance,om)模块503、和输入模块504。
[0128]
其中,boot模块501是终端设备上电之后首先需要运行的模块,boot模块501用于初始以下硬件中的至少一项:cpu、ddr、flash。在初始化完整这些硬件之后,boot模块501还用于引导启动终端设备的操作系统。例如,在终端设备的操作系统为linux系统时,boot模块501还用于引导启动终端设备的linux系统。
[0129]
bsp模块502是一种运行在操作系统上的模块,用于封装操作系统的相关功能,以及为应用层提供相关服务。
[0130]
om模块503是终端设备的对外接口,用于接收输入模块输入的操作指令,并完成操作指令相关的动作。
[0131]
输入模块504用于其他设备或工作人员通过输入模块箱终端设备输入操作指令。
[0132]
以下,结合表1中示出的寄存器的值,以及图5中示出的终端设备的软件模块,对终端设备的软件升级过程进行详细说明:
[0133]
如图6所示,本技术实施例提供的软件升级方法具体可以通过以下s601-s623实现。
[0134]
s601、boot模块启动。
[0135]
一种可能的实现方式中,boot模块根据第三寄存器的值确定从哪个分区启动。
[0136]
例如,在第三寄存器的值为0时,终端设备从第一分区启动。在第一寄存器的值为1时,终端设备从第二分区启动。
[0137]
s602、boot模块确定是否启动成功。
[0138]
其中,启动失败的原因包括但不限于:因程序bug导致的看门狗复位进而引起boot启动失败。
[0139]
若启动成功,则执行以下s604。若启动失败,则执行以下s603。
[0140]
s603、boot模块切换备用分区并重启。
[0141]
也即是说,在boot模块启动失败的情况下,boot模块切换备用分区并重启。
[0142]
一种可能的实现方式中,s603具体可以通过以下方式实现:boot模块将第三寄存器的值更新为(r2+1)%r2(即加1取模),之后,将计算的数值更新到第三寄存器中,并根据第三寄存器中当前的值选择分区,重启终端设备。其中r2为更新前第三寄存器的值。
[0143]
一种示例,更新前第三寄存器的值为0,boot模块在第一分区启动。若boot模块启动失败,则boot模块将第三寄存器的值加1之后取模,得到第三寄存器更新后的值为1,第三寄存器更新后的值指示从第二分区启动,则boot模块在第二分区重启。
[0144]
又一种示例,更新前第三寄存器的值为1,boot模块在第二分区启动。若boot模块启动失败,则boot模块将第三寄存器的值加1之后取模,得到第三寄存器更新后的值为0,第三寄存器更新后的值指示从第一分区启动,则boot模块在第一分区重启。
[0145]
s604、boot模块继续启动流程直至启动成功。
[0146]
需要指出的是,后续boot模块的启动流程可以参照现有技术,本技术对此不在赘述。
[0147]
s605、输入模块获取软件升级消息。
[0148]
其中,软件升级消息中包括以下至少一项:软件升级指示信息,待升级文件的路径。
[0149]
需要指出的是,软件升级消息可以是从其他设备通过输入模块向终端设备输入的,也可以是操作人员通过对输入模块执行相应的操作向终端设备输入的。本技术对此不做限定。
[0150]
s606、om模块解析软件升级消息,确定软件升级消息中的待升级文件的路径。
[0151]
一种示例,软件升级消息中的待升级文件的路径为待升级文件的统一资源标识符(uniform resource identifier,url)。
[0152]
s607、om模块根据待升级文件的路径获取待升级文件。
[0153]
一种具体的实现方式中,om模块可以通过文件传输协议(file transfer protocol,ftp)工具,或者简单文件传输协议或者(trivial file transfer protocol,tftp)工具远程获取待升级文件。本技术对此不做限定。
[0154]
s608、om模块解压和校验待升级文件。
[0155]
一种可能的实现方式中,如果om模块获取的待升级文件是压缩格式的文件,那么om模块首先解压待升级文件。
[0156]
如果在软件升级消息中指示要对待升级文件进行校验,并指示了采用何种方式(例如通过信息摘要算法(message-digest algorithm,md)5或hash检验)对待升级文件进行校验,那么om模块根据软件升级消息中指示的校验方式对待升级文件进行校验。
[0157]
s609、om模块调用bsp将第二寄存器设置为加载态。
[0158]
需要指出的是,根据前述对加载态的记载可知,om模块获取到预设软件的待升级文件之后可以将第二寄存器设置为加载态。在om模块获取待升级文件到om模块将待升级文
件写入第二分区成功之前,第二寄存器均为加载态。
[0159]
一种可能的实现方式中,om模块调用bsp将第二寄存器设置为1。
[0160]
s610、om模块调用bsp模块将待升级软件写入到第二分区中。
[0161]
可选的,bsp模块根据第一寄存器的值确定当前的备区为第二分区,然后根据bsp模块接口参数指导的软件版本路径,将待升级软件写入到第二分区中。
[0162]
一种具体的实现方式中,s609的具体实现方式可以参照上述图3中的s304-s307实现,此处不再赘述。
[0163]
s611、om模块调用bsp模块将第二寄存器设置为激活态。
[0164]
一种可能的实现方式中,在bsp模块成功将待升级软件写入到第二分区之后,om模块调用bsp模块设置第二寄存器为激活态。
[0165]
具体来说,om模块调用bsp将第二寄存器的值设置为2。
[0166]
s612、om模块调用bsp模块进行主备切换。
[0167]
具体来说,om模块调用bsp模块确定第一寄存器和第二寄存器的值,并根据第一寄存器和第二寄存器的值确定当前主区和备区。om模块调用bsp模块修改第一寄存器和第二寄存器的值,并根据修改后的第一寄存器和第二寄存器的值重新确定主区和备区。
[0168]
一种示例,om模块调用bsp模块当前第一寄存器和第二寄存器值为0;此时,当前的主区为第一分区,备区为第二分区。om模块调用bsp模块将第一寄存器和第二寄存器值设置为1,然后将主区设置为第二分区,备区设置为第一分区。
[0169]
s613、om模块调用bsp模块进行终端设备在第二分区的重启。
[0170]
需要指出的是终端设备的重启过程可以参照上述s601-s604,此处不再赘述。
[0171]
s614、bsp模块确定升级流程是否正常。
[0172]
一种可能的实现方式中,bsp模块根据第一寄存器、第二寄存器、以及第三寄存器的值确定升级流程是否正常。
[0173]
一种可能的实现方式中,该过程的实现方式可以参照上述图4中的s401-s405。
[0174]
具体来说,若第一寄存器和第三寄存器的值不相同,则om模块执行以下s622。
[0175]
若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为加载态,则om模块将第二寄存器设置为正常态。
[0176]
若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为提交态,则om模块执行以下s617。
[0177]
若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为回滚态,则om模块执行以下s622。
[0178]
s615、om模块确定终端设备是否重启成功。
[0179]
一种可能的实现方式中,om模块中预先存储有终端设备是否重启成功的判断条件。om模块根据该判断条件确定终端设备是否重启成功。
[0180]
需要指出的是,若重启成功,则终端设备执行以下s616,若不成功,则终端设备执行以下s619。
[0181]
s616、om模块调用bsp模块将第二寄存器设置为提交态。
[0182]
也即是说,在终端设备重启成功的情况下,om模块调用bsp模块将第二寄存器设置为提交态。
[0183]
需要指出的是,终端设备重启成功,说明终端设备在第二分区成功运行升级后的预设软件。此时,终端设备需要将第一分区中的预设软件升级为升级后的预设软件,因此,om模块调用bsp模块将第二寄存器设置为提交态,以使得bsp模块根据第二寄存器的值向第一分区写入待升级文件。
[0184]
一种可能的实现方式中,om模块调用bsp将第二寄存器的值设置为3。
[0185]
s617、bsp模块向第一分区写入待升级文件,并在写入成功后将第二寄存器设置为正常态。
[0186]
具体来说,在bsp模块成功将待升级文件写入第一分区之后,终端设备完成对预设软件的升级过程。此时,bsp模块将第二寄存器设置为正常态。
[0187]
一种可能的实现方式中,om模块调用bsp将第二寄存器的值设置为0。
[0188]
s618、om模块发送升级成功消息。
[0189]
一种可能的实现方式中,oa模块向指示该终端设备进行软件升级的终端设备发送升级成功消息。
[0190]
s619、om模块调用bsp模块,将第二寄存器设置为回滚态。
[0191]
也即是说,在终端设备重启失败的情况下,om模块调用bsp模块将第二寄存器设置为回滚态。
[0192]
需要指出的是,在终端设备重启失败的情况下,说明终端设备未能在第二分区成功运行升级后的预设软件。此时,om模块需要调用bsp模块,将第二寄存器设置为回滚态,以使得第二分区中的预设软件的运行文件保持为能正常运行的升级前的运行文件。因此,om模块调用bsp模块,将第二寄存器设置为回滚态。
[0193]
一种可能的实现方式中,om模块调用bsp将第二寄存器的值设置为4。
[0194]
s620、om模块调用bsp模块进行主备切换。
[0195]
此时,om模块调用bsp模块在此将第一分区切换为主区,将第二分区切换为备区。
[0196]
s621、om模块调用bsp模块进行终端设备在第一分区的重启。
[0197]
也即是说,终端设备再次在第一分区启动。
[0198]
s622、bsp模块将第二分区的待升级文件回滚为运行文件,并设置第二寄存器为正常态。
[0199]
需要指出的是,在终端设备再次在第一分区启动之后,由于第二分区的升级后的预设软件不能正常运行,因此终端设备需要将第二分区的待升级文件回滚为运行文件,以便于终端设备后续能继续在第二分区正常运行该预设软件,或者再次在第二分区进行软件升级。
[0200]
s623、om模块上报升级失败结果。
[0201]
上述方案至少带来以下有益效果:图6结合表1和图5对本技术的软件升级过程进行了详细说明,根据该流程,终端设备能够在升级过程被意外打断的情况下,根据第一寄存器的值、第二寄存器的值、以及第三寄存器的值继续进行升级,并在升级失败时根据第一寄存器的值、第二寄存器的值、以及第三寄存器的值确定升级失败的原因,并继续进行升级或进行软件回滚,保证终端设备能够正常运行。
[0202]
可以看出,上述主要从方法的角度对本技术实施例提供的技术方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人
员应该很容易意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,本技术实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0203]
本技术实施例可以根据上述方法示例对终端设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。可选的,本技术实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0204]
如图7所示,为本技术实施例提供的一种终端设备的结构示意图。该终端设备包括:获取单元701和处理单元702。
[0205]
处理单元702,用于在第一分区启动,并运行预设软件的运行文件;获取单元701,用于获取预设软件的待升级文件;处理单元702,还用于将待升级文件写入第二分区,得到升级后的预设软件;处理单元702,还用于在第二分区重启终端设备,并运行升级后的预设软件。
[0206]
可选的,处理单元702,还用于:在成功运行升级后的预设软件的情况下,将待升级文件写入第一分区;在未成功运行升级后的预设软件的情况下,将第二分区的待升级文件回滚为运行文件。
[0207]
可选的,终端设备还包括第一寄存器,第二寄存器和第三寄存器;第一寄存器的值用于指示终端设备待启动的分区;第二寄存器的值用于表示软件升级过程中的升级状态;第三寄存器的值用于表示终端设备实际启动时的分区;软件升级过程中的升级状态包括:正常态,用于表示软件升级完成的状态,或者软件升级之前的状态;加载态,用于表示下载待升级文件,以及将待升级文件写入第二分区的状态;激活态,用于表示终端设备在第二分区重启,并运行升级后的预设软件的状态;提交态,用于表示终端设备在成功运行升级后的预设软件的情况下,将待升级文件写入第一分区的状态;回滚态,用于表示终端设备在运行升级后的预设软件失败的情况下,将第二分区的待升级文件回滚为运行文件的状态。
[0208]
可选的,在第一预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为正常态;第一预设条件包括以下至少一项:成功将第二分区的待升级文件回滚为运行文件;将待升级文件写入第一分区,且在第一分区成功运行升级后的预设软件;将待升级文件写入第二分区失败;在第二预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为加载态;第二预设条件包括以下至少一项:终端设备下载待升级文件;或者,终端设备正在向第二分区写入待升级文件;在第三预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为激活态;第三预设条件包括:终端设备成功将待升级文件写入第二分区,或者,终端设备成功运行升级后的预设软件;在第四预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为提交态;第四预设条件包括:终端设备成功正在向第二分区写入待升级文件;在第五预设条件下,第二寄存器的值用于表示软件升级过程中的升级状态为回滚态;第五预设条件包括以下至少一项:终端设备未成功将待升级文件写入第二分区,或者,终端设备在第二分区重启终端设备失败;或者,终端设备未成功运行升
级后的预设软件。
[0209]
可选的,处理单元702,还用于:若第一寄存器和第三寄存器的值不相同,则将第二分区的待升级文件回滚为运行文件;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为加载态,则将第二寄存器的标记更新为正常态;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为提交态,则将待升级文件写入第一分区;若第一寄存器和第三寄存器的值相同,第二寄存器的值用于表示升级状态为回滚态,则将第二分区的待升级文件回滚为运行文件。
[0210]
可选的,处理单元702,具体用于:读取第一数据和第二数据;其中,第一数据为第二分区内运行文件中的第一数据量的数据;第二数据为待升级文件中第一数据量的数据;第一数据在运行文件中的读取顺序和第二数据在待升级文件中的读取顺序相同;确定第一数据和第二数据的数据内容是否相同;若不相同,则将第二数据写入第二分区内的运行文件中,并将第一数据替换为第二数据。
[0211]
可选的,该终端设备还可以包括存储模块,用于存储终端设备的程序代码和/或数据。
[0212]
其中,处理模块502可以是处理器或控制器。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包括一个或多个微处理器组合,dsp和微处理器的组合等等。通信模块501可以是收发电路或通信接口等。存储模块可以是存储器。当处理模块502为处理器,通信模块501为通信接口,存储模块为存储器时,本技术实施例所涉及的终端设备可以为图1所示终端设备。
[0213]
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将网络节点的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,模块和网络节点的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0214]
本技术实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当计算机执行该指令时,该计算机执行上述方法实施例所示的方法流程中的各个步骤。
[0215]
本技术的实施例提供一种包含指令的计算机程序产品,当指令在计算机上运行时,使得计算机执行上述方法实施例中的软件升级方法。
[0216]
其中,计算机可读存储介质,例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘。随机存取存储器(random access memory,ram)、只读存储器(read-only memory,rom)、可擦式可编程只读存储器(erasable programmable read only memory,eprom)、寄存器、硬盘、光纤、便携式紧凑磁盘只读存储器(compact disc read-only memory,cd-rom)、光存储器件、磁存储器件、或者上述的人以合适的组合、或者本领域数值的任何其他形式的计算机可读存储介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于特定用途集成电路(application specific integrated circuit,asic)中。在本发明实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指
令执行系统、装置或者器件使用或者与其结合使用。
[0217]
由于本发明的实施例中的装置、设备、计算机可读存储介质、计算机程序产品可以应用于上述方法,因此,其所能获得的技术效果也可参考上述方法实施例,本技术实施例在此不再赘述。
[0218]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何在本技术揭露的技术范围内的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应该以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1