一种嵌入式系统及其升级方法

文档序号:6603353阅读:161来源:国知局
专利名称:一种嵌入式系统及其升级方法
技术领域
本发明涉及嵌入式系统技术领域,尤其涉及一种嵌入式系统及其升级方法。
背景技术
嵌入式设备的功能主要通过软件来实现和扩展,随着嵌入式设备功能的不断完 善,应用的不断增加,需要对原有系统中的软件进行不断地升级。升级就是将新的软件写入 嵌入式设备的Flash (Flash EEPROM Memory,闪存,非易失的存储器),替代以前有缺陷或者 功能不完善的软件。现有嵌入式系统的升级方案通常为将升级文件做成镜像文件,并将嵌 入式系统中的非易失性存储器上原有的数据全部擦除后,再将镜像文件写到非易失性存储 器上,以达到刷新升级的目的。现有技术的缺陷在于对于以非易失性存储器为永久存储介质的嵌入式系统而 言,升级过程中一旦发生意外断电等异常情况时,系统将变得不可用,此时只能使用特殊的 设备对该系统的非易失性存储器进行完整的刷新后,才能使该系统继续使用。该方案即不 安全又使升级失败后重新恢复系统的工作变得费时费力,甚至在某些条件下根本无法实现 系统的恢复。

发明内容
本发明实施例的目的在于提出一种嵌入式系统升级方法,旨在解决现有技术嵌入 式系统升级过程中一旦发生意外断电等异常情况时,系统将变得不可用问题。为解决以上技术问题,本发明实施例提出一种嵌入式系统升级方法,包括以下步 骤非易失性存储器空间划分,将非易失性存储器空间划分为boot代码存储区、应用 代码启动标识区、第一应用代码区、第二应用代码区;加载并执行boot (启动)代码;根据所述应用代码启动标识区中的标识字的指示,启动所述指示的应用代码区中 的应用代码分配内存缓存区,下载升级代码到缓存中;根据应用代码启动标识区中的标识字的指示将升级代码烧录在所述标识字指示 之外的另一个的应用代码区;修改应用代码启动标志区中的标识位,设置新烧录升级代码文件为启动代码。本发明实施例的另一目的在于提出一种嵌入式系统,所述系统包括以下模块非易失性存储器分区模块用于存储boot代码、应用代码启动标识、应用代码等, 其划分为boot代码存储区,应用代码启动标识区,第一应用代码区,第二应用代码区;程序加载模块用于加载并执行boot代码,并根据应用程序启动判断模块的判断 结果决定启动并执行相应应用代码区中的应用代码;升级模块用于分配内存缓存区,下载升级代码到缓存区,根据升级应用代码区判断模块的判断结果在判断结果之外的另一应用代码区烧录升级代码并校验烧录的升级代 码;应用代码启动标识修改模块用于修改应用代码启动标志区中的标识位,设置新烧 录升级代码为启动代码。本发明的有益效果为应用代码区为两个交替使用区,在升级过程中即使发生异 常导致升级失败,仍然可以正常使用上一版本,系统比较稳定。


图1是本发明实施例的方法流程图;图2是本发明实施例的嵌入式系统功能模块图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图和实施例,对 本发明进行进一步详细说明,为了便于说明,仅示出了与本发明实施例相关的部分。应当理 解,此处所描写的具体实施例,仅仅用于解释本发明,并不用以限制本发明。本发明整体思路为将Flash空间划分为4个部分,boot代码存储区,应用代码启 动标志区,第一应用代码区和第二应用代码区,当需要升级文件时,先下载升级文件,然后 判断标识位决定升级文件的存放区是第一应用代码区还是第二应用代码区。如果当前使用 的代码在第一应用代码区,则升级文件放在第二应用代码区。如果升级文件正常,则修改标 识位,使它下次启动时启动第二应用代码区。升级不成功时,标识位不变,正常启动第一应 用代码区。同样,如果当前使用的代码在第二应用代码区,则升级文件放在第一应用代码 区。如果升级文件正常,则修改标识位,使它下次启动时启动第一区。升级不成功时,标识 位不变,正常启动第二应用代码区。图1是本发明实施例提供的嵌入式系统升级方法流程图。所述方法包括以下步 骤SlOl,Flash 空间划分;将Flash空间划分为4个部分,第一部分为boot代码存储区,第二部分为应用代码启动标识区,第三部分为第一应用代码区,第四部分为第二应用代码区。Boot代码 存储区保存用于系统启动的基本初始化和引导代码,即通常意义上的bootloader,由于 bootloader的主要功能是实现硬件系统的基本初始化和操作系统的加载,因此,为了保证 系统在任何情况下都可用,不允许对bootloader进行重新刷写的操作;应用代码启动标识 区用于指示启动第一应用代码区或第二应用代码区;应用代码区用于保存系统中的应用程 序代码。S102,烧录 Flash 文件;出厂时,首先烧录boot代码、应用代码启动标识、第三部分应用代码。S103,加载并执行boot代码;系统上电复位后,先自动加载boot代码,并开始执行boot代码。S104,加载并执行应用代码;Boot代码执行时首先读取应用代码启动标识区中的标识字,根据所述标识字决定启动Flash空间中第三或第四部分中的应用代码。在确定加载应用代码区中的应用代码后,boot加载所述应用代码,并跳到所述应用代码的执行入口,所述应用代码开始执行。S105,分配内存缓存区,下载升级代码到缓存区中;应用代码执行过程中,当收到通过网络发出升级软件的请求时,应用代码则在内 存中为升级代码分配缓存区并下载升级代码。S106,读取应用代码启动标志区中的标识字,根据所述标识字的指示将升级代码 烧录在所述标识字指示之外的另一个的应用代码区并校验烧录的升级代码文件;应用代码读取应用代码启动标志区中的标识字,根据所述标识字决定升级代码要 写入的第一应用代码区或第二应用代码区。若应用代码启动标志区中的标识字指示的当前 使用的应用代码区位第一应用代码区,则将升级代码烧录在第二应用代码区,若应用代码 启动标志区中的标识字指示的当前使用的应用代码区位第二应用代码区,则将升级代码烧 录在第一应用代码区,S107,修改应用代码启动标志区中的标识位,设置新烧录升级代码文件为启动代码。以下详细描述本发明的实现过程。先将Flash空间划分为4个部分,第一部分为boot代码存储区,第二部分为应 用代码启动标识区,第三部分为第一应用代码区,第四部分为第二应用代码区。Boot代 码存储区保存用于系统启动的基本初始化和引导代码,即通常意义上的bootloader,由于 bootloader的主要功能是实现硬件系统的基本初始化和操作系统的加载,因此,为了保证 系统在任何情况下都可用,不允许对bootloader进行重新刷写的操作;应用代码启动标识 区用于指示启动第一应用代码区或第二应用代码区;应用代码区用于保存系统中的应用程 序代码。系统上电复位后,先自动加载boot代码,并执行boot代码,根据应用代码启动标 识区中的标识字启动相应空间的应用代码,假设当前应用代码启动标识区中的标识字指示 为第一应用代码区,则启动所述第一应用代码区代码并跳到第一应用代码区的应用代码执 行入口,执行所述应用代码,若在执行应用代码的过程中,收到升级请求,则应用代码在内 存中分配代码缓存区,将升级代码下载到所述缓存区,读取应用代码启动标志区中的标识 字,当前应用代码启动标识区中的标识字指示第一应用代码区,将升级代码写入第二应用 代码区,若升级成功,则将应用代码启动标识区中的标识字修改为第二应用代码区,若升级 失败,则返回执行第一应用代码区中的代码。同样,若当前应用代码启动区中的标识字指示 第二应用代码区,将升级代码写入第一应用代码区,若升级成功,则将应用代码启动标识区 中的标识字修改为第一应用代码区,若升级失败,则返回执行第二应用代码区中的代码。这 样,两个应用代码区可循环使用。在本发明实施例方法中,系统关键部分boot代码只在烧录时写入,设备使用过程 中为只读,当异常操作时都不会导致boot被破坏。应用代码为两个交替使用区,在升级过 程中即使发生异常导致升级失败,仍然可以正常使用上一版本,系统比较稳定。图2是本发明实施例提供的嵌入式系统功能模块图。所述嵌入式系统包括Flash 分区模块、程序加载模块、升级模块、应用代码启动标识修改模块。其中程序加载模块包括 应用程序启动判断模块,升级模块包括内存缓存分配模块、下载模块、升级应用代码区判断 模块、烧录模块、校验模块。
Flash分区模块用于存储boot代码、应用代码启动标识、应用代码等,其分为4个部分,第一部分为boot代码存储区,第二部分为应用代码启动标识区,第三部分为第一应 用代码区,第四部分为第二应用代码区。Boot代码存储区保存用于系统启动的基本初始 化和引导代码,即通常意义上的bootloader,由于bootloader的主要功能是实现硬件系 统的基本初始化和操作系统的加载,因此,为了保证系统在任何情况下都可用,不允许对 bootloader进行重新刷写的操作;应用代码启动标识区用于指示启动第一应用代码区或 第二应用代码区;应用代码区用于保存系统中的应用程序代码。其中,boot代码、应用代码 启动标识和第一应用代码在出厂时已烧录完毕。程序加载模块用于加载并执行boot代码,并根据应用程序启动判断模块的判断 结果决定启动并执行相应的应用代码。其包括应用程序启动判断模块,用于读取应用代码 启动标识区中的标识字,根据所述标识字决定启动相应应用代码区中的应用代码。升级模块用于分配内存缓存区,下载升级代码到缓存区,根据升级应用代码区判 断模块的判断结果在判断结果之外的另一应用代码区烧录升级代码。所述升级模块包括内 存缓存分配模块、下载模块、升级应用代码区判断模块、烧录模块、校验模块。内存缓存分配 模块用于分配内存缓存区;下载模块用于下载升级代码到相应缓存区;升级应用代码区判 断模块用于读取应用代码启动标志区中的标识字,根据所述标识字决定在Flash空间中第 三或第四部分中的应用代码区烧录升级代码;烧录模块用于根据升级应用代码区判断模块 的判断结果在判断结果之外的另一应用代码区烧录升级代码;校验模块,用于校验烧录的 升级代码。。应用代码启动标识修改模块用于修改应用代码启动标志区中的标识位,设置新烧 录升级代码为启动代码。在本发明实施例中,系统关键部分boot代码只在烧录时写入,设备使用过程中为 只读,当异常操作时都不会导致boot被破坏。应用代码为两个交替使用区,在升级过程中 即使发生异常导致升级失败,仍然可以正常使用上一版本,系统比较稳定。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
一种嵌入式系统的升级方法,其特征在于,所述方法包括以下步骤非易失性存储器空间划分,将非易失性存储器空间划分为启动代码存储区、应用代码启动标识区、第一应用代码区、第二应用代码区;加载并执行启动代码;根据所述应用代码启动标识区中的标识字的指示,启动所述指示的应用代码区中的应用代码;分配内存缓存区,下载升级代码到缓存中;根据应用代码启动标识区中的标识字的指示将升级代码烧录在所述标识字指示之外的另一个的应用代码区;修改应用代码启动标志区中的标识位,设置新烧录升级代码文件为启动代码。
2.如权利要求1所述的嵌入式系统的升级方法,其特征在于,在所述“加载并执行启动 代码“之前还包括烧录启动代码、应用代码启动标识、第一应用代码区应用代码。
3.如权利要求1所述的嵌入式系统的升级方法,其特征在于,在所述“根据应用代码启 动标识区中的标识字的指示将升级代码烧录在所述标识字指示之外的另一个的应用代码 区”之后还包括校验烧录的升级代码。
4 如权利要求1所述的嵌入式系统的升级方法,其特征在于,在“根据应用代码启动标 识区中的标识字的指示将升级代码烧录在所述标识字指示之外的另一个的应用代码区”之 后还包括若升级失败,则正常启动所述应用代码启动标识区中的标识字指示的应用代码区 中的代码。
5.一种嵌入式系统,其特征在于,包括以下模块非易失性存储器分区模块用于存储启动代码、应用代码启动标识、应用代码等,其划分 为启动代码存储区,应用代码启动标识区,第一应用代码区,第二应用代码区;程序加载模块用于加载并执行启动代码,并根据应用程序启动判断模块的判断结果决 定启动并执行相应应用代码区中的应用代码;升级模块用于分配内存缓存区,下载升级代码到缓存区,根据升级应用代码区判断模 块的判断结果在判断结果之外的另一应用代码区烧录升级代码并校验烧录的升级代码;应用代码启动标识修改模块用于修改应用代码启动标志区中的标识位,设置新烧录升 级代码为启动代码。
6.如权利要求5所述的嵌入式系统,其特征在于,所述启动代码存储区保存用于系统 启动的基本初始化和引导代码,所述应用代码启动标识区用于指示启动第一应用代码区或 第二应用代码区,所述应用代码区用于保存系统中的应用程序代码。
7.如权利要求5所述的嵌入式系统,其特征在于,所述启动代码、应用代码启动标识和 第一应用代码在出厂时已烧录完毕。
8.如权利要求5所述的嵌入式系统,其特征在于,所述程序加载模块包括应用程序启 动判断模块,所述应用程序启动判断模块用于读取所述应用代码启动标识区中的标识字, 根据所述标识字决定启动相应应用代码区中的应用代码。
9.如权利要求5所述的嵌入式系统,其特征在于,所述升级模块包括内存缓存分配模 块、下载模块、升级应用代码区判断模块、烧录模块;内存缓存分配模块用于分配内存缓存 区;下载模块用于下载升级代码到相应缓存区;升级应用代码区判断模块用于读取应用代码启动标志区中的标识字,根据所述标识字决定在非易失性存储器空间中第一或第二应用 代码区烧录升级代码;烧录模块用于根据升级应用代码区判断模块的判断结果在判断结果 之外 的另一应用代码区烧录升级代码;校验模块,用于校验烧录的升级代码。
全文摘要
本发明提供一种嵌入式系统升级方法,所述方法包括以下步骤Flash空间划分,将Flash空间划分为boot代码存储区、应用代码启动标识区、第一应用代码区、第二应用代码区;加载并执行boot代码;根据所述应用代码启动标识区中的标识字的指示,启动所述指示的应用代码区中的应用代码。分配内存缓存区,下载升级代码到缓存中;根据应用代码启动标识区中的标识字的指示将升级代码烧录在所述标识字指示之外的另一个应用代码区;修改应用代码启动标志区中的标识位,设置新烧录升级代码文件为启动代码。在本发明中,应用代码区为两个交替使用区,在升级过程中即使发生异常导致升级失败,仍然可以正常使用上一版本,系统比较稳定。
文档编号G06F9/445GK101826027SQ20101018822
公开日2010年9月8日 申请日期2010年5月28日 优先权日2010年5月28日
发明者姜涛 申请人:深圳市融创天下科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1