CN101661397A - 实现程序动态加载的方法和生成映射文件的方法及设备 - Google Patents

实现程序动态加载的方法和生成映射文件的方法及设备 Download PDF

Info

Publication number
CN101661397A
CN101661397A CN200810198185A CN200810198185A CN101661397A CN 101661397 A CN101661397 A CN 101661397A CN 200810198185 A CN200810198185 A CN 200810198185A CN 200810198185 A CN200810198185 A CN 200810198185A CN 101661397 A CN101661397 A CN 101661397A
Authority
CN
China
Prior art keywords
image file
instruction code
memory headroom
reserved data
data section
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.)
Granted
Application number
CN200810198185A
Other languages
English (en)
Other versions
CN101661397B (zh
Inventor
燕青洲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yulong Computer Telecommunication Scientific Shenzhen Co Ltd
Original Assignee
Yulong Computer Telecommunication Scientific Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yulong Computer Telecommunication Scientific Shenzhen Co Ltd filed Critical Yulong Computer Telecommunication Scientific Shenzhen Co Ltd
Priority to CN200810198185A priority Critical patent/CN101661397B/zh
Publication of CN101661397A publication Critical patent/CN101661397A/zh
Application granted granted Critical
Publication of CN101661397B publication Critical patent/CN101661397B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种在嵌入式系统中实现程序动态加载的方法,包括如下步骤:为基于嵌入式系统进行加载的映像文件分配内存;将映像文件的内容读入所述分配的内存;所述映像文件的内容读入完成后,执行映像文件的指令代码,并根据入口函数指定的入口地址进行映像文件中的全局/静态变量的重新映射,完成程序的动态加载。相应地,本发明还公开了一种生成基于嵌入式系统的映像文件的方法以及一种嵌入式设备,通过实施本发明实施例,对映像文件中的全局/静态变量进行重新映射,实现了动态加载映像文件支持全局/静态变量,解决了当加载涉及映像文件用到的全局/静态变量时程序会出现执行异常,导致加载失败的问题,更加便于对生成的映像文件的测试。

Description

实现程序动态加载的方法和生成映射文件的方法及设备
技术领域
本发明涉及计算机领域,尤其涉及一种在嵌入式系统中实现程序动态加载的方法、一种生成基于嵌入式系统的映像文件的方法以及一种嵌入式设备。
背景技术
在ARM(Advanced RISC Machines,一类微处理器的通称)的集成开发环境中,一个程序的只读的代码段和常量被称作RO(ReadOnly)段;可读写的全局变量和静态变量被称作RW(ReadWrite)段;RW段中要被初始化为零的变量被称为ZI(ZeroInit)段。对于嵌入式系统而言,程序映像都是存储在Flash存储器等一些非易失性器件中的,而在运行时,程序中的RW段必须重新加载到可读写的存储卡,如RAM(Random Access Memory,随机存储器),或者系统文件中。在嵌入式系统中动态加载程序一般是指:在嵌入式系统烧写到Flash后,系统可以通过读入存储卡或者文件系统来加载外部新生成的映像程序文件,即类似于在WINDOWS系统(微软公司开发的窗口图形界面的操作系统)下执行一个可执行文件。
目前嵌入式领域中可以自身实现程序的动态加载的操作系统有Symbian,WINCE,Palm等,然而现有中的嵌入式操作系统不支持全局/静态变量,如高通的BREW(Binary Runtime Environment for Wireless,无线二进制运行环境)平台基于的REX(ROUTE EXTENSION,路由扩展)系统,虽然支持BIN(Plainbinary,二进制文件)格式的映像文件动态加载,但是其加载的BIN格式不支持全局/静态变量,即当加载涉及BIN格式用到的全局/静态变量时,程序会出现执行异常,导致加载失败。
发明内容
本发明实施例在于提供一种在嵌入式系统中实现程序动态加载的方法,一种生成基于嵌入式系统的映像文件的方法以及一种嵌入式设备,支持全局/静态变量,解决了当加载涉及映像文件用到的全局/静态变量时程序会出现执行异常,导致加载失败的问题。
为了达到上述技术效果,本发明实施例提出了一种在嵌入式系统中实现程序动态加载的方法,包括如下步骤:
为基于嵌入式系统进行加载的映像文件分配内存,所述映像文件中设有指定所述映像文件进行加载时的入口地址的入口函数;
将所述映像文件的内容读入所述分配的内存;
所述映像文件的内容读入完成后,执行所述映像文件的指令代码,并根据所述入口函数指定的入口地址进行所述映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
相应地,本发明实施例还公开了一种生成基于嵌入式系统的映像文件的方法,包括步骤:编译器编译映像文件时设置映像文件的入口函数,所述入口函数指定所述映像文件进行加载时的入口地址。
相应地,本发明实施例还公开了一种嵌入式设备,其包括:
分配模块,用于为基于嵌入式系统进行加载的映像文件分配内存,所述映像文件中设有指定所述映像文件进行加载时的入口地址的入口函数;
读入模块,用于将所述映像文件的内容读入所述分配模块分配的内存;
加载模块,执行所述映像文件的指令代码,并根据所述入口函数指定的入口地址进行映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
实施本发明实施例,通过对映像文件中的全局/静态变量进行重新映射,实现了动态加载映像文件支持全局/静态变量,解决了当加载涉及映像文件用到的全局/静态变量时程序会出现执行异常,导致加载失败的问题,更加便于对生成的映像文件的测试,满足了用户的需求。
附图说明
图1是本发明实施例的在嵌入式系统中实现程序动态加载的方法流程图;
图2是本发明实施例的在嵌入式系统中实现程序动态加载BIN格式的映像文件的方法流程图;
图3是本发明实施例的动态加载中分配内存的状态图;
图4是本发明实施例的在嵌入式系统中实现程序动态加载ELF格式的映像文件的方法流程图;
图5是本发明实施例的嵌入式设备的结果示意图;
图6是本发明实施例的分配模块的结构示意图;
图7是本发明实施例的加载模块的结构示意图。
具体实施方式
本发明实施例提供了一种在嵌入式系统中实现程序动态加载的方法,一种生成基于嵌入式系统的映像文件的方法以及一种嵌入式设备,支持全局/静态变量,解决了当加载涉及映像文件用到的全局/静态变量时程序会出现执行异常,导致加载失败的问题。
下面结合附图详细说明本发明的优选实施例。
请参阅图1,图1示出了本发明实施例的在嵌入式系统中实现程序动态加载的方法流程图,包括如下步骤:
步骤S101:为基于嵌入式系统进行加载的映像文件分配内存;
具体地,所述映像文件中设有指定所述映像文件进行加载时的入口地址的入口函数,为基于嵌入式系统进行加载的映像文件分配预留数据段的内存空间、指令代码段的内存空间以及函数地址表空间。
步骤S102:将所述映像文件的内容读入所述分配的内存;
具体地,将所述映像文件的内容读入分配的指令代码段的内存空间。
步骤S103:所述映像文件的内容读入完成后,执行所述映像文件的指令代码,并根据所述入口函数指定的入口地址进行所述映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
需要说明的是,在嵌入式系统中对映像文件进行动态加载前,需要由终端用户、厂商等生成进行加载的映像文件,具体地,在使用编译器编译映像文件时设置映像文件的入口函数,所述入口函数指定所述映像文件进行加载时的入口地址,然后由嵌入式设备对生成的映像文件按照上述实施例进行动态加载。
通过上述实施例,对映像文件中的全局/静态变量进行重新映射,实现了动态加载映像文件支持全局/静态变量,解决了当加载涉及映像文件用到的全局/静态变量时程序会出现执行异常,导致加载失败的问题,更加便于对生成的映像文件的测试,满足了用户的需求。
需要说明的是,本发明实施例中的嵌入式系统为基于ARM体系的嵌入式系统,系统中对映像文件进行动态加载前,需要生成基于ARM体系,并且与地址无关的BIN格式、ELF(Executable and Lnking Format,可执行映像和连接格式)格式或者基于此两种格式的衍生格式的映像文件,然后对生成的映像文件进行动态加载。下面分别以BIN格式的映像文件的动态加载以及ELF格式的映像文件的动态加载为例,详细说明本发明实施例的一种在嵌入式系统中实现程序动态加载的方法。
1、BIN格式的映像文件的动态加载:
终端用户、厂商等生成基于ARM体系并且与地址无关的BIN格式映像文件,与地址无关指模块内外部函数、全局/静态变量等的寻址与链接阶段由ADS集成开发环境的ARM LINKER选项中指定的RO BASE和RW BASE无关,ROBASE和RW BASE分别用于告知连接器RO段和RW端的连接基地址,具体地,在生成过程中可以利用ADS(ARM Developer Suite,ARM开发工具集)编译、链接的一些选项,如ropi、rwpi等,或者利用ELF转换器,设置BIN映像文件的入口地址的入口函数,如ModMain,使生成的BIN映像文件程序中的所有函数在进行动态加载时可以相对于一个特定的入口函数(如上述的ModMain)进行相对地址寻址,即BIN映像文件的起始地址为ModMain的地址,其他非本模块(即模块外部)的函数都可以在ModMain上的函数地址表来进行寻址。下面结合图2示出的本发明实施例的在嵌入式系统中实现程序动态加载BIN格式的映像文件的方法流程图,进一步说明本发明的一种在嵌入式系统中实现程序动态加载的方法,包括如下步骤:
步骤S201:为进行加载的BIN映像文件分配内存;
具体地,为进行加载的所述BIN映像文件分配预留数据段的内存空间、指令代码段的内存空间以及函数地址表空间,如图3示出的本发明实施例的动态加载中分配内存的状态图,为BIN映像文件分配适量的RAM空间的内存,其大小为预留数据段的内存空间、指令代码段的内存空间以及函数地址表空间的总和,其中预留数据段大小可定义成一个比较大的值M,如32K,其起始地址可以为A;函数地址表为一个4Bytes大小的表指针加上4Bytes的间隔区,其起始地址可以为B,自B地址而上皆为BIN映像文件的预留数据段的内存空间;为BIN映像文件的二进制内容分配起始地址为C的读入地址,地址C以下存放BIN映像文件的内容,在C-8地址处(即B地址处)放置系统函数表指针。
步骤S202:将所述BIN映像文件的内容读入所述分配的内存;
具体地,将BIN映像文件的内容读入分配的指令代码段的内存空间,即将BIN映像文件的内容从地址C处载入到RAM中。
步骤S203:所述BIN映像文件的内容读入完成后,执行所述BIN映像文件的指令代码,并根据所述入口函数指定的入口地址进行所述映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
具体地,所述BIN映像文件的内容读入完成后,根据所述入口地址以及分配的预留数据段的地址信息,设置将映像文件中的全局/静态变量从所述入口地址映射到所述预留数据段的内存空间的映射程序,系统CPU从地址C处开始执行BIN映像文件中的指令代码,在进入BIN映像文件的入口地址的入口函数ModMain后调用所述映射程序,所述映射程序相当于入口函数调用的第一个子函数,将映像文件中的全局/静态变量映射到所述预留数据段的内存空间中,让程序可以正常执行,完成程序的动态加载。
需要说明的是,上述实施例还包括,系统在执行所述映像文件的指令代码时,可以根据所述入口函数ModMain对BIN映像文件程序中的所有函数进行相对地址寻址,其他非本模块(即模块外部)的函数都可以在ModMain上的函数地址表来进行寻址,完成映像文件在加载中关于模块内部/外部函数的动态寻址。
需要说明的是,在生成BIN映像文件的过程中,可以在BIN映像文件的头部添加分配信息,所述分配信息为自定义的固定结构的一个头部信息,分配信息包括所述映像文件的指令代码段的起始信息以及大小信息、数据段的起始信息以及大小信息等。在系统对生成的BIN映像文件分配预留数据段的内存空间、指令代码段的内存空间时,具体地,系统可以根据所述分配信息中指令代码段的信息以及数据段的信息分别计算需要分配的预留数据段以及指令代码段的内存空间,然后为BIN映像文件分配计算出的预留数据段以及指令代码段的内存空间,因此系统通过所述分配信息可以得知动态加载时需要耗用的RAM空间,节省了RAM空间。
2、ELF格式的映像文件的动态加载:
终端用户、厂商等生成基于ARM体系并且与地址无关的ELF格式映像文件,具体地,可以使用ADS编译工具,可以通过armcc/armcpp/tcc/tcpp编译生成.o格式OBJ文件,然后使用armlink与系统SDK链接生成.axf格式的ELF文件,在生成过程中可以利用ADS编译、链接的一些选项,如ropi、rwpi等,或者利用ELF转换器,设置ELF映像文件的入口地址的入口函数,如ModMain,使生成的ELF映像文件程序中的所有函数在进行动态加载时可以相对于一个特定的入口函数(如上述的ModMain)进行相对地址寻址,即ELF映像文件的起始地址为ModMain的地址,其他非本模块(即模块外部)的函数都可以在ModMain上的函数地址表来进行寻址。另外,生成的ELF格式的映像文件含有固定的ELF头部,可以根据所述ELF头部的信息计算出ELF映像文件的数据段大小以及指令代码段的大小。下面结合图4示出的本发明实施例的在嵌入式系统中实现程序动态加载ELF格式的映像文件的方法流程图,进一步说明本发明的一种在嵌入式系统中实现程序动态加载的方法,包括如下步骤:
步骤S401:为进行加载的ELF映像文件分配内存;
具体地,为进行加载的所述ELF映像文件分配预留数据段的内存空间、指令代码段的内存空间以及函数地址表空间,与上述实施例为进行加载的BIN映像文件分配内存的过程类似,系统可以根据ELF映像文件的头部信息计算需要分配的预留数据段的内存空间,由ELF映像文件的大小减去ELF头部的大小可以计算出需要分配的指令代码段的内存空间,然后为ELF映像文件分配计算出的预留数据段以及指令代码段的内存空间。
步骤S402:将所述ELF映像文件的内容读入所述分配的内存;
具体地,将ELF映像文件中ELF头部以外的内容读入分配的指令代码段的内存空间,即将ELF映像文件的内容从指定的地址处载入到RAM中。
步骤S403:所述ELF映像文件的内容读入完成后,执行所述ELF映像文件的指令代码,并根据所述入口函数指定的入口地址进行所述映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
具体地,所述ELF映像文件的内容读入完成后,根据所述入口地址以及分配的预留数据段的地址信息,设置将映像文件中的全局/静态变量从所述入口地址映射到所述预留数据段的内存空间的映射程序,系统CPU从地址C处开始执行ELF映像文件中的指令代码,在进入ELF映像文件的入口地址的入口函数ModMain后调用所述映射程序,所述影射程序相当于入口函数调用的第一个子函数,将映像文件中的全局/静态变量映射到所述预留数据段的内存空间中,让程序可以正常执行,完成程序的动态加载。
需要说明的是,上述实施例还包括,系统在执行所述映像文件的指令代码时,可以根据所述入口函数ModMain对ELF映像文件程序中的所有函数进行相对地址寻址,其他非本模块(即模块外部)的函数都可以在ModMain上的函数地址表来进行寻址,完成映像文件在加载中关于模块内部/外部函数的动态寻址。
需要说明的是,除了上述BIN格式和ELF格式的映像文件外,基于此两种格式的衍生格式映像文件也可以通过上述实施例的方法实现程序的动态加载。
下面结合图5示出的本发明实施例的嵌入式设备的结果示意图,详细说明本发明的一种嵌入式设备的结构,包括:
分配模块51,用于为基于嵌入式系统进行加载的映像文件分配内存,所述映像文件中设有指定所述映像文件进行加载时的入口地址的入口函数;具体地,为基于嵌入式系统进行加载的映像文件分配预留数据段的内存空间、指令代码段的内存空间以及函数地址表空间。
读入模块52,用于将所述映像文件的内容读入分配模块51分配的内存;具体地,将所述映像文件的内容读入分配的指令代码段的内存空间。
加载模块53,执行所述映像文件的指令代码,并根据所述入口函数指定的入口地址进行映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
需要说明的是,在嵌入式系统中对映像文件进行动态加载前,需要由终端用户、厂商等生成进行加载的映像文件,具体地,在使用编译器编译映像文件时设置映像文件的入口函数,所述入口函数指定所述映像文件进行加载时的入口地址,然后由上述实施例中的嵌入式设备对生成的映像文件进行动态加载。
下面结合图6示出的本发明实施例的分配模块的结构示意图,进一步说明本发明的一种嵌入式设备的结构,分配模块51包括:
计算单元511,用于根据所述映射文件的头部信息计算预留数据段以及指令代码段的内存空间,所述头部信息含有所述映像文件的指令代码段的起始信息以及大小信息、数据段的起始信息以及大小信息;
分配子单元512,用于为所述映像文件分配所述计算单元计算出的预留数据段以及指令代码段的内存空间。
具体地,以BIN格式的映像文件的动态加载为例,在生成BIN映像文件的过程中,可以在BIN映像文件的头部添加分配信息,所述分配信息为自定义的固定结构的一个头部信息,分配信息包括所述映像文件的指令代码段的起始信息以及大小信息、数据段的起始信息以及大小信息等,计算单元511可以根据所述分配信息中指令代码段的信息以及数据段的信息分别计算需要分配的预留数据段以及指令代码段的内存空间,然后分配子单元512为BIN映像文件分配计算出的预留数据段以及指令代码段的内存空间;以ELF格式的映像文件的动态加载为例,生成的ELF格式的映像文件含有固定的ELF头部,计算单元511可以根据ELF映像文件的头部信息计算需要分配的预留数据段的内存空间,由ELF映像文件的大小减去ELF头部的大小可以计算出需要分配的指令代码段的内存空间,然后分配子单元512为ELF映像文件分配计算出的预留数据段以及指令代码段的内存空间。因此系统通过BIN映像文件中的分配信息或者ELF映像文件中的头部信息可以得知动态加载时需要耗用的RAM空间,节省了RAM空间。
下面结合图7示出的本发明实施例的加载模块的结构示意图,进一步说明本发明的一种嵌入式设备的结构,加载模块53包括:
执行单元531,用于执行读入模块52读入的映像文件的指令代码;
设置单元532,用于根据所述入口地址以及分配模块51分配的预留数据段的地址信息,设置将映像文件中的全局/静态变量从所述入口地址映射到所述预留数据段的内存空间的映射程序;
调用单元533,用于调用设置单元532设置的映射程序,完成将映像文件中的全局/静态变量映射到所述预留数据段的内存空间中。
寻址单元534,用于当执行单元531执行映像文件的指令代码时,根据所述入口函数指定的入口地址进行函数的相对地址寻址。
具体地,所述映像文件的内容读入完成后,设置单元532根据所述入口地址以及分配的预留数据段的地址信息,设置将映像文件中的全局/静态变量从所述入口地址映射到所述预留数据段的内存空间的映射程序,执行单元531开始执行BIN映像文件中的指令代码,在进入映像文件的入口地址的入口函数(如ModMain)后调用单元533调用所述映射程序,所述映射程序相当于入口函数调用的第一个子函数,将映像文件中的全局/静态变量映射到所述预留数据段的内存空间中,让程序可以正常执行,完成程序的动态加载。另外,执行单元531在执行所述映像文件的指令代码时,寻址单元534可以根据所述入口函数ModMain对映像文件程序中的所有函数进行相对地址寻址,其他非本模块(即模块外部)的函数都可以在ModMain上的函数地址表来进行寻址,完成映像文件在加载中关于模块内部/外部函数的动态寻址。
综上所述,实施本发明实施例,通过在分配内存空间之前计算需要分配的合适内存空间,节省了RAM空间,通过生成基于ARM体系并且与地址无关的映像文件,在加载该映像文件时,对映像文件中的全局/静态变量进行重新映射,实现了动态加载映像文件支持全局/静态变量,解决了当加载涉及映像文件用到的全局/静态变量时程序会出现执行异常,导致加载失败的问题,更加便于对生成的映像文件的测试,满足了用户的需求。
需要说明的是,通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上所揭露的仅为本发明实施例中的一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (12)

1、一种在嵌入式系统中实现程序动态加载的方法,其特征在于,包括如下步骤:
为基于嵌入式系统进行加载的映像文件分配内存,所述映像文件中设有指定所述映像文件进行加载时的入口地址的入口函数;
将所述映像文件的内容读入所述分配的内存;
所述映像文件的内容读入完成后,执行所述映像文件的指令代码,并根据所述入口函数指定的入口地址进行所述映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
2、如权利要求1所述的方法,其特征在于,所述为基于嵌入式系统进行加载的映像文件分配内存的步骤包括:
为所述映像文件分配预留数据段的内存空间、指令代码段的内存空间以及函数地址表空间。
3、如权利要求2所述的方法,其特征在于,当所述映像文件为二进制文件BIN格式的映像文件时,所述映像文件的头部含有分配信息,所述分配信息包括所述映像文件的指令代码段的起始信息以及大小信息、数据段的起始信息以及大小信息,所述为所述映像文件分配预留数据段的内存空间、指令代码段的内存空间的步骤包括:
根据所述分配信息计算预留数据段以及指令代码段的内存空间;
为所述映像文件分配计算出的预留数据段以及指令代码段的内存空间。
4、如权利要求2所述的方法,其特征在于,当所述映像文件为可执行映像和连接ELF格式的映像文件时,所述为所述映像文件分配预留数据段的内存空间、指令代码段的内存空间的步骤包括:
根据ELF格式的映像文件中的头部信息计算预留数据段以及指令代码段的内存空间;
为所述映像文件分配计算出的预留数据段以及指令代码段的内存空间。
5、如权利要求2所述的方法,其特征在于,所述根据所述入口函数指定的入口地址进行映像文件中的全局/静态变量的重新映射的步骤包括:
根据所述入口地址以及分配的预留数据段的地址信息,设置将映像文件中的全局/静态变量从所述入口地址映射到所述预留数据段的内存空间的映射程序;
调用所述映射程序,完成将映像文件中的全局/静态变量映射到所述预留数据段的内存空间中。
6、如权利要求1所述的方法,其特征在于,所述方法还包括:
执行所述映像文件的指令代码时,根据所述入口函数指定的入口地址进行函数的相对地址寻址。
7、一种生成基于嵌入式系统的映像文件的方法,其特征在于,编译器编译映像文件时设置映像文件的入口函数,所述入口函数指定所述映像文件进行加载时的入口地址。
8、如权利要求7所述的方法,其特征在于,当所述映像文件为BIN格式的映像文件时,所述方法还包括:编译器编译映像文件后,在所述映像文件的头部添加分配信息,所述分配信息包括所述映像文件的指令代码段的起始信息以及大小信息、数据段的起始信息以及大小信息。
9、一种嵌入式设备,其特征在于,包括:
分配模块,用于为基于嵌入式系统进行加载的映像文件分配内存,所述映像文件中设有指定所述映像文件进行加载时的入口地址的入口函数;
读入模块,用于将所述映像文件的内容读入所述分配模块分配的内存;
加载模块,执行所述映像文件的指令代码,并根据所述入口函数指定的入口地址进行映像文件中的全局/静态变量的重新映射,完成程序的动态加载。
10、如权利要求9所述的嵌入式设备,其特征在于,所述分配模块包括:
计算单元,用于根据所述映射文件的头部信息计算预留数据段以及指令代码段的内存空间,所述头部信息含有所述映像文件的指令代码段的起始信息以及大小信息、数据段的起始信息以及大小信息;
分配子单元,用于为所述映像文件分配所述计算单元计算出的预留数据段以及指令代码段的内存空间。
11、如权利要求10所述的嵌入式设备,其特征在于,所述加载模块包括:
执行单元,用于执行所述读入模块读入的映像文件的指令代码;
设置单元,用于根据所述入口地址以及所述分配模块分配的预留数据段的地址信息,设置将映像文件中的全局/静态变量从所述入口地址映射到所述预留数据段的内存空间的映射程序;
调用单元,用于调用所述设置单元设置的映射程序,完成将映像文件中的全局/静态变量映射到所述预留数据段的内存空间中。
12、如权利要求11所述的嵌入式设备,其特征在于,所述加载模块还包括:
寻址单元,用于当所述执行单元执行映像文件的指令代码时,根据所述入口函数指定的入口地址进行函数的相对地址寻址。
CN200810198185A 2008-08-29 2008-08-29 实现程序动态加载的方法和生成映射文件的方法及设备 Active CN101661397B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200810198185A CN101661397B (zh) 2008-08-29 2008-08-29 实现程序动态加载的方法和生成映射文件的方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200810198185A CN101661397B (zh) 2008-08-29 2008-08-29 实现程序动态加载的方法和生成映射文件的方法及设备

Publications (2)

Publication Number Publication Date
CN101661397A true CN101661397A (zh) 2010-03-03
CN101661397B CN101661397B (zh) 2012-09-12

Family

ID=41789446

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200810198185A Active CN101661397B (zh) 2008-08-29 2008-08-29 实现程序动态加载的方法和生成映射文件的方法及设备

Country Status (1)

Country Link
CN (1) CN101661397B (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011137769A1 (zh) * 2010-10-13 2011-11-10 华为技术有限公司 一种多核在线补丁方法和装置
CN102750364A (zh) * 2012-06-13 2012-10-24 华为技术有限公司 为多镜像文件分配内存地址空间的方法、编译器和系统
CN103309684A (zh) * 2012-03-07 2013-09-18 腾讯科技(深圳)有限公司 动态加载应用的方法及装置
CN104572224A (zh) * 2015-02-04 2015-04-29 南车株洲电力机车研究所有限公司 一种out文件加载方法、装置及系统
WO2017107415A1 (zh) * 2015-12-25 2017-06-29 百度在线网络技术(北京)有限公司 应用加载方法和装置
CN107729085A (zh) * 2017-10-19 2018-02-23 北京空间飞行器总体设计部 一种支持地址重定向的星载软件动态加载方法
CN108776594A (zh) * 2018-06-05 2018-11-09 西安交通大学 适用于处理器实时控制的软件编程及其汇编链接方法
CN108845935A (zh) * 2018-05-30 2018-11-20 武汉高仕达电气有限公司 一种嵌入式软件测试方法及系统
CN110659088A (zh) * 2019-09-20 2020-01-07 浙江杰芯科技有限公司 一种嵌入式环境下程序扩展的方法及系统
CN111190658A (zh) * 2020-01-08 2020-05-22 乐鑫信息科技(上海)股份有限公司 一种基于片内执行且在不具有MMU的SoC片上支持应用程序动态加载的系统
CN111913762A (zh) * 2020-08-20 2020-11-10 北京机电工程研究所 一种预留运行内存空间的dsp动态加载方法
CN112099799A (zh) * 2020-09-21 2020-12-18 天津飞腾信息技术有限公司 Numa感知的smp系统只读代码段多副本优化方法及系统
CN114880076A (zh) * 2022-05-11 2022-08-09 科东(广州)软件科技有限公司 一种用户态虚拟机的动态映像文件的动态加载方法及装置
CN115408104A (zh) * 2022-08-25 2022-11-29 科东(广州)软件科技有限公司 一种映像的加载方法与装置及生成方法与装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060080680A1 (en) * 2004-10-12 2006-04-13 Majid Anwar Platform independent dynamic linking
CN100489781C (zh) * 2005-03-28 2009-05-20 华为技术有限公司 对目标文件进行定位的方法和装置
CN100552628C (zh) * 2005-09-02 2009-10-21 腾讯科技(深圳)有限公司 在无线二进制运行环境平台实现动态链接库方法

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011137769A1 (zh) * 2010-10-13 2011-11-10 华为技术有限公司 一种多核在线补丁方法和装置
US9430399B2 (en) 2010-10-13 2016-08-30 Huawei Technologies Co., Ltd. Multi-core online patching method and apparatus
CN103309684A (zh) * 2012-03-07 2013-09-18 腾讯科技(深圳)有限公司 动态加载应用的方法及装置
CN102750364A (zh) * 2012-06-13 2012-10-24 华为技术有限公司 为多镜像文件分配内存地址空间的方法、编译器和系统
CN102750364B (zh) * 2012-06-13 2014-08-13 华为技术有限公司 为多镜像文件分配内存地址空间的方法、编译器和系统
CN104572224A (zh) * 2015-02-04 2015-04-29 南车株洲电力机车研究所有限公司 一种out文件加载方法、装置及系统
US11086638B2 (en) 2015-12-25 2021-08-10 Baidu Online Network Technology (Beijing) Co., Ltd. Method and apparatus for loading application
WO2017107415A1 (zh) * 2015-12-25 2017-06-29 百度在线网络技术(北京)有限公司 应用加载方法和装置
CN107729085A (zh) * 2017-10-19 2018-02-23 北京空间飞行器总体设计部 一种支持地址重定向的星载软件动态加载方法
CN108845935A (zh) * 2018-05-30 2018-11-20 武汉高仕达电气有限公司 一种嵌入式软件测试方法及系统
CN108776594B (zh) * 2018-06-05 2021-02-09 西安交通大学 适用于处理器实时控制的软件编程及其汇编链接方法
CN108776594A (zh) * 2018-06-05 2018-11-09 西安交通大学 适用于处理器实时控制的软件编程及其汇编链接方法
CN110659088A (zh) * 2019-09-20 2020-01-07 浙江杰芯科技有限公司 一种嵌入式环境下程序扩展的方法及系统
CN110659088B (zh) * 2019-09-20 2022-11-25 浙江杰芯科技有限公司 一种嵌入式环境下程序扩展的方法及系统
CN111190658A (zh) * 2020-01-08 2020-05-22 乐鑫信息科技(上海)股份有限公司 一种基于片内执行且在不具有MMU的SoC片上支持应用程序动态加载的系统
CN111190658B (zh) * 2020-01-08 2023-02-28 乐鑫信息科技(上海)股份有限公司 一种基于片内执行且在不具有MMU的SoC片上支持应用程序动态加载的系统
CN111913762A (zh) * 2020-08-20 2020-11-10 北京机电工程研究所 一种预留运行内存空间的dsp动态加载方法
CN111913762B (zh) * 2020-08-20 2024-04-19 北京机电工程研究所 一种预留运行内存空间的dsp动态加载方法
CN112099799A (zh) * 2020-09-21 2020-12-18 天津飞腾信息技术有限公司 Numa感知的smp系统只读代码段多副本优化方法及系统
CN114880076A (zh) * 2022-05-11 2022-08-09 科东(广州)软件科技有限公司 一种用户态虚拟机的动态映像文件的动态加载方法及装置
CN114880076B (zh) * 2022-05-11 2023-02-03 科东(广州)软件科技有限公司 一种用户态虚拟机的动态映像文件的动态加载方法及装置
CN115408104A (zh) * 2022-08-25 2022-11-29 科东(广州)软件科技有限公司 一种映像的加载方法与装置及生成方法与装置
CN115408104B (zh) * 2022-08-25 2023-08-11 科东(广州)软件科技有限公司 一种映像的加载方法与装置及生成方法与装置

Also Published As

Publication number Publication date
CN101661397B (zh) 2012-09-12

Similar Documents

Publication Publication Date Title
CN101661397B (zh) 实现程序动态加载的方法和生成映射文件的方法及设备
US9558096B2 (en) Method and apparatus for supporting performance analysis
US20110154299A1 (en) Apparatus and method for executing instrumentation code
US9058257B2 (en) Persistent block storage attached to memory bus
US7617490B2 (en) Methods and apparatus for dynamic best fit compilation of mixed mode instructions
CN101361058A (zh) 经定性化注释的代码
US20100149194A1 (en) Method And System For Enabling Managed Code-Based Application Program To Access Graphics Processing Unit
JP2015505412A (ja) パフォーマンスおよびエネルギー消費量に基づいた効率的なコードディスパッチ
CN104156234A (zh) 启动多核处理器、bootloader大小端模式自适应的方法及装置
CN109901847A (zh) 一种基于存储卡的量产系统固件量产方法
Puffitsch et al. Worst-case analysis of heap allocations
CN103154891A (zh) 虚拟机阶段检测
US20030233536A1 (en) Automatic selection of firmware for a computer that allows a plurality of process types
CN116700629B (zh) 数据处理方法和装置
CN112130789B (zh) 片内RAM空间不足转片内flash存储的方法
CN103106086B (zh) 操作系统处理方法以及系统
CN111694580B (zh) 存储设备升级及初始化的方法、装置、电子设备
US20070204258A1 (en) Method of invoking inlined method and java virtual machine using the method
JP4870956B2 (ja) 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部
CN110716833B (zh) 用于测量ssd单次进入ps4状态时所造成的nand flash写入量的方法
US20040172624A1 (en) Compiler apparatus and method for determining locations for data in memory area
CN114912396A (zh) 基于虚拟接口实现逻辑系统设计的物理接口的方法及设备
Venkat et al. Energy Harvesting Systems Need an Operating System Too
EP4195035A1 (en) Performance enhancement for application development utilizing smart runtime analyzer and advisor
CN117251234B (zh) 基于补丁的函数调用方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant