一种嵌入式系统及嵌入式系统重新启动的方法

文档序号:6332626阅读:323来源:国知局
专利名称:一种嵌入式系统及嵌入式系统重新启动的方法
技术领域
本发明涉及嵌入式系统技术领域,尤其涉及一种嵌入式系统及嵌入式系统重新启 动的方法。
背景技术
目前,嵌入式系统多采用ARM处理器,ARM (Advanced RISC Machines,高级RISC 微处理器)原本是一个公司的名字,现在也可认为是对一类微处理器的通称,还可以认为 是一种技术名称,即ARM技术。在嵌入式系统死机后,通常在硬件掉电或复位后重新启动 BOOT,然后再启动嵌入式系统版本。随着嵌入式系统的功能日益强大,代码量也越来越大, 这就导致嵌入式系统的重新启动需要很长时间,造成用户的体验效果很差。针对嵌入式系统,尤其是采用ARM处理器的嵌入式系统中如何提高重新启动的速 度,减小重启等待时间就成为需要解决的技术问题。

发明内容
本发明所要解决的技术问题在于,提供一种嵌入式系统及嵌入式系统重新启动的 方法,在无需硬件设备掉电或复位的情况下实现系统重新启动。为了解决上述问题,本发明提出了一种嵌入式系统的重新启动的方法,包括获取系统映像文件的可读写域的加载时起始地址及该可读写域的加载时数据;根据所述加载时起始地址将所述可读写域的系统代码数据写入内存,跳转指针到 系统入口指令地址。所述系统映像文件的可读写域的加载时起始地址及其整个地址范围,是位于内存 中除系统映像文件的只读域的运行时地址范围之外的地址。所述系统映像文件的可读写域的加载时数据是存储在固件存储器中;所述获取可 读写域的加载时数据的步骤中,先根据所述加载时起始地址与固件存储器中地址的对应关 系确定固件存储器中可读写域加载时数据的初始地址,并根据所述可读写域的加载时的域 长度从所述固件存储器中读取获得可读写域的加载时数据。所述可读写域的加载时的域长度是可读写域的运行时的域长度。所述获取的可读 写域的加载时数据,存储在除去系统映像文件的可读写域、只读域、初始化为零的域之外的 物理地址和逻辑地址一致的存储位置。本发明还提供一种嵌入式系统,包括内存模块,用于加载及运行系统映像文件的可读写域和只读域;固件存储模块,用于存储需加载的系统映像文件的可读写域的数据;可读写域操作模块,用于从内存模块获取系统映像文件的可读写域的加载时起始 地址及运行时的域长度,并从固件存储模块获取可读写域的加载时数据;启动控制模块,用于根据所述加载时起始地址将所述可读写域的加载时数据写入 内存模块,控制指针跳转至系统入口指令地址。
3
所述内存模块中,系统映像文件的可读写域的加载时起始地址及其整个地址范 围,是位于内存中除系统映像文件的只读域的运行时地址范围之外的地址。所述嵌入式系统进一步包括可读写域的加载时数据存储单元,位于除去系统映 像文件的可读写域、只读域、初始化为零的域之外的物理地址和逻辑地址一致的存储位置, 用于存储所述获取的可读写域的加载时数据。本发明可以由软件来实现嵌入式系统的重新启动,无需硬件设备掉电或复位即可 使系统从开始地址重新运行,重新启动速度快。这样节约了版本代码的搬移时间,并且整个 系统重新启动的过程不需要用户的附加操作,可以实现系统重启而不被用户察觉到。


图1是映像文件移动的示意图;图2是本发明实施例中实现系统重新运行的流程图;图3是本发明实施例中可不掉电或复位实现重新启动的嵌入式系统示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,以下结合附图对本发明作进一步 地详细说明。目前嵌入式系统在重新启动时需要硬件设备掉电或复位,这就造成启动缓慢用户 体验差的问题。本发明针对ARM系统,提出一种无需硬件设备掉电或复位而实现系统重新 启动的技术方案,即在系统运行时,通过恢复系统代码的运行环境到加载时的初始状态,从 而在不进行硬件掉电和复位的情况下实现系统的重新运行。在采用ARM处理器的嵌入式系统中,ARM映像文件是一个层次性结构的文件,ARM 映像文件中包括域(region)、输出段(output section)和输入段(input section)。输入段(input section)中包含了 4类内容代码、已经初始化的数据、未经初 始化的存储区域、内容初始化成0的存储区域。每个输入段有相应的属性,可以为只读的 (R0)、可读写的(RW)以及初始化成0的(ZI)。ARM连接器根据各输入段的属性将这些输入 段分组,再组成不同的输出段以及域。一个输出段(output section)中包含了一系列的具有相同的只读的(RO)、可读 写的(RW)以及初始化成0的(ZI)属性的输入段。输出段的属性与其中包含的输入段的属 性相同。在一个输出段内部,各输入段是按照一定的规则排序的。—个域(region)中包含了多个输出段,其中各输出段的属性各不相同。各输出段 的排列顺序是由其属性决定的。其中,RO属性的输出段排在最前面,其次是RW属性的输出 段,最后是ZI属性的输出段。同时,ARM映像文件的各组成部分在存储系统中的地址有两种一种是在映像文 件位于存储器中时的地址,也就是该映像文件开始运行之前的地址,称为加载时地址 ’另一 种是在映像文件运行时的地址,称为运行时地址。之所以有这两种地址,是因为映像文件在 运行时,其中的有些域可以移动到新的存储区域。如图1所示,显示了映像文件移动的示意 图,其中,RO段的加载时地址和运行时地址是相同的,都是位于RAM的0x0地址处;RW段的 加载时地址为RAM的0x300000地址处,Rff段的运行时地址为RAM的0x500000地址处;ZI段在加载时还不存在,ZI段的运行时地址为RAM的OxAOOOOO地址处。同时,ARM连接器还定义了一些符号,在生成映像文件时,用它们来代表映像文件 中各域的起始地址以及存储区域界限、各输出段的起始地址以及存储区域界限、各输入段 的起始地址以及存储区域界限。比如,Load$$region_name$$Base代表域region_name加 载时的起始地址;Image$$region_name$$Base代表域region_name运行时的起始地址。这 些符号可以在代码中引用。本发明的一种嵌入式系统的重新启动的方法,包括获取系统映像文件的可读写 域的加载时起始地址及该可读写域的加载时数据;根据所述加载时起始地址将所述可读写 域的加载时数据写入内存,写入后调整指针到系统代码的入口指令地址。所述系统映像文件的可读写域的加载时起始地址及其整个地址范围,位于内存中 除系统映像文件的只读域的运行时地址范围之外的地址。所述系统映像文件的可读写域的加载时数据是存储在固件存储器(例如FLASH存 储器)中。所述获取可读写域的加载时数据的步骤中,是根据所述加载时起始地址以及所述 可读写域的运行时的域长度,从所述固件存储器中读取获得,获取数据时是根据加载时起 始地址开始读取,所述加载时起始地址是个偏移地址,要加上镜像在固件存储器(flash) 中的存储地址。具体地,可以通过符号Load$$ER_RW$$Base获得可读写域ER_RW的加载时起 始地址;而可读写域的加载时的域长度因在加载时不能获得,可采用运行时的域长度代替, 可以通过符号Image$$ER_RW$$Length获得可读写域ER_RW的运行时的域长度。所述获取的可读写域的加载时数据,存储于除去系统映像文件的可读写域、只读 域、初始化为零的域之外的物理地址和逻辑地址一致的存储位置。以ARM系统为例,首先,需要把ARM系统映像文件恢复到加载初始状态,然后从系 统代码的入口指令(通常是第一条指令)开始执行就实现了系统的重新启动。由于系统映 像文件的各域的起始地址和长度可以通过ARM连接器符号获得,那么,只要保证ER_RW域 (可读写域)的加载时地址不和ER_R0域(只读域)运行时的地址空间有重合,即位于内存 中除ER_R0域(只读域)运行时的地址之外的地址,就可以加载初始ER_RW域数据到ER_RW 域加载时起始地址,清除ER_ZI域(全0域)运行时地址空间的数据来恢复系统运行环境 到加载初始状态。如果使用了地址映射配置文件,就使用该文件规定的各域的名称即可。如图2所示,在ARM系统中,实现嵌入式系统重亲启动的处理流程包括步骤201 通过符号Load$$ER_RW$$Base获得ER_RW域的加载时起始地址并保存 该加载时起始地址;其中,该加载时起始地址不能保存在变量中,否则后面清除ER_RW域数据时会被 清掉,可把该加载时起始地址保存在ER_R0、ER_RW和ER_ZI域以外的地址(比如ARM与DSP 交互的双端口 RAM中),这个地址的选择由硬件和操作系统决定;步骤202 获得ER_RW域的长度,由于加载时ER_RW域的域长度无法获得,可以使 用运行时的域长度代替加载时的域长度,可以通过符号Image$$ER_RW$$Length获得ER_RW 域的运行时的域长度。其中,运行时的域长度会大于加载时的域长度,按此长度多读出来的数据会被ER_ ZI域覆盖或者并不使用,读出来的ER_RW域数据要放到除去ER_RW、ER_R0和ER_ZI运行域
5以外,并且物理地址和逻辑地址一致的位置,这个地址的选择由硬件和操作系统决定,比如 可以是在操作系统中配置物理地址和逻辑地址一致的SDRAM地址;步骤203 根据ER_RW域的加载时起始地址及ER_RW域的长度从固件存储器 (FLASH存储器)获得加载时数据。由于固件存储器存储有系统代码及初始数据,其中,初始数据中的加载时数据的 地址可以采用与可读写域相同的地址,也可以采用具有一定对应关系的地址,这样在硬件 掉电或复位重新启动加载时只要从初始地址按照加载长度获取对应的初始数据加载到可 读写域即可。反之,本发明中,可按照加载时初始地址与存储器中的对应关系,获得固件存储器 中存储的可读写域的初始数据的初始地址,在确定固件存储器中的初始地址之后,再根据 该域运行时的域长度,从固件存储器中读出ER RW域的数据即可。其中,所读取出的数据不能使用ER_RW域中的变量保存,这是因为变量的值可能 会在搬移代码的过程中被修改,而且搬移代码时可能需要关闭微处理器MMU,这与操作系统 的配置相关;读出来的ER_RW域数据要放到除去ER_RW、ER_R0和ER_ZI运行域以外,并且物 理地址和逻辑地址一致的位置,这个地址的选择由硬件和操作系统决定,比如可以是在操 作系统中配置物理地址和逻辑地址一致的SDRAM地址。步骤204 把读出的ER_RW域数据移到该域在内存(RAM)中的加载时的域地址;步骤205 数据都搬移到指定的地址后,调整运行指针,跳转到系统代码的入口指 令地址,例如可把程序计数器的值置为系统代码第一条指令(通常为入口指令)的地址;这 样,由于已经完成了可读写域数据的初始化,此时再跳转到入口指令处执行,即实现了系统 重新启动。相比现有技术,则省去了硬件掉电或复位时所需经历的BOOT启动过程。如图3所示,还提供了 一种嵌入式系统,可无需掉电或复位而实现重新启动,该嵌 入式系统包括内存模块,用于加载及运行系统映像文件的可读写域和只读域;所述内存模块中 加载时及运行时各个域的地址分配可参见图1所示的示意图。固件存储模块,用于存储需加载的系统映像文件的可读写域的数据;可读写域操作模块,用于从内存模块获取系统映像文件的可读写域的加载时起始 地址及运行时的域长度,并从固件存储模块获取可读写域的加载时数据;启动控制模块,用于根据所述加载时起始地址将所述可读写域的加载时数据写入 内存模块,控制指针跳转至系统入口指令地址。所述内存模块中,系统映像文件的可读写域的加载时起始地址及其整个地址范 围,是位于内存中除系统映像文件的只读域的运行时地址范围之外的地址。所述嵌入式系统进一步包括可读写域的加载时数据存储单元,位于除去系统映 像文件的可读写域、只读域、初始化为零的域之外的物理地址和逻辑地址一致的存储位置, 用于存储所述获取的可读写域的加载时数据。本发明的一种嵌入式系统及其重新运行的方法,无需硬件设备掉电或复位即可使 系统从开始地址重新运行,这样节约了版本代码的搬移时间,并且整个系统重新启动的过 程不需要用户的附加操作。可以实现系统重启而不被用户察觉到。以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、 等同替换、改进等,均应包含在本发明的权利要求范围之内。
权利要求
一种嵌入式系统的重新启动的方法,包括获取系统映像文件的可读写域的加载时起始地址及该可读写域的加载时数据;根据所述加载时起始地址将所述可读写域的系统代码数据写入内存,跳转指针到系统入口指令地址。
2.如权利要求1所述的方法,其特征在于,所述系统映像文件的可读写域的加载时起始地址及其整个地址范围,是位于内存中除 系统映像文件的只读域的运行时地址范围之外的地址。
3.如权利要求1所述的方法,其特征在于,所述系统映像文件的可读写域的加载时数据是存储在固件存储器中; 所述获取可读写域的加载时数据的步骤中,先根据所述加载时起始地址与固件存储器 中地址的对应关系确定固件存储器中可读写域加载时数据的初始地址,并根据所述可读写 域的加载时的域长度从所述固件存储器中读取获得可读写域的加载时数据。
4.如权利要求3所述的方法,其特征在于,所述可读写域的加载时的域长度是可读写域的运行时的域长度。
5.如权利要求3所述的方法,其特征在于,所述获取的可读写域的加载时数据,存储在除去系统映像文件的可读写域、只读域、初 始化为零的域之外的物理地址和逻辑地址一致的存储位置。
6.一种嵌入式系统,包括内存模块,用于加载及运行系统映像文件的可读写域和只读域; 固件存储模块,用于存储需加载的系统映像文件的可读写域的数据; 可读写域操作模块,用于从内存模块获取系统映像文件的可读写域的加载时起始地址 及运行时的域长度,并从固件存储模块获取可读写域的加载时数据;启动控制模块,用于根据所述加载时起始地址将所述可读写域的加载时数据写入内存 模块,控制指针跳转至系统入口指令地址。
7.如权利要求6所述的嵌入式系统,其特征在于,所述内存模块中,系统映像文件的可读写域的加载时起始地址及其整个地址范围,是 位于内存中除系统映像文件的只读域的运行时地址范围之外的地址。
8.如权利要求6所述的嵌入式系统,其特征在于,所述嵌入式系统进一步包括 可读写域的加载时数据存储单元,位于除去系统映像文件的可读写域、只读域、初始化为零的域之外的物理地址和逻辑地址一致的存储位置,用于存储所述获取的可读写域的加 载时数据。
全文摘要
本发明公开了一种嵌入式系统及嵌入式系统重新启动的方法。用于在无需硬件设备掉电或复位的情况下实现系统重新启动。首先获取系统映像文件的可读写域的加载时起始地址及该可读写域的加载时数据;再根据所述加载时起始地址将所述可读写域的系统代码数据写入内存,跳转指针到系统入口指令地址。本发明可由软件实现嵌入式系统的重新启动,无需硬件设备掉电或复位即可使系统从开始地址重新运行,节约了版本代码的搬移时间,重新启动速度快。
文档编号G06F9/445GK101950256SQ20101029101
公开日2011年1月19日 申请日期2010年9月15日 优先权日2010年9月15日
发明者乔磊, 王霞 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1