发明内容
针对相关技术中的问题,本发明提出一种嵌入式***的升级方法,解决了现有技术中,升级过程需要人工手动参与且升级人员需要具备一定专业知识,升级过程影响当前操作的问题。
本发明的技术方案是这样实现的:
根据本发明的一个方面,提供了一种嵌入式***的升级方法,该方法包括:
读取存储设备中镜像的镜像头信息,根据读取的镜像头信息确定镜像的***启动分区号;
根据***启动分区号确定待升级的分区;
读取待升级的分区的分区信息,根据待升级的分区所对应的分区镜像的版本号与外设中预先存储的升级镜像的版本号,确定是否对存储设备中的分区镜像进行升级;
在确定结果为是的情况下,将升级镜像同步到待升级的分区中的指定位置。
其中,在确定是否对存储设备中的分区镜像进行升级时,可以在外设中预先存储的升级镜像的版本号大于待升级的分区镜像所对应的镜像版本号的情况下,确定需要对存储设备中的分区镜像进行升级。
此外,在将升级镜像同步到待升级的分区中的指定位置后,还可以根据同步后的镜像对升级后的分区所对应的分区信息进行更新;
将镜像头信息中的***启动分区号更新为此次被升级的分区的分区号。
其中,需要更新的分区信息包括以下至少之一:
更新分区版本号、更新分区验证码、更新分区镜像的大小。
此外,在对分区信息进行更新后,重新启动存储设备,其中,重新启动的步骤包括:
读取升级完成后的镜像的镜像头信息,获取更新后的***启动分区号,并读取***启动分区号所对应分区的分区信息,根据该分区信息中的分区验证码对该分区的镜像进行校验;
当校验异常的情况下,重置本次升级完成后的镜像的镜像头信息,将***启动分区号更新为原启动分区所对应的分区号,并通过原启动分区启动存储设备。
根据本发明的另一方面,提供了一种嵌入式***的升级装置,该装置包括:
读取模块,用于读取存储设备中镜像的镜像头信息,还用于读取待升级的分区的分区信息;
第一确定模块,用于根据读取的镜像头信息确定镜像的***启动分区号,并根据***启动分区号确定待升级的分区;
第二确定模块,用于根据待升级的分区所对应的分区镜像的版本号与外设中预先存储的升级镜像的版本号,确定是否对存储设备中的镜像进行升级;
升级模块,用于在确定结果为是的情况下,将升级镜像同步到待升级的分区中的指定位置。
其中,该装置进一步包括:
更新模块,用于在将升级镜像同步到待升级的分区中的指定位置后,根据同步后的镜像对升级后的分区所对应的分区信息进行更新;
将镜像头信息中的***启动分区号更新为此次被升级的分区的分区号。
其中,更新模块更新的信息,包括以下至少之一:
更新分区版本号、更新分区验证码、更新分区镜像的大小。
其中,该装置进一步包括:
设备启动模块,用于在对分区信息进行更新后,重新启动存储设备,其中读取模块进一步用于在重新启动过程中,读取升级完成后的镜像的镜像头信息,获取更新后的***启动分区号,并读取***启动分区号所对应分区的分区信息;
验证模块,用于根据***启动分区号所对应分区的分区验证码对该分区的镜像进行校验。
其中,该装置进一步包括:
重置模块,用于当校验异常的情况下,重置本次升级完成后的镜像的镜像头信息,将***启动分区号更新为原启动分区所对应的分区号,并通过原启动分区启动存储设备。
本发明通过读取存储设备中镜像的镜像头信息来确定***启动时所需要使用的分区以及需要升级的分区,分区之间互不影响,升级过程不影响***正常运行情况,并且升级过程无需用户手动参与简单方便,增强了用户体验,提高了***的稳定性及可靠性。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
首先需要说明的是,每种镜像都包含一个镜像头信息,图1示出了镜像头的信息结构,其包括:
***启动分区号,用来标识***启动阶段所使用的分区。比如,***启动分区号为分区一,则***启动时需要从分区一种读取镜像;分区二则为待升级的分区号。
分区的信息,用来标识该分区的基本信息。
如图2所示,分区的信息至少包括以下至少之一:
分区镜像的名称、分区版本号、分区校验码、分区镜像起始位置及分区镜像的大小。
根据本发明的实施例,提供了一种嵌入式***的升级方法。
如图3所示,根据本发明实施例的嵌入式***的升级方法包括:
步骤S301,读取存储设备中镜像的镜像头信息,根据读取的镜像头信息确定镜像的***启动分区号;
步骤S303,根据***启动分区号确定待升级的分区;
步骤S305,读取待升级的分区的分区信息,根据待升级的分区所对应的分区镜像的版本号与外设中预先存储的升级镜像的版本号,确定是否对存储设备中的分区镜像进行升级;
步骤S307,在确定结果为是的情况下,将升级镜像同步到待升级的分区中的指定位置。
其中,在确定是否对存储设备中的分区镜像进行升级时,可以在外设中预先存储的升级镜像的版本号大于待升级的分区镜像所对应的镜像版本号的情况下,确定需要对存储设备中的分区镜像进行升级。
此外,在将升级镜像同步到待升级的分区中的指定位置后,还可以根据同步后的镜像对升级后的分区所对应的分区信息进行更新;将镜像头信息中的***启动分区号更新为此次被升级的分区的分区号。
这样,下次设备启动的时候将自动选择镜像为最新的版本进行启动。
其中,需要更新的分区信息包括以下至少之一:
更新分区版本号、更新分区验证码、更新分区镜像的大小。
另外,在对分区信息进行更新后,可以重新启动存储设备,其中,重新启动的步骤包括:
读取升级完成后的镜像的镜像头信息,获取更新后的***启动分区号,并读取***启动分区号所对应分区的分区信息,根据该分区信息中的分区验证码对该分区的镜像进行校验;
当校验异常的情况下,重置本次升级完成后的镜像的镜像头信息,将***启动分区号更新为原启动分区所对应的分区号,并通过原启动分区启动存储设备。
这样,即使在升级过程中发生突发状况导致升级失败,在下次启动的时候也不会影响***的正常运行,并且通过验证***是否升级成功,在验证异常的情况下,***采用原启动分区进行当前***的启动,并可以继续对原需要升级的分区进行升级,并不会影响当前***的运行状况,提高了***的稳定性和可靠性。
另外,本发明所提供的嵌入式***的升级方法既可以在***启动阶段时进行又可以在***运行阶段时进行,为了方便说明和理解,在下述实施例中,外设以SD卡为例进行说明,但需要说明的是,本发明中的外设不仅仅限于SD卡,还可以为其他外部存储器件。
图4示出了根据本发明实施例的***启动阶段时嵌入式***的升级方法的流程示意图,该***升级过程如下:
1、检测SD卡是否***,如果没有***,进入正常启动流程;
2、如果SD卡***,从SD卡中读取升级脚本,如果该文件不存在,则进入正常启动流程;
3、从升级脚本中获取镜像的版本号信息以及是否升级指令,通过升级指令可定制升级过程;
4、如果镜像的版本号小于设备内置镜像的版本号,则进入正常启动流程;
5、如果镜像的版本号大于设备内置镜像的版本号,则进入升级流程;
6、升级流程首先通过升级脚本中的升级指令将SD卡中的镜像读到内存中,再将内存中的镜像同步到设备内置的存储设备中,此过程通过指示灯的绿色闪烁标识;
7、升级成功,指示灯绿色常亮,***自动重启,指示灯灭。
图5示出了根据本发明实施例的***运行阶段时嵌入式***的升级方法的流程示意图,该***升级过程如下:
***正常运行:
1、后台监听进程通过SD卡的在位信号引脚来检测SD卡是否***,如果没有***,则***正常运行;
2、如果SD卡***,从SD卡中读取升级脚本,如果该文件不存在,则进入正常启动流程;
3、从升级脚本中获取镜像的版本号信息以及升级指令,通过升级指令可定制升级过程;
4、如果镜像的版本号小于设备内置镜像的版本号,则退出升级流程,***正常运行;
5、如果镜像的版本号大于设备内置镜像的版本号,则进入升级流程;
6、升级流程首先调整***的运行等级,进入安全升级模式,然后通过升级脚本中的升级指令将SD卡中的镜像读到内存中,再将内存中的镜像同步到设备内置的存储设备中,此过程通过指示灯的绿色闪烁标识;
7、升级成功,指示灯绿色常亮,***自动重启,指示灯灭。
下面详细介绍将SD卡中保存的升级镜像拷贝至待升级分区中的过程,其具体流程如下:
1、读取该镜像的镜像头信息,获取镜像头信息中的***启动分区号,根据***启动分区号即可得到待升级的分区号;
2、读取待升级的分区号所对应的分区信息,获取分区镜像的起始位置;
3、将镜像本身更新到指定的位置处;
4、更新待升级的分区号所对应的分区信息,刷新分区版本号、分区校验码、分区镜像的大小等信息;
5、将镜像头信息中的***启动分区号更新为此次被升级的分区号。
***升级后重启的过程如图6所示,其过程如下:
1、读取该镜像的镜像头信息,获取***启动分区号;
2、读取***启动分区号所对应的分区信息,获取分区镜像的起始位置以及分区镜像的大小等信息;
3、从指定位置处读取对应的镜像;
4、根据分区信息中的分区校验码对镜像进行校验;
5、如果校验正常,则使用最新镜像进行启动,升级过程结束;
6、如果校验异常,重置该镜像的镜像头信息,将***启动分区号更新为原启动分区的分区号,并使用该分区的镜像进行启动;
此外,***镜像升级后的重启流程也可以通过配置选择启动方式,默认配置是使用***启动分区的镜像进行启动,也可以动态配置为使用任一分区进行启动。
根据本发明的实施例,还提供了一种嵌入式***的升级装置。
如图7所示,根据本发明实施例的嵌入式***的升级装置包括:
读取模块71,用于读取存储设备中镜像的镜像头信息,还用于读取待升级的分区的分区信息;
第一确定模块72,用于根据读取的镜像头信息确定镜像的***启动分区号,并根据***启动分区号确定待升级的分区;
第二确定模块73,用于根据待升级的分区所对应的分区镜像的版本号与外设中预先存储的升级镜像的版本号,确定是否对存储设备中的镜像进行升级;
升级模块74,用于在确定结果为是的情况下,将升级镜像同步到待升级的分区中的指定位置。
其中,该装置还包括:
更新模块(未示出),用于在将升级镜像同步到待升级的分区中的指定位置后,根据同步后的镜像对升级后的分区所对应的分区信息进行更新;
将镜像头信息中的***启动分区号更新为此次被升级的分区的分区号。
其中,更新模块更新的信息,包括以下至少之一:
更新分区版本号、更新分区验证码、更新分区镜像的大小。
其中,该装置进一步包括:
设备启动模块(未示出),用于在对分区信息进行更新后,重新启动存储设备,其中读取模块71进一步用于在重新启动过程中,读取升级完成后的镜像的镜像头信息,获取更新后的***启动分区号,并读取***启动分区号所对应分区的分区信息;
验证模块(未示出),用于根据***启动分区号所对应分区的分区验证码对该分区的镜像进行校验。
其中,该装置进一步包括:
重置模块(未示出),用于当校验异常的情况下,重置本次升级完成后的镜像的镜像头信息,将***启动分区号更新为原启动分区所对应的分区号,并通过原启动分区启动存储设备。
综上所述,借助于本发明的上述技术方案,通过读取存储设备中镜像的镜像头信息来确定***启动时所需要使用的分区以及升级需要的分区,分区之间互不影响,升级过程不影响***正常运行情况,并且,当将版本最新的镜像同步到被升级的分区的位置后,对被升级的镜像进行更新,以保证下次自动重启的时候,***将运行的是最新的镜像版本,并且在重启过程中,通过对新升级完成的镜像进行验证处理,当验证出现异常的情况下,***将使用原先的分区镜像进行启动,从而使***可以照常启动不会影响用户的使用,而且整个升级过程简单方便,升级过程无需用户手动参与,增强了用户体验,稳定性及可靠性大大提高。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。