CN104407886B - 一种引导与目标分离的嵌入式软件固化、加载方法 - Google Patents
一种引导与目标分离的嵌入式软件固化、加载方法 Download PDFInfo
- Publication number
- CN104407886B CN104407886B CN201410617038.3A CN201410617038A CN104407886B CN 104407886 B CN104407886 B CN 104407886B CN 201410617038 A CN201410617038 A CN 201410617038A CN 104407886 B CN104407886 B CN 104407886B
- Authority
- CN
- China
- Prior art keywords
- loaded
- program
- memory space
- configuration information
- loading
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
一种引导与目标分离的嵌入式软件固化、加载方法,将非易失存储器的存储空间划分为三个存储空间;将引导、加载程序,配置信息,被加载程序分别固化到三个存储空间;处理器从第一个存储空间中取指执行最小系统初始化;完成后,引导、加载程序从第二个存储空间中读取配置信息并解析;根据解析结果判断被加载程序的个数,若被加载程序个数为零,则进入空操作循环,否则依次加载每个被加载程序;当所有被加载程序加载完后,引导、加载程序根据配置信息判断被加载程序是否需要首先执行,若需要首先执行,则跳转到该被加载程序的入口地址执行,否则进入空操作循环。本发明解决了有限资源的深嵌入应用中的多目标文件加载问题,且易于移植。
Description
技术领域
本发明涉及一种嵌入式软件的固化、加载技术,具体涉及一种引导与目标分离的嵌入式软件固化、加载方法。
背景技术
大多数嵌入式软件都在RAM中运行,由于RAM中的数据断电后无法保存,因此嵌入式软件应被固化在非易失存储器中,在系统上电后通过引导、加载程序加载到RAM中运行。引导、加载程序首先初始化硬件设备,建立内存空间映射关系,将整个系统初始化到一个静止的、适于操作的状态,然后加载应用软件到指定的RAM空间,并跳转到应用软件执行。
目前嵌入式软件的引导、加载主要有三种方式,
第一种方式,处理器自带固件完成引导、加载(如DSP);其优点是用户无需做任何工作,只需把应用软件的目标格式文件固化到非易失存储器中指定地址处即可;但缺点是引导、加载程序与处理器直接相关,如果使用的处理器没有加载固件的话就不能使用,使得硬件设计时可选择的器件范围变窄,同时这种固件加载方式对被加载软件的大小有要求,如只能加载64kbyte大小以内的数据;
第二种方式,采用开源工具对用户目标格式文件进行处理(如MKPROM),提取目标格式文件的代码段、数据段内容形成一个新的目标格式文件,该文件中包含了被加载程序及系统上电后的引导、加载程序,上电后自动加载用户程序到RAM区执行;其优点是引导、加载程序对被加载软件的大小无限制,并且支持多款处理器的引导、加载;但缺点是由于用户程序与引导、加载程序最终合并为一个文件,导致每次用户程序修改后都需要重新合并,进行重复工作,同时合并为同一文件增加了调试难度,该方式最大的缺点是只能加载一个文件,无法进行多目标文件的加载;
第三种方式,开源的引导、加载程序(UBOOT),用户根据需要修改引导、加载程序,将修改后的引导、加载程序及用户程序分别固化到非易失存储器中,上电后引导、加载程序完成用户程序的加载。其优点是适用多款处理器;缺点是占用空间大、不适于系统资源有限的深嵌入式应用,用户使用前必须先熟悉其源代码,并根据其应用环境进行修改,难度较大,且不支持Windows环境。
发明内容
本发明的目的在于提出一种引导与目标分离的嵌入式软件固化、加载方法,解决了有限资源的深嵌入应用中的多目标文件加载问题,且易于移植。
为了达到上述目的,本发明采用的技术方案包括以下步骤:
1)根据非易失存储器的存储空间大小,将非易失存储器的存储空间划分为三个存储空间;
2)将引导、加载程序固化到第一个存储空间;将被加载程序及存储空间的配置信息写入第二个存储空间,将被加载程序的代码段、数据段固化到第三个存储空间;并根据被加载程序的个数将第三个存储空间划分为N个子空间,每个子空间存放一个被加载程序的代码段和数据段;N为被加载程序的个数;
3)处理器从第一个存储空间中取指执行最小系统初始化;最小系统初始化完成后,引导、加载程序从第二个存储空间中读取被加载程序及存储空间的配置信息并进行解析;
4)根据被加载程序及存储空间的配置信息解析后的结果判断被加载程序的个数,如果被加载程序个数为零,则进入空操作循环,否则依次加载每个被加载程序,然后转入步骤5);
5)根据被加载程序及存储空间的配置信息判断被加载程序是否需要首先执行,若需要首先执行,则跳转到该程序的入口地址执行,否则进入空操作循环。
所述的步骤2)中第一个存储空间的地址是从系统上电后取指令的地址处开始的。
所述的步骤2)中被加载程序及存储空间的配置信息包括非易失存储器的大小,被加载程序的校验和,被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的段大小,被加载程序的代码段、数据段的目的地址,被加载程序的个数和被加载程序是否需执行的标志。
所述的步骤2)中被加载程序及存储空间的配置信息的获取方式为:
编译、链接被加载程序,生成被加载程序的目标格式文件,从被加载程序的目标格式文件中提取被加载程序的配置信息,被加载程序的配置信息包括被加载程序的校验和,被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的段大小,被加载程序的代码段、数据段的目的地址和被加载程序的个数;同时根据应用需求确定被加载程序是否需执行的标志,根据非易失存储器确定非易失存储器的大小,最终获取到被加载程序及存储空间的配置信息;若有多个被加载程序,则依次提取被加载程序的配置信息。
所述的步骤2)中被加载程序及存储空间的配置信息需要更改,则重新获取配置信息。
所述的步骤4)中进行加载是根据被加载程序及存储空间配置信息中被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的目的地址和被加载程序的代码段、数据段的段大小进行的。
所述的步骤3)中最小系统初始化包括初始化CPU,挂接异常处理程序,关中断和配置内存。
与现有技术相比,本发明的有益效果在于:
本发明将非易失存储器划分成三个存储空间,且将第三个存储空间按照被加载程序的个数划分为N个子空间,这样就能实现对N版本、多重备份软件的加载;同时引导、加载程序功能简单、占用硬件资源少(50Kbyte),便于修改、移植,适用于有限资源的深嵌入应用。
附图说明
图1为本发明非易失存储器的空间划分图;
图2为引导、加载程序执行流程;
图3为获取被加载程序的配置信息及固化的流程;
图4为本发明在采用NOR FLASH存储器的目标板上的一个实施例。
具体实施方式
下面结合附图对本发明做进一步详细说明。
参见图2,本发明引导与目标分离的嵌入式软件固化、加载方法包括以下步骤:
1)参见图1,根据非易失存储器的存储空间大小,将非易失存储器的存储空间划分为三个存储空间;
第一个存储空间用于存储引导、加载程序,系统上电后首先执行引导、加载程序,因此第一个存储空间的地址应从系统上电后取指令的地址处开始;
第二个存储空间用于存储配置信息,包括非易失存储器的大小,被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的段大小,被加载程序的代码段、数据段的目的地址,被加载程序的代码段、数据段的段大小,被加载程序的个数、被加载程序是否需执行的标志以及被加载程序的校验和等;
配置信息是由两部分共同构成的,一部分是从被加载程序的格式文件中提取的被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的段大小,被加载程序的代码段、数据段的目的地址,被加载程序的代码段、数据段的段大小,另一部分是由软、硬件情况确定的被加载程序的个数,被加载程序是否需执行的标志,被加载程序的校验,非易失存储器的大小等信息。以上两部分信息共同构成了配置信息。
第三个存储空间用于存储被加载程序的代码段和数据段,代码段和数据段连续存放,第三个存储空间可根据被加载程序的个数进一步划分为N个子空间;N等于被加载程序的个数,N≥0,每个子空间存放一个被加载程序的代码段和数据段;
2)将引导、加载程序固化到第一个存储空间;
3)参见图3,编译、链接加载程序,生成被加载程序的目标格式文件,从被加载程序的目标格式文件中提取被加载程序的配置信息,被加载程序的配置信息包括被加载程序的校验和,被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的段大小,被加载程序的代码段、数据段的目的地址和被加载程序的个数;同时根据应用需求确定被加载程序是否需执行的标志,根据非易失存储器确定非易失存储器的大小,最终获取到被加载程序及存储空间的配置信息;若有多个被加载程序,则依次提取被加载程序的配置信息。
4)将被加载程序及存储空间的配置信息写入第二个存储空间;将被加载程序的代码段、数据段固化到第三个存储空间;并根据被加载程序的个数在每个子空间中存放一个被加载程序的代码段和数据段;
5)处理器从第一个存储空间中取指执行最小系统初始化;最小系统初始化包括初始化CPU,挂接异常处理程序,关中断和配置内存等;最小系统初始化完成后,引导、加载程序从第二个存储空间中读取配置信息并进行解析;
6)根据被加载程序及存储空间的配置信息解析后的结果判断被加载程序的个数,如果被加载程序个数为零,则进入空操作循环,否则依次加载每个被加载程序,然后转入步骤5);且在加载过程中是根据被加载程序及存储空间的配置信息中被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的目的地址和被加载程序的代码段、数据段的段大小进行被加载程序的加载;
7)根据被加载程序及存储空间的配置信息判断被加载程序是否需要首先执行,若需要首先执行,则跳转到该程序的入口地址执行,否则进入空操作循环。
本发明将引导与目标分离进行分离,对非易失存储器的存储空间按需求进行划分,实现了多目标文件的加载,可实现对N版本、多重备份软件的加载,下面以16Mbyte NORFLASH存储器、加载一个ELF格式文件为例,对本发明的实施进行说明,本领域技术人员能够明了,非易失存储器不仅限于NOR FLASH存储器,还可以是其它类型的非易失存储器,如EEPROM、EEPROM、EPROM、PROM等,目标格式文件同样支持ELF、a.out、COFF格式等。
图4是基于NOR FLASH存储器引导、加载ELF格式文件的实施例,其具体实施步骤如下:
1)根据应用需求将NOR FLASH存储器划分为三个存储空间,第一个存储空间占整个存储空间的1/4(4Mbyte),第二个存储空间占整个存储空间的1/4(4Mbyte),第三个存储空间占整个存储空间的1/2(8Mbyte)。
2)将引导、加载程序固化到第一个存储空间中;
3)解析ELF格式文件,获取ELF格式文件的代码段、数据段的段大小,代码段、数据段在ELF格式文件中的起始地址,代码段、数据段加载的目的地址;
4)根据需求设置被加载程序的个数、被加载程序是否需运行的标志、被加载程序的校验和以及非易失存储器的大小等信息,本实施例的被加载程序的个数为1,被加载程序需要运行,非易失存储器的大小为16Mbyte;
5)将步骤3)和步骤4)中确定的配置信息顺序固化到第二个存储空间中;
6)将ELF格式文件的代码段、数据段顺序固化到第三个存储空间中;
7)系统加电,处理器从第一个存储空间中取指执行,完成最小系统初始化,包括初始化CPU、挂接异常处理程序、配置内存如NOR FLASH大小、NOR FLASH bank size、NORFLASH读写等待周期、RAM大小、RAM bank size、RAM读写等待周期等,中断如中断控制器初始化等;
8)从第二个存储空间(起始地址0x400000)读取配置信息并解析,获取配置信息解析后的结果如ELF格式文件的代码段、数据段的源地址,目的地址等信息;
9)加载ELF格式文件的代码段、数据段到配置信息中指定的地址;
10)判断被加载的ELF格式文件是否需要运行,是则跳转到该程序的入口地址执行,否则执行空操作。
Claims (5)
1.一种引导与目标分离的嵌入式软件固化、加载方法,其特征在于,包括以下步骤:
1)根据非易失存储器的存储空间大小,将非易失存储器的存储空间划分为三个存储空间;
2)将引导、加载程序固化到第一个存储空间;将被加载程序及存储空间的配置信息写入第二个存储空间,将被加载程序的代码段、数据段固化到第三个存储空间;并根据被加载程序的个数将第三个存储空间划分为N个子空间,每个子空间存放一个被加载程序的代码段和数据段;N为被加载程序的个数;
3)处理器从第一个存储空间中取指执行最小系统初始化;最小系统初始化完成后,引导、加载程序从第二个存储空间中读取被加载程序及存储空间的配置信息并进行解析;
4)根据被加载程序及存储空间的配置信息解析后的结果判断被加载程序的个数,如果被加载程序个数为零,则进入空操作循环,否则依次加载每个被加载程序,然后转入步骤5);
5)根据被加载程序及存储空间的配置信息判断被加载程序是否需要首先执行,若需要首先执行,则跳转到该程序的入口地址执行,否则进入空操作循环;
所述的步骤2)中被加载程序及存储空间的配置信息包括非易失存储器的大小,被加载程序的校验和,被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的段大小,被加载程序的代码段、数据段的目的地址,被加载程序的个数和被加载程序是否需执行的标志;
所述的步骤2)中被加载程序及存储空间的配置信息的获取方式为:
编译、链接被加载程序,生成被加载程序的目标格式文件,从被加载程序的目标格式文件中提取被加载程序的配置信息,被加载程序的配置信息包括被加载程序的校验和,被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的段大小,被加载程序的代码段、数据段的目的地址和被加载程序的个数;同时根据应用需求确定被加载程序是否需执行的标志,根据非易失存储器确定非易失存储器的大小,最终获取到被加载程序及存储空间的配置信息;若有多个被加载程序,则依次提取被加载程序的配置信息。
2.根据权利要求1所述的引导与目标分离的嵌入式软件固化、加载方法,其特征在于:所述的步骤2)中第一个存储空间的地址是从系统上电后取指令的地址处开始的。
3.根据权利要求1所述的引导与目标分离的嵌入式软件固化、加载方法,其特征在于,所述的步骤2)中被加载程序及存储空间的配置信息需要更改,则重新获取配置信息。
4.根据权利要求1所述的引导与目标分离的嵌入式软件固化、加载方法,其特征在于:所述的步骤4)中进行加载是根据被加载程序及存储空间配置信息中被加载程序的代码段、数据段的起始地址,被加载程序的代码段、数据段的目的地址和被加载程序的代码段、数据段的段大小进行的。
5.根据权利要求1所述的引导与目标分离的嵌入式软件固化、加载方法,其特征在于:所述的步骤3)中最小系统初始化包括初始化CPU,挂接异常处理程序,关中断和配置内存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410617038.3A CN104407886B (zh) | 2014-11-05 | 2014-11-05 | 一种引导与目标分离的嵌入式软件固化、加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410617038.3A CN104407886B (zh) | 2014-11-05 | 2014-11-05 | 一种引导与目标分离的嵌入式软件固化、加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104407886A CN104407886A (zh) | 2015-03-11 |
CN104407886B true CN104407886B (zh) | 2017-11-14 |
Family
ID=52645519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410617038.3A Active CN104407886B (zh) | 2014-11-05 | 2014-11-05 | 一种引导与目标分离的嵌入式软件固化、加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104407886B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105072044B (zh) * | 2015-07-28 | 2018-01-16 | 上海斐讯数据通信技术有限公司 | 利用路由器引导系统远程恢复路由器的系统及方法 |
CN105760201B (zh) | 2016-02-29 | 2019-05-28 | 华为技术有限公司 | 一种嵌入式装置的启动方法和装置 |
CN105912340A (zh) * | 2016-04-26 | 2016-08-31 | 江苏惠通集团有限责任公司 | 一种主设备、遥控器及对其空中升级的方法 |
CN106020837A (zh) * | 2016-05-27 | 2016-10-12 | 深圳创维数字技术有限公司 | 一种加载机顶盒驱动的方法及系统 |
CN107515799A (zh) * | 2016-06-16 | 2017-12-26 | 上海奕瑞光电子科技有限公司 | 一种平板探测器的固件加载方法 |
CN106528254A (zh) * | 2016-12-16 | 2017-03-22 | 中南大学 | 一种app快速加载方法 |
CN110520839A (zh) * | 2018-03-28 | 2019-11-29 | 深圳市大疆创新科技有限公司 | 系统芯片内存储介质空间应用方法、装置及无人机 |
CN109582370B (zh) * | 2018-11-01 | 2022-07-19 | 浙江大华技术股份有限公司 | 一种nor flash嵌入式设备的启动方法及装置 |
CN113961259A (zh) * | 2021-11-01 | 2022-01-21 | 锐凌无线通讯科技(深圳)有限公司 | 启动引导程序加载方法、装置、系统、电子设备及介质 |
CN114816273B (zh) * | 2022-06-27 | 2023-06-09 | 杭州优智联科技有限公司 | 针对Norflash的自适应最优配置的方法、装置及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101650662A (zh) * | 2009-08-26 | 2010-02-17 | 中兴通讯股份有限公司 | 一种嵌入式系统的存储器件、固件启动及升级方法 |
CN102609331A (zh) * | 2012-01-19 | 2012-07-25 | 苏州希图视鼎微电子有限公司 | Nand闪存的装载代码的文件格式 |
CN103970557A (zh) * | 2013-02-04 | 2014-08-06 | 中兴通讯股份有限公司 | 存储设备启动系统的方法及存储设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6823508B1 (en) * | 2000-04-27 | 2004-11-23 | Microsoft Corporation | Automatic computer program customization based on a user information store |
-
2014
- 2014-11-05 CN CN201410617038.3A patent/CN104407886B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101650662A (zh) * | 2009-08-26 | 2010-02-17 | 中兴通讯股份有限公司 | 一种嵌入式系统的存储器件、固件启动及升级方法 |
CN102609331A (zh) * | 2012-01-19 | 2012-07-25 | 苏州希图视鼎微电子有限公司 | Nand闪存的装载代码的文件格式 |
CN103970557A (zh) * | 2013-02-04 | 2014-08-06 | 中兴通讯股份有限公司 | 存储设备启动系统的方法及存储设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104407886A (zh) | 2015-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104407886B (zh) | 一种引导与目标分离的嵌入式软件固化、加载方法 | |
CN108268770B (zh) | 一种栈溢出检测系统及方法 | |
CN104346148A (zh) | 获取程序性能消耗信息的方法、装置及系统 | |
CN103793249A (zh) | 一种Java虚拟机中类库的多线程预加载方法 | |
CN109901847B (zh) | 一种基于存储卡的量产系统固件量产方法 | |
CN105224309B (zh) | 一种调取函数的方法和装置 | |
CN104461880B (zh) | 一种嵌入式系统中自动检测内存越界的方法及系统 | |
CN103246566A (zh) | 应用程序的资源监控方法及装置 | |
CN102902568B (zh) | 一种用于处理应用程序的内容表访问溢出的方法和系统 | |
CN107544811B (zh) | IOS平台隐藏dylib文件的方法、存储介质、电子设备及系统 | |
CN107463485B (zh) | 基于方法栈的日志获取方法、装置和终端 | |
CN104407852B (zh) | 一种基于代码隔离的嵌入式软件构建方法和调用方法 | |
CN108255735A (zh) | 关联环境测试方法、电子装置及计算机可读存储介质 | |
US9158545B2 (en) | Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler | |
CN106250188B (zh) | 一种系统固件映像文件的生成方法及系统 | |
CN107885536A (zh) | 一种嵌入式处理器的启动方法、嵌入式处理器及存储装置 | |
US9182990B1 (en) | Method and apparatus for detecting execution of unsupported instructions while testing multiversioned code | |
CN103294518B (zh) | 一种解释器中间接跳转预测方法及系统 | |
CN109426702A (zh) | iOS平台文件读取保护方法、存储介质、电子设备及系统 | |
CN103544003A (zh) | 基于数据管理功率的设备和方法 | |
CN114691496A (zh) | 单元测试方法、装置、计算设备及介质 | |
CN109947476B (zh) | 一种运行时栈空间的统计方法及系统 | |
US7774763B1 (en) | Techniques for forming a multi-tasking executable program and using the same | |
CN102629259A (zh) | 嵌入式系统中只读文件系统建立方法,装置及嵌入式系统 | |
CN104035809A (zh) | 一种基于Dalvik虚拟机JNI机制中接口函数性能优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |