一种嵌入式平台和在嵌入式平台上动态链接程序的方法技术

技术编号:2913932 阅读:178 留言:0更新日期:2012-04-11 18:40
本发明专利技术实施例公开了一种嵌入式平台和在嵌入式平台上动态链接程序的方法。该嵌入式平台包括中间层;中间层包括接口类,每个接口类由嵌入式操作系统的多个函数接口封装得到,每个接口类对应一个虚拟函数表,该虚拟函数表的各个元素与所述多个函数接口一一对应。待链接的应用程序包括接口类。将所述应用程序编译成位置独立的代码段、且由该应用程序的不同的函数编译出的代码段的存储位置互不相交,将编译出的所有代码段直接拷贝至嵌入式操作系统内存;通过创建接口类指针,将接口类指针在中间层的接口类和所述应用程序的接口类之间传递实现程序动态链接。应用本发明专利技术能够提高动态链接程序的执行速度。

【技术实现步骤摘要】

本专利技术涉及嵌入式
,尤其涉及一种嵌入式平台和在嵌入式平台上动态链接程序的方法
技术介绍
众所周知,程序链接技术分为静态链接技术和动态链接技术。采用静态链接技术时,在编译阶段,应用程序的地址是确定的,如果当前有多个应用程序调用了函数库里的函数,则需要在内存中拷贝的函数库的份数与所述应用程序个数相同,这将浪费内存空间。而动态链接技术通过提供一种导入库来定位函数库中的函数,这种导入库中仅存储对函数之间的调用关系的描述,并不存储实际的代码,从而能够节约内存空间。目前,在手机等嵌入式产品中,已经实现了程序的动态链接,其采用的是ELF动态链接的方式,具体请见图1。图1是现有技术中采用可执行和链接格式(Executable and LinkingFormat,ELF)方式实现程序动态链接的示意图。如图1所示,采用ELF方式实现程序动态链接时,首先将应用程序编译成ELF格式文件,然后采用ELF加载(ELFLOADER)程序对生成的ELF文件进行函数重定位和变量重定位,再将重定位后的ELF文件加载至嵌入式操作系统(OS)中,最后,该嵌入式操作系统根据该重定位后的函数和变量的位置链接各个函数和变量,从而实现程序的动态链接。采用ELF方式实现程序动态链接时,ELF加载程序起着重要作用,其用于将应用程序中的函数和变量的地址与嵌入式操作系统中的地址对接。具体地,ELF加载程序从ELF格式文件中提取有用信息,计算ELF格式文件-->中的各个函数和变量重定位后的地址,然后按照该地址对函数和变量进行重定位。可见,采用ELF方式实现程序的动态加载时,由于需要从ELF格式文件中提取有用信息,并对这些有用信息进行计算,这一方面导致动态链接程序速度较慢,另一方面,也浪费计算资源。
技术实现思路
有鉴于此,本专利技术的目的在于提供一种可以广泛应用的在嵌入式平台上动态链接程序的方法,以提高动态链接程序的速度。为达到上述目的,本专利技术的技术方案具体是这样实现的:一种嵌入式平台,该嵌入式平台包括中间层;所述中间层包括一个或多个接口类,每个接口类由嵌入式操作系统的多个函数接口封装得到,每个接口类对应一个虚拟函数表,该虚拟函数表的各个元素与所述多个函数接口一一对应;所述中间层通过所述接口类调用所述嵌入式操作系统的多个函数接口。一种在如上所述的嵌入式平台上动态链接程序的方法,待链接的应用程序包括一个或多个接口类,每个接口类由该应用程序的多个函数接口封装得到,每个接口类对应一个虚拟函数表,该虚拟函数表的各个元素分别与所述应用程序的多个函数接口一一对应,该方法包括:将所述应用程序编译成位置独立的代码段、且由该应用程序的不同的函数编译出的代码段的存储位置互不相交,使得应用程序能够在任意存储空间内运行、且应用程序的各个函数能够被独立地调用;将编译出的所有代码段直接拷贝至嵌入式操作系统内存;通过创建接口类指针,将接口类指针在中间层的接口类和所述应用程序的接口类之间传递实现程序动态链接。可见,本专利技术从嵌入式操作系统封装出中间层,该中间层包括一个或多个接口类,每个接口类由嵌入式操作系统的多个函数接口封装得到,每个接口类-->对应一个虚拟函数表,该虚拟函数表的各个元素与所述多个函数接口一一对应,待链接的应用程序包括一个或多个接口类,每个接口类由该应用程序的多个函数接口封装得到,每个接口类对应一个虚拟函数表,该虚拟函数表的各个元素分别与所述应用程序的多个函数接口一一对应,将所述应用程序编译成位置独立的代码段、且由该应用程序的不同的函数编译出的代码段的存储位置互不相交,使得应用程序能够在任意存储空间内运行、且应用程序的各个函数能够被独立地调用;将编译出的所有代码段直接拷贝至嵌入式操作系统内存,通过创建接口类指针,将接口类指针在中间层的接口类和所述应用程序的接口类之间传递实现程序动态链接。由于各个接口类指针一旦被创建,则该接口类指针对应的虚拟函数表的各个元素对应的函数接口则也被实例化,即,这些函数相应地被赋予实际的地址,此时,中间层的接口类对应的各个函数和应用程序对应的各个函数之间通过虚拟函数表实现了动态链接。因此,本专利技术通过创建接口类指针,将该接口类指针在中间层的接口类和所述应用程序的接口类之间传递,可以实现程序的动态链接。并且,由于程序的动态链接是通过创建接口类指针、并在中间层的接口类和应用程序的接口类之间传递所述接口类指针实现的,因此,在将由应用程序编译出的文件加载至内存时,无需从该文件中提取信息来重新计算各个编译代码在内存中的位置,减少了实现程序动态链接所需的时间,提高了程序动态链接的速度。附图说明图1是现有技术中采用ELF方式实现程序动态链接的示意图;图2是本专利技术的嵌入式平台结构图;图3是在图2所示嵌入式平台上动态链接应用程序的示意图;图4是本专利技术中间层和应用程序之间的交互示意图;图5是以一种即时通讯(IM)工具为核心的无线动态应用程序开发环-->境。具体实施方式为使本专利技术的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本专利技术进一步详细说明。图2是本专利技术的嵌入式平台结构图。如图2所示,该嵌入式平台包括中间层。本专利技术从嵌入式操作系统封装出中间层,该中间层由接口类组成,每个接口类对应一个虚拟函数表,虚拟函数表的各个元素与操作系统的各个函数接口对应。在从嵌入式操作系统封装中间层时,可以将嵌入式操作系统的所有函数中、应用程序常用的函数接口封装进中间层,其中,将功能相关联的函数的接口封装为一个接口类。例如将画图函数的接口、文字编辑函数的接口、网络连接函数的接口和信息发送函数的接口封装进中间层,并将画图函数的接口和文字编辑函数的接口封装为一个文档处理接口类,将网络链接函数的接口和信息发送函数的接口封装为一个网络接口类。每个接口类相当于一个组件程序,因此,中间层实际上相当于由多个组件程序组成。图3是在图2所示嵌入式平台上动态链接应用程序的示意图。如图3所示,本专利技术动态链接程序的过程包括:BIN文件编译生成、BIN文件下载存储、BIN文件加载和程序动态链接阶段。本专利技术在图2所示的操作系统上实现动态链接的应用程序也由一个或多个接口类组成,每个接口类由该应用程序的多个函数接口封装得到,每个接口类对应了一个虚拟函数表,每个虚拟函数表的各个元素分别与所述应用程序的多个函数接口一一对应。与中间层的接口类的组成方式相同,应用程序的接口类中的各个接口对应的函数也是彼此相关联的函数。在应用程序中,每个接口类也相当于一个组件程序。因此,通过接口类来实现应用程序,实际上相当于将应用程序划分为多个组件程序。-->需要说明的是,要在嵌入式平台上实现程序的动态链接,需要解决以下四个问题:函数导入问题、函数引出问题、子函数调用问题和全局变量定位问题。函数导入问题是指,需要动态链接的应用程序如何通过中间层调用嵌入式操作系统的函数;函数引出问题是指,嵌入式操作系统如何通过中间层调用应用程序的函数;子函数调用问题是指,应用程序中的子函数是如何被该应用程序或者中间层调用的;全局变量定位问题是指,如果应用程序中包含全局变量,如何实现在将应用程序链接到嵌入式平台后,将该应用程序中的全局变量在所述嵌入式平台中实现重定位。函数导入问题和函数引出问题主要涉及BIN文件编译生成阶段和程序动态链接阶段;本文档来自技高网
...

