一种嵌入式设备软件升级的方法

文档序号:6545872阅读:189来源:国知局
一种嵌入式设备软件升级的方法
【专利摘要】本发明公开了一种嵌入式设备软件升级的方法,包括(1)设备先读取Boot参数区域起始地址的值,根据该值的不同将升级文件以相对应的文件名写到文件系统区域,修改Boot参数区域起始地址的值;(2)当设备正常启动时转向步骤(3);当升错了软件转向步骤(4);(3)Boot程序读取Boot参数区域起始地址的值,根据该值的不同将文件系统区域中相对应的文件内容读入内存中,跳到内核入口地址开始执行;(4)打开串口调试工具重新上电,用户在等待期间按回车键进入用户命令模式;在用户命令模式加上显示及修改Boot参数区域起始地址的值命令。本发明的方法使得设备软件升级过程安全可靠,升级出现意外时提供了恢复方法。
【专利说明】一种嵌入式设备软件升级的方法
【技术领域】
[0001]本发明涉及一种嵌入式设备软件升级的方法,属于计算机【技术领域】。
【背景技术】
[0002]一般的嵌入式设备基本上都提供了软件升级的功能。为了更好的满足用户的需求,当设备的生产厂家在软件上新增某些功能特性或者是修复设备在使用过程中出现的某些问题等等,厂家就会发布新的软件给用户。用户可以通过软件升级的功能来更新设备的软件,从而使设备更加稳定可靠的运行。
[0003]虽然嵌入式设备提供了软件升级的功能,但是用户使用这个功能的时候可能会出现问题。很多用户对设备了解很少,负责维护管理设备的人员甚至都不知道他所管理的设备可以通过软件升级功能来更新设备的软件。用户对设备进行软件升级时可能会出现各种意外的情况,例如升错了软件导致设备坏了,或者升级过程中断电导致设备坏了。很多设备升级坏了以后必须要厂家的人员到现场才能解决问题,某些设备的停用还可能会对用户带来一定的经济损失。

【发明内容】

[0004]针对现有技术存在的不足,本发明目的是提供一种嵌入式设备软件升级的方法,使得嵌入式设备进行软件升级时更加安全可靠,升级过程出现意外也可以很容易对设备进行恢复。
[0005]为了实现上述目的,本发明是通过如下的技术方案来实现:
[0006]本发明的嵌入式设备软件升级的方法,嵌入式设备带有调试端口,包括以下几个步骤:
[0007](I)当设备进行软件升级时,设备先读取Boot参数区域起始地址的值,根据该值的不同将升级文件以相对应的文件名写到文件系统区域,然后修改Boot参数区域起始地址的值,完成升级;
[0008](2)当设备能够正常启动时,则转向步骤(3);当升错了软件导致设备启动不了时,则转向步骤⑷;
[0009](3)Boot程序读取Boot参数区域起始地址的值,根据该值的不同将文件系统区域中相对应的文件内容读入内存中,然后跳到内核入口地址开始执行,完成启动;
[0010](4)将调试端口通过调试线缆与电脑串口相连接,打开串口调试工具,重新给设备上电,Boot程序上电后会有几秒钟等待时间,用户在这期间按回车键进入用户命令模式;
[0011]然后,在用户命令模式加上两条命令,一个是显示Boot参数区域起始地址的值,一个是修改Boot参数区域起始地址的值。
[0012]上述Boot参数区域起始地址的值为I或2。
[0013]步骤(I)中,升级时,如果Boot参数区域起始地址的值为1,就将升级软件内容以文件名为B写到文件系统区域中,然后将Boot参数区域起始地址的值修改为2 ;[0014]升级时,如果Boot参数区域起始地址的值为2,就将升级软件内容以文件名为A写到文件系统区域中,然后将Boot参数区域起始地址的值修改为I ;
[0015]升级时,如果Boot参数区域起始地址的值既不是I也不是2,就将升级软件内容以文件名为A写到文件系统区域中,然后将Boot参数区域起始地址的值修改为I。
[0016]步骤(3)中,设备启动时,如果Boot参数区域起始地址的值为1,就将文件系统区域的文件A读取到内存中,然后跳到内核入口地址开始执行;
[0017]如果Boot参数区域起始地址的值为2,就将文件系统区域的文件B读取到内存中,然后跳到内核入口地址开始执行;
[0018]如果Boot参数区域起始地址的值既不是I也不是2,就将文件系统区域的文件A读取到内存中,然后跳到内核入口地址开始执行。
[0019]步骤(4)中,显示Boot参数区域起始地址的值的命令为s ;
[0020]修改Boot参数区域起始地址的值的命令为w〈param>, param的取值只能是I或2。
[0021]上述嵌入式设备上使用的是Flash存储介质。
[0022]本发明软件升级时根据Boot参数区域起始地址的值来写相对应的文件,然后修改Boot参数区域起始地址的值;启动时Boot程序根据Boot参数区域起始地址的值来读相对应的文件,然后跳到内核入口地址开始执行;在Boot程序的用户命令模式提供显示Boot参数区域起始地址值和修改Boot参数区域起始地址的值的功能。因此,本发明所提供的嵌入式设备软件升级的方法,使得嵌入式设备软件升级过程更加安全可靠,升级出现意外时也提供了恢复方法,避免了社会资源的浪费。
【专利附图】

