发明内容
本发明提供了一种对终端进行系统升级的方法,该方法能够缩短系统升级的时间。
本发明提供了一种终端,该终端能够缩短系统升级的时间。
一种对终端进行系统升级的方法,该方法包括:
恢复进程接收升级指令,查找升级包;
恢复进程启动升级进程,升级进程读取所述升级包,判断是否有升级脚本日志:
如果有,则从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志;否则,逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志。
可选地,所述恢复进程接收升级指令之前,该方法包括:
守护进程接收恢复指令,启动恢复进程。
可选地,所述解析升级包中所述最后解析完成的脚本之后的脚本后,该方法还包括:
判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除升级脚本日志;否则,执行所述将解析完成的脚本命令写入升级脚本日志的步骤。
可选地,所述逐个解析升级包中的脚本之后,该方法还包括:
判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除升级脚本日志;否则,执行所述将解析完成的脚本命令写入升级脚本日志的步骤。
一种终端,该终端包括恢复进程单元、升级进程单元和日志存储单元;
所述恢复进程单元,用于接收关于系统的升级指令,查找升级包,并向升级进程单元发送升级启动指令;
所述升级进程单元,用于接收升级启动指令,读取所述升级包,判断所述日志存储单元中是否存储有升级脚本日志:如果有,则从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志;否则,逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志;
所述日志存储单元,用于存储升级脚本日志。
可选地,所述升级进程单元包括读取子单元和判断子单元;
所述读取子单元,用于接收升级启动指令,读取所述升级包,传送给所述判断子单元;
所述判断子单元,用于判断所述日志存储单元中是否存储有升级脚本日志:如果有,则从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志;否则,逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志。
可选地,所述判断子单元包括第一判断模块,用于在解析升级包中所述最后解析完成的脚本之后的脚本后,判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除日志存储单元中存储的升级脚本日志;否则,将解析完成的脚本命令写入升级脚本日志。
可选地,所述判断子单元包括第二判断模块,用于在逐个解析升级包中的脚本后,判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除日志存储单元中存储的升级脚本日志;否则,将解析完成的脚本命令写入升级脚本日志。
可选地,所述终端为基于android系统的终端。
从上述方案可以看出,本发明中,升级进程读取升级包之后,先判断是否有升级脚本日志,如果有,则从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志;否则,逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志。本发明在解析升级包中的脚本时,将解析完成的脚本命令写入升级脚本日志,这样,即使在脚本解析过程中出现中断,也能对升级断点进行记忆,使得后续重新升级时能够从上一次升级中断的点开始升级,并保证系统升级完成,避免了升级过程的重复,缩短了升级时间。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明进一步详细说明。
发明人首先对现有对终端进行系统升级的方法流程进行了分析,其包括如图1所示的步骤:
步骤101,恢复进程接收升级指令,查找升级包。
这里同样以升级android系统进行说明。
启动android系统内核后,先调用守护进程;如果需要进入恢复(recovery)模式,则向守护(init)进程发送恢复指令,守护进程接收恢复指令,启动恢复进程;恢复模式为用以恢复终端出厂设置的模式,由守护进程启动。如果需要进行系统升级,用户可在恢复模式下选择升级选项,相当于向恢复进程发送升级指令;恢复进程接收升级指令后,查找升级包(update.zip),升级包可预先下载后存储在终端内。
步骤102,恢复进程启动升级进程。
升级进程用于进行系统升级,由恢复进程启动。升级进程常用update-binary表示。
步骤103,升级进程读取步骤101中查找的升级包,逐个解析升级包中的脚本。
升级包中包含多个脚本(updater-script),升级进程解析升级包中的updater-script,根据updater-script中的命令进行升级。升级进程就是用升级包中的文件去覆盖原有系统中的文件以达到升级的目的,updater-script就是执行覆盖时的复制、删除等操作的过程;升级的大部分时间都用于updater-scrip的解析中。
发明人在进行本发明的过程中发现,步骤103在解析升级包中脚本的过程中,难免会发生意外,例如断电等,使升级过程被中断,系统重启后需要重新执行图1的整个流程;且由于解析脚本占用了升级的大部分时间,导致系统升级花费了较长的时间。
本发明在解析升级包中的脚本时,将解析完成的脚本命令写入升级脚本日志进行记录,再结合升级脚本日志进行系统升级,以缩短系统升级的时间。参见图2,为本发明终端进行系统升级的方法示意性流程图,其包括以下步骤:
步骤201,恢复进程接收升级指令,查找升级包。
启动android系统内核后,先调用守护进程;如果需要进入恢复模式,则向守护进程发送恢复指令,守护进程接收恢复指令,启动恢复进程;恢复模式为用以恢复终端出厂设置的模式,由守护进程启动。如果需要进行系统升级,用户可在恢复模式下选择升级选项,相当于向恢复进行发送升级指令;恢复进程接收升级指令后,查找升级包,升级包可预先下载后存储在终端内。
步骤202,恢复进程启动升级进程。
升级进程用于进行系统升级,由恢复进程启动。升级进程常用update-binary表示。
步骤203,升级进程读取所述升级包,判断是否有升级脚本日志,如果是,则执行步骤204;否则执行步骤205。
升级进程在第一次进行系统升级时创建升级脚本日志,升级脚本日志为普通文本文件,可存储于隐藏分区,以避免被改写。
升级脚本日志由升级进程读写,升级进程逐个解析升级包中的脚本时,解析一条脚本成功就返回一条脚本命令及此脚本的编号(即执行的升级包中的第n条脚本,n为自然数),由脚本命令和脚本编号组成一条日志,顺序记录到升级脚本日志中。
步骤204,升级进程从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志。
升级包中包含多个脚本(updater-script),升级进程解析升级包中的updater-script,根据updater-script中的命令进行升级。升级进程就是用升级包中文件的去覆盖原有系统中的文件以达到升级的目的,updater-script就是执行覆盖时的复制、删除等操作的过程;升级的大部分时间都用于updater-scrip的解析中。
脚本命令与脚本一一对应,从升级脚本日志中确定出最后写入的脚本命令,与确定出的脚本命令对应的脚本便是上次升级时最后解析完成的脚本。
本步骤所述从升级脚本日志中确定上次升级时最后解析完成的脚本可具体包括:读取升级脚本日志中脚本编号最大的日志,根据该条日志包含的脚本命令确定对应的脚本,将确定的脚本作为上次升级时最后解析完成的脚本;
相应地,本步骤所述解析升级包中所述最后解析完成的脚本之后的脚本包括:读入升级包中的脚本,记录读入脚本的编号,该编号为从1开始记录的自然数;用升级脚本日志中的最大脚本编号与记录的脚本编号进行对比,假设最大脚本为M,如果读入脚本的编号为M,则从第M+1个脚本开始解析。在后续的解析过程中,同时将解析完成的脚本命令以及对应脚本的编号写入升级脚本日志中。
步骤205,升级进程逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志。
为了节省存储空间,还可在获知解析完升级包中所有脚本后,删除升级脚本日志。具体地,步骤204所述解析升级包中所述最后解析完成的脚本之后的脚本后,该方法还包括:
判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除升级脚本日志;否则,执行将解析完成的脚本命令写入升级脚本日志的步骤。
步骤205所述逐个解析升级包中的脚本之后,该方法还包括:
判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除升级脚本日志;否则,执行将解析完成的脚本命令写入升级脚本日志的步骤。
在解析升级包中脚本的过程中,难免会发生意外,例如断电等,使升级过程被中断,系统重启后需要重新整个升级流程;且由于解析脚本占用了升级的大部分时间,导致系统升级花费了较长的时间。本发明方案在下次重启升级时先查找之前保存的升级脚本日志,获取上次升级的断点,即最后完成升级的脚本,从断点开始解析后续的脚本,以达到衔接上次升级的过程。
参见图3,为本发明终端的结构示意图,该终端包括恢复进程单元、升级进程单元和日志存储单元;
所述恢复进程单元,用于接收关于系统的升级指令,查找升级包,并向升级进程单元发送升级启动指令;
所述升级进程单元,用于接收升级启动指令,读取所述升级包,判断所述日志存储单元中是否存储有升级脚本日志:如果有,则从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志;否则,逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志;
所述日志存储单元,用于存储升级脚本日志。
可选地,所述升级进程单元包括读取子单元和判断子单元;
所述读取子单元,用于接收升级启动指令,读取所述升级包,传送给所述判断子单元;
所述判断子单元,用于判断所述日志存储单元中是否存储有升级脚本日志:如果有,则从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志;否则,逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志。
可选地,所述判断子单元包括第一判断模块,用于在解析升级包中所述最后解析完成的脚本之后的脚本后,判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除日志存储单元中存储的升级脚本日志;否则,将解析完成的脚本命令写入升级脚本日志。
可选地,所述判断子单元包括第二判断模块,用于在逐个解析升级包中的脚本后,判断当前解析完成的脚本是否为升级包中的最后一个脚本,如果是,则删除日志存储单元中存储的升级脚本日志;否则,将解析完成的脚本命令写入升级脚本日志。
本发明所述终端可以是基于android系统的各种终端,如手机、平板(PAD)电脑、电视机顶盒等。
本发明实施例所描述的终端可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与计算机可读的媒介上,或以一个或多个指令或代码形式传输于计算机可读的媒介上。计算机可读媒介包括电脑存储媒介和便于使得让计算机程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的计算机可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊计算机、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何链接都可以被适当地定义为计算机可读媒介,所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在计算机可读媒介中。
本发明中,升级进程读取升级包之后,先判断是否有升级脚本日志,如果有,则从升级脚本日志中确定上次升级时最后解析完成的脚本,解析升级包中所述最后解析完成的脚本之后的脚本,并将解析完成的脚本命令写入升级脚本日志;否则,逐个解析升级包中的脚本,并将解析完成的脚本命令写入升级脚本日志。本发明在解析升级包中的脚本时,将解析完成的脚本命令写入升级脚本日志,这样,即使在脚本解析过程中出现中断,也能对升级断点进行记忆,使得后续重新升级时能够从上一次升级中断的点开始升级,并保证系统升级完成,避免了升级过程的重复,缩短了升级时间。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。