【技术保护点】
一种嵌入式平台,其特征在于,该嵌入式平台包括中间层; 所述中间层包括一个或多个接口类,每个接口类由嵌入式操作系统的多个函数接口封装得到,每个接口类对应一个虚拟函数表,该虚拟函数表的各个元素与所述多个函数接口一一对应; 所述中间层 通过所述接口类调用所述嵌入式操作系统的多个函数接口。

【技术特征摘要】
1、一种嵌入式平台,其特征在于,该嵌入式平台包括中间层;所述中间层包括一个或多个接口类,每个接口类由嵌入式操作系统的多个函数接口封装得到,每个接口类对应一个虚拟函数表,该虚拟函数表的各个元素与所述多个函数接口一一对应;所述中间层通过所述接口类调用所述嵌入式操作系统的多个函数接口。2、一种在如权利要求1所述的嵌入式平台上动态链接程序的方法,其特征在于,待链接的应用程序包括一个或多个接口类,每个接口类由该应用程序的多个函数接口封装得到,每个接口类对应一个虚拟函数表,该虚拟函数表的各个元素分别与所述应用程序的多个函数接口一一对应,该方法包括:将所述应用程序编译成位置独立的代码段、且由该应用程序的不同的函数编译出的代码段的存储位置互不相交;将编译出的所有代码段拷贝至嵌入式操作系统内存;通过创建接口类指针,将接口类指针在中间层的接口类和所述应用程序的接口类之间传递实现程序动态链接。3、如权利要求2所述的方法,其特征在于,所述应用程序包括全局变量,该方法进一步包括:将所述应用程序中的全局变量编译成位置独立的数据段,将该数据段存储在所述位置独立的代码段之后,实现程序动态链接过程中的全局变量重定位。4、如权利要求2所述的方法,其特征在于,所述应用程序包括全局变量和结构体,该方法进一步包括:将所述应用程序中的全局变量存储在该应用程序的结构体中;所述编译成位置独立的代码段包括:将所述结构体编译成位置独立的代码段。5、如权利要求2所述的方法,其特征在于,将所述应用程序编译成位置独立的代码段、且由该应用程序的不同的函数编译出的代码段的存储位置互不相交为:采用嵌入式操作系统ARM ADS1.2编译器中的编译选项ACPS/ROPI和ZO编译所述应...

【专利技术属性】
技术研发人员:吴志华古佳邱璇
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1