一种远程升级方法及嵌入式系统
技术领域
本发明涉及通信领域,具体涉及一种远程升级方法及一种嵌入式系统。
背景技术
现有的嵌入式终端设备为了便于设备远程维护管理,都设有远程程序在线升级功能,可通过网络对设备程序进行定期或不定期的升级。现有的嵌入式终端的操作系统和程序是编译在一起的,在远程升级过程中,升级程序通过网络下载到终端设备,并覆盖现有程序,升级完成后远程重启终端,终端重启后即可运行升级后的程序,完成设备程序更新。远程升级方式具有很大的风险,如果在升级过程中终端断电或者升级网络出现错误断开,会导致程序升级中断而失败,而原有的程序又在升级过程中被未升级完整的程序覆盖,而操作系统和程序是编译在一起的,导致终端无法运行,而程序的远程升级维护功能作为程序自身的一部分也遭到了破坏,自然也无法再继续使用,最终只能去现场修复,耗时耗力,升级成本和维护成本高。
为了解决上述问题,现有嵌入式终端的软件都是采取双备份方式,在远程升级时先将升级之前的编译在一起的操作系统和程序进行备份,在升级过程中即使出错也不会破坏备份的原有程序,保证了远程升级的安全性,即使在升级过程中遇到终端断电或者升级网络出现错误导致程序升级中断,终端可以启动备份的操作系统加载运行备份的程序,且在系统恢复后可以继续进行远程终端维护。但由于每次升级时,都需要将编译在一起的操作系统和程序进行备份,而编译在一起的操作系统和程序所占用的存储空间较大,因此现有的嵌入式终端需额外设置一个较大的存储空间用于存储备份的操作系统和程序,造成了存储资源浪费,导致嵌入式终端的制造成本上升,也增加了嵌入式终端的升级成本。
发明内容
本发明要解决的主要技术问题是,提供一种远程升级方法及一种嵌入式系统,避免程序升级时将整个操作系统和原有程序进行整体备份,减少嵌入式系统所需的备份存储空间,进而降低嵌入式系统的成产和升级的成本。
为解决上述技术问题,本发明提供一种远程升级方法,包括:
系统启动,系统启动模块初始化系统启动所需的最小系统,判断程序是否升级成功;
如经判断升级成功,系统启动模块启动程序加载模块进行程序的加载,完成此次系统的启动;
如经判断升级失败,系统启动模块根据程序升级之前的网络启动参数启动程序升级维护模块实现程序的远程升级维护,并启动程序加载模块对升级前的程序进行加载,完成此次系统的启动。
在本发明的一种实施例中,所述程序升级维护模块完成程序的升级后,在下一次系统启动时加载升级后的程序。
在本发明的一种实施例中,所述方法还包括将所述系统启动模块和程序升级维护模块设置于同一启动模块BootRom上。
在本发明的一种实施例中,所述方法还包括将所述系统启动模块和程序升级维护模块分别设置于不同的启动模块BootRom上。
本发明还提供了一种嵌入式系统,包括:
系统启动模块:用于初始化最小系统;还用于判断程序升级是否成功;如成功,则启动程序加载模块;否则,启动程序升级维护模块,并启动程序加载模块;
程序升级维护模块:用于实现程序的远程升级维护;
程序加载模块:用于加载程序。
在本发明的一种实施例中,所述系统启动模块在启动所述启动程序升级维护模块和程序加载模块之前,还用于收集网路启动参数,所述系统启动模块根据收集到的网路启动参数启动所述程序升级维护模块和程序加载模块。
在本发明的一种实施例中,当判断为升级成功时,系统启动模块用于收集升级成功后新的网络参数,当判断升级失败时,系统启动模块用于收集升级之前的网络参数,
在本发明的一种实施例中,所述系统启动模块和程序升级维护模块设置于同一启动模块BootRom上。
在本发明的一种实施例中,所述系统启动模块和程序升级维护模块分别设置于不同的启动模块BootRom上。
本发明的有益效果是:在本发明中,系统启动时,嵌入式系统的系统启动模块完成系统启动所需的最小系统的初始化,判断程序是否升级成功;如经判断升级成功,系统启动模块启动程序加载模块进行程序的加载,完成此次系统的启动;否则,系统启动模块根据程序升级之前的网络启动参数启动程序升级维护模块继续相关程序的升级,并根据程序升级之前的网络启动参数启动程序加载模块进行程序的加载,完成此次系统的启动。即本发明通过将程序的远程升级维护功能模块简化独立出来由程序升级维护模块单独控制实现,并不将其与程序编译在一起,避免在程序的升级过程中将其覆盖;同时将操作系统也独立出来由系统启动模块控制,而并不将其与程序编译在一起,保证了操作系统的独立性,因而保证了系统启动时所需要的最小系统在程序升级过程中不会因为升级失败而被破坏。因此,在程序远程升级过程中,即使由于断电或网络错误导致升级失败,也不会对系统启动时所需要的最小系统和远程升级维护功能模块造成破坏,保证了程序远程升级的可靠性和安全性,同时在升级过程中也不需要将整个操作系统和原有程序进行整体备份,减少了嵌入式系统所需的备份存储空间,进而降低了嵌入式系统的成产和升级的成本。
附图说明
图1为本发明一种实施例的嵌入式系统的系统框图;
图2为本发明一种实施例的升级方法流程示意图;
图3为本发明另一种实施例的嵌入式系统平台的结构框图;
图4为本发明另一种实施例的嵌入式系统平台的结构框图。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
实施例一:
请参见图1,本例中的嵌入式系统包括系统启动模块、程序升级维护模块、以及程序加载模块,其中:
系统启动模块用于启动系统时,对系统所需要的最小系统进行初始化;还用于判断程序升级是否成功;如经判断程序升级成功,则启动程序加载模块加载程序;否则,启动程序升级维护模块,对程序的远程升级进行维护,并启动程序加载模块,以加载升级前的程序,完成系统的启动;
本例中的启动程序升级维护模块则用于实现程序的远程升级维护;
本例中的程序加载模块则用于加载程序。
即本例中程序的远程升级维护功能模块简化独立出来由程序升级维护模块单独控制实现,并不将其与程序编译在一起,避免在程序的升级过程中将其覆盖;同时将操作系统也独立出来由系统启动模块控制,而并不将其与程序编译在一起,保证了操作系统的独立性,因进而保证了系统启动时所需要的最小系统在程序升级过程中不会因为升级失败而被破坏。因此,在程序远程升级过程中,即使由于断电或网络错误导致升级失败,也不会对系统启动时所需要的最小系统和远程升级维护功能模块造成破坏,保证了程序远程升级的可靠性和安全性,同时在升级过程中也不需要将整个操作系统和原有程序进行整体备份,减少了嵌入式系统所需的备份存储空间,进而降低了嵌入式系统的成产和升级的成本。
本例中的嵌入式系统可为一般意义上的嵌入式终端,也可为包括一般意义上的嵌入式终端的其他装置。
本例中判断程序升级是否成功的方法可由多种,例如,可通过设置升级标志来标识升级是否成功,然后读取该标志即可;或者直接判断程序是否存在,如果存在,则表示该程序升级成功,直接加载该程序;否则,表明该程序在上一次升级过程中未升级成功而遭到破坏,此时则加载未升级之前的程序,并启动启动程序升级维护模块对该程序的远程升级进行维护。本例中的程序可为嵌入式系统中的主程序。
本例中的系统启动模块在启动程序升级维护模块和程序加载模块之前,还用于收集网路启动参数,然后根据收集到的网路启动参数启动程序升级维护模块和程序加载模块,具体为:当判断程序远程升级成功时,系统启动模块用于收集升级成功后新的网络参数,根据收集的新的网络参数启动程序加载模块加载升级后的程序,完成该程序的整个启动;当判断程序远程升级失败时,系统启动模块用于收集升级之前的网络参数,根据收集的升级之前的网络参数启动程序加载模块加载原有的程序,完成该程序的整个启动。
值得注意的是,本例中的独立于程序之外的系统启动模块和程序升级维护模块可设置于同一启动模块BootRom上,也可分别设置于不同的启动模块BootRom上。例如,可将系统启动模块的操作系统和程序升级维护模块的远程升级维护功能烧写到一个Flash中,且此Flash具有写保护,因此烧写在里面的操作系统和远程升级维护功能在程序的远程升级过程中不会被遭到破坏,而在系统启动时,该Flash中的系统启动模正常启动操作即可,而将远程升级维护功能合并到与操作系统相同的BootRom中,是对原有BootRom的改进和补充,升级维护功能作为一个独立的系统任务由BootRom启动,对原有的BootRom中的系统启动模块启动系统的过程没有任何影响。
因此,本例中改造后的BootRom(即将操作系统和远程升级维护功能烧写到一个Flash中)和原有的BootRom(即操作系统单独烧写到一个Flash中)一样,依然负责对系统的初始化和主程序的加载,只是在主程序受到破坏或由于上次升级维护失败导致的加载不成功时,自动启动远程升级维护功能,将其作为一个单独任务运行,等待远端用户的升级维护。BootRom原有的功能和远程升级维护功能并列运行,不受任何影响,依然可以通过本地串口对嵌入式系统进行控制和一些简单的系统功能调试。
当然,本例中也可将操作系统和远程升级维护功能分别烧写到一个具有写保护功能的Flash中,避免在程序的远程升级过程中遭到破坏。在系统启动时,烧写有操作系统的BootRom依然负责对系统的初始化和主程序的加载,只是在主程序受到破坏或由于上次升级维护失败导致的加载不成功时,自动烧写启动远程升级维护功能的BootRom,将其作为一个单独任务运行,等待远端用户的升级维护,此时二则并列运行,不受任何影响。
下面结合上述系统对本发明中的远程升级方法做进一步说明,请参见图2,本例中的远程升级方法包括以下步骤:
系统启动,系统启动模块初始化系统启动所需的最小系统后,判断程序是否升级成功;
如经判断升级成功,系统启动模块启动程序加载模块对升级后的程序进行加载,完成此次系统的启动;
如经判断升级失败,系统启动模块根据程序升级之前的网络启动参数启动程序升级维护模块实现程序的远程升级维护,并启动程序加载模块对升级前的程序进行加载,完成此次系统的启动。
本例中本例中系统启动模块根据程序升级之前的网络启动参数启动程序升级维护模块和启动程序加载模块并无严格的时间顺序。程序升级维护模块提醒远程终端用户实现程序的升级后,在下一次系统启动时加载升级后的程序。
实施例二:
为了更好的理解本发明,下面对结合一个具体的嵌入式系统平台和一个完整的系统启动、记载流程对本发明做进一步说明。
请参见图3,图3中的系统启动模块和程序升级维护模块可设置于同一启动模块BootRom上,称之为具有网络在线升级维护功能的独立BootRom启动模块(下面简称BootRom),主程序则存储在另一单独的Flash中。系统上电启动复位,BootRom初始化最小系统后,判断程序是否升级成功,具体可通过判断主程序是否存在来判断是否升级成功,如升级成功,则启动程序加载模块将程序加载到RAM内存中进行运行,否则,启动程序升级维护模块实现对主程序的远程升级维护,并启动程序加载模块加载升级之前的原有程序到内存中运行,具体如下,请参见图4:
401:系统上电,开始启动;
402:CPU执行指令跳转到启动BootRom;
403:BootRom启动模块进行CPU启动所需要的最小系统的初始化;
404:BootRom判断主程序升级是否成功,具体为通过判断主程序存在标志是否存在,如是,转至步骤405,否者,转至步骤412;
405:BootRom收集主程序升级后的网络启动参数,并根据收集的参数启动程序加载模块,将主程序加载到内存中,然后跳转至主程序入口;
406:主程序启动,读取升级后的网络启动参数,按读取的网络启动参数初始化自己,保证与BootRom的网络配置一致;
407:主程序启动自身的在线升级模块;
408:主程序判断自身所需的子模块是否存在,如存在,则转至步骤410,否则,转至步骤409;
409:提示用户对所需的模块进行在线升级,然后转至步骤408;
410:主程序继续加载启动所需的各个子模块;
411:系统启动完毕,开始运行,并在运行过程中检测是否有程序需要更新。
412:BootRom收集主程序升级前的网络启动参数,根据收集的参数启动程序升级维护模块实现对主程序的远程升级维护,提示、等待远程用户终端升级该主程序;
413:远程终端升级该主程序。
414:BootRom根据步骤412收集的参数启动程序加载模块,将升级之前的原有主程序加载到内存中,完成此处系统的启动。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。