【附图说明】
[0023]图1为本发明方法中Flash的存储示意图;
[0024]图2为本发明方法中软件升级的工作流程图;
[0025]图3为本发明方法中设备启动的工作流程图
[0026]图4为本发明方法Flash中Boot参数区域起始地址的值为I,文件系统区域中有文件A和文件B的存储示意图;
[0027]图5为图4升级完成后Boot参数区域起始地址的值为2,文件B的内容也被替换为升级软件的存储示意图;
[0028]图6为图4升级过程中断电Boot参数区域起始地址的值为I,文件B的内容也被替换为升级软件或升级软件的部分内容的存储示意图;
[0029]图7为图4升级过程中断电Boot参数区域起始地址的值不确定,文件B的内容也被替换为升级软件的存储示意图。
【具体实施方式】
[0030]为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合【具体实施方式】,进一步阐述本发明。
[0031]参见图1,目前大多数的嵌入式设备上都使用Flash存储介质,通常需要把Flash分区使用。Flash —般可以划分为3个区,第一个区存放Boot程序,第二个区存放Boot程序的参数,第三个区存放文件系统。Boot程序相当于PC机中的B10S,是设备加电后运行的第一段代码。简单地说,Boot程序就是在操作系统内核运行前运行的一段小程序,通过这段小程序,来初始化必要的硬件设备,创建内核需要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态,最终调用操作系统内核,起到引导和加载内核的作用。
[0032]参见图2、图3所示,本发明具体包括以下的步骤:
[0033]I)当设备进行软件升级时,设备先读取Boot参数区域起始地址的值。
[0034]如果该值为1,就将升级软件内容以文件名为B写到文件系统区域中,然后将Boot参数区域起始地址的值修改为2。
[0035]如果该值为2,就将升级软件内容以文件名为A写到文件系统区域中,然后将Boot参数区域起始地址的值修改为I。
[0036]如果该值既不是I也不是2,就将升级软件内容以文件名为A写到文件系统区域中,然后将Boot参数区域起始地址的值修改为I。
[0037]2)当设备启动时,等待用户输入,持续时间几秒钟,判断是否有键盘输入,如果有,则进入命令行模式;如果否,则Boot程序先读取Boot参数区域起始地址的值。
[0038]如果该值为1,就将文件系统区域的文件A读取到内存中,然后跳到内核入口地址开始执行。
[0039]如果该值为2,就将文件系统区域的文件B读取到内存中,然后跳到内核入口地址开始执行。
[0040]如果该值既不是I也不是2,就将文件系统区域的文件A读取到内存中,然后跳到内核入口地址开始执行。
[0041]3)为了解决设备软件升级时升错了软件导致设备启动不了的情况,需要在Boot程序的用户命令模式加上两条命令。一条命令是显示Boot参数区域起始地址的值,命令为s ;一条命令是修改Boot参数区域起始地址的值,命令为w〈param>, param的取值只能是I或者2。
[0042]下面具体说明一下设备软件升级过程,可能出现的意外情况,以及设备出问题时如何恢复。
[0043]参见图4所示,假定设备当前Boot参数区域起始地址的值为1,文件系统中有文件A和文件B。当设备上电时,Boot程序先读取Boot参数区域起始地址的值。由于该值为1,于是Boot程序就将文件A的内容读到内存中,然后跳到内核入口地址开始执行,设备就完成了启动过程。
[0044]当设备进行软件升级时,设备先读取Boot参数区域起始地址的值。由于该值为1,设备就将升级软件内容写到文件系统中,文件名为B,也就是说原来的文件B的内容被替换成了新的软件。然后再将Boot参数区域起始地址的值修改为2,设备就完成了软件升级过程。
[0045]参见图5所示,升级完成后Boot参数区域起始地址的值为2,文件B的内容也被替换为新的软件。设备再次重启时,Boot程序读取Boot参数区域起始地址的值,由于该值为2,于是Boot程序就将文件B的内容(就是新的软件)读到内存中,然后跳到内核入口地址开始执行,也就是说设备这时候运行的已经是新的软件。
[0046]如果在软件升级过程中出现了意外断电,这可能会出现几种情况:[0047](I)如果在写文件之前断电,则设备的一切和原来保持一致。重新上电以后设备就可以正常运行,而且运行的是老的软件。
[0048](2)如果在写文件过程中断电,则文件B的内容就被替换成了升级软件的一部分。参见图6所示,与图4相比设备改变的只有文件B,重新上电以后设备就可以正常运行,而且运行的是老的软件。
[0049](3)如果在写完文件之后修改Boot参数区域起始地址的值之前断电,则文件B的内容就被替换成了新的软件。参见图6所示,与图4相比设备改变的只有文件B,重新上电以后设备就可以正常运行,而且运行的是老的软件。
[0050](4)如果在修改Boot参数区域起始地址的值过程中断电,则文件B的内容就被替换成了新的软件。参见图7所示,与图4相比设备文件B被改变了。另外由于Flash的特性,要修改Boot参数区域起始地址的值,先要进行擦除操作,然后才能进行写操作。如果在擦除操作过程中断电,那么该地址的值就是一个不确定的值。如果在擦除操作完成后断电,那么该地址的值就变成了 255(该字节所有的位都是I)。如果在写操作过程中断电,那么该地址的值就是一个不确定的值。重新上电以后如果Boot参数区域起始地址的值不是2,设备就可以正常运行,而且运行的是老的软件;如果Boot参数区域起始地址的值是2,设备也可以正常运行,而且运行的是新的软件。
[0051](5)如果在修改Boot参数区域起始地址的值完成后断电,则文件B就被升级软件内容覆盖掉了。参见图5所示,Boot参数区域起始地址的值也修改了,这时实际上已经完成了升级过程。重新上电以后设备就可以正常运行,而且运行的是新的软件。
[0052]综合以上几种情况,可以看到升级过程中断电对设备没有任何影响,都可以正常启动运行。
[0053]如果软件升级过程中升错了软件,参见图5所示,文件B的内容就是一个错误的软件。设备再次重启时,Boot程序将文件B的内容读到内存中,然后跳到内核入口地址开始执行,因为文件B是一个错误的软件,所以设备就会启动不了。为了方便开发、调试和维护设备,大部分的嵌入式设备都会带有调试端口。这个时候用调试线缆将电脑串口和设备的调试端口连接起来,打开超级终端或者其它串口调试工具,重新给设备上电。Boot程序上电后会有几秒钟等待时间,用户可以在这期间按回车键进入命令行模式。在命令行模式下,执行命令s可以看到当前Boot参数区域起始地址的值为2。这时可以执行命令wl将Boot参数区域起始地址的值修改为I。重新上电以后设备就可以正常运行,而且运行的是老的软件。也就是说升级升错了软件以后可以通过设备的调试端口很容易的将设备恢复过来。
[0054]以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
【权利要求】
1.一种嵌入式设备软件升级的方法,嵌入式设备带有调试端口,其特征在于,包括以下几个步骤: (1)当设备进行软件升级时,设备先读取Boot参数区域起始地址的值,根据该值的不同将升级文件以相对应的文件名写到文件系统区域,然后修改Boot参数区域起始地址的值,完成升级; (2)当设备能够正常启动时,则转向步骤(3);当升错了软件导致设备启动不了时,则转向步骤⑷; (3)所述Boot程序读取Boot参数区域起始地址的值,根据该值的不同将文件系统区域中相对应的文件内容读入内存中,然后跳到内核入口地址开始执行,完成启动; (4)将所述调试端口通过调试线缆与电脑串口相连接,打开串口调试工具,重新给设备上电,Boot程序上电后会有几秒钟等待时间,用户在这期间按回车键进入用户命令模式; 然后,在用户命令模式加上两条命令,一个是显示Boot参数区域起始地址的值,一个是修改Boot参数区域起始地址的值。
2.根据权利要求1所述的嵌入式设备软件升级的方法,其特征在于, 所述Boot参数区域起始地址的值为I或2。
3.根据权利要求2所述的嵌入式设备软件升级的方法,其特征在于, 步骤(I)中,升级时,如果Boot参数区域起始地址的值为1,就将升级软件内容以文件名为B写到文件系统区域中,然后将Boot参数区域起始地址的值修改为2 ; 升级时,如果Boot参数区域起始地址的值为2,就将升级软件内容以文件名为A写到文件系统区域中,然后将Boot参数区域起始地址的值修改为I ; 升级时,如果Boot参数区域起始地址的值既不是I也不是2,就将升级软件内容以文件名为A写到文件系统区域中,然后将Boot参数区域起始地址的值修改为I。
4.根据权利要求3所述的嵌入式设备软件升级的方法,其特征在于, 步骤(3)中,设备启动时,如果Boot参数区域起始地址的值为1,就将文件系统区域的文件A读取到内存中,然后跳到内核入口地址开始执行; 如果Boot参数区域起始地址的值为2,就将文件系统区域的文件B读取到内存中,然后跳到内核入口地址开始执行; 如果Boot参数区域起始地址的值既不是I也不是2,就将文件系统区域的文件A读取到内存中,然后跳到内核入口地址开始执行。
5.根据权利要求4所述的嵌入式设备软件升级的方法,其特征在于, 步骤(4)中,显示Boot参数区域起始地址的值的命令为s ; 修改Boot参数区域起始地址的值的命令为w〈param>, param的取值只能是I或2。
6.根据权利要求1至5任意一项所述的嵌入式设备软件升级的方法,其特征在于, 所述嵌入式设备上使用的是Flash存储介质。
【文档编号】G06F9/445GK103995717SQ201410191622
【公开日】2014年8月20日 申请日期:2014年5月7日 优先权日:2014年5月7日
【发明者】梁志宝 申请人:南京国电南自电网自动化有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1