CN102819439B - 一种基于重定位的多制式应用程序的动态加载方法和装置 - Google Patents

一种基于重定位的多制式应用程序的动态加载方法和装置 Download PDF

Info

Publication number
CN102819439B
CN102819439B CN201110155380.2A CN201110155380A CN102819439B CN 102819439 B CN102819439 B CN 102819439B CN 201110155380 A CN201110155380 A CN 201110155380A CN 102819439 B CN102819439 B CN 102819439B
Authority
CN
China
Prior art keywords
standard
symbol
application program
memory
dll
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
Application number
CN201110155380.2A
Other languages
English (en)
Other versions
CN102819439A (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.)
ZTE Corp
Original Assignee
ZTE Corp
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 ZTE Corp filed Critical ZTE Corp
Priority to CN201110155380.2A priority Critical patent/CN102819439B/zh
Publication of CN102819439A publication Critical patent/CN102819439A/zh
Application granted granted Critical
Publication of CN102819439B publication Critical patent/CN102819439B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于重定位的多制式应用程序的动态加载方法和装置,该方法包括:把RTOS加载至操作系统专区,把各制式应用程序的动态库DLL加载至存储器的副本区,把用于配置各制式单独或组合运行的脚本文件加载至链接脚本区,并填写当前运行的单独或组合制式应用程序的配置;根据配置字解析脚本文件,从副本区中加载对应的DLL至运行区;根据重定位表对DLL中的符号在运行区进行重定位;启动运行区的应用程序。本发明采用在代码加载阶段完成各制式的任意组合,编译时仅需要建立单个制式的工程项目,用较少的代码量实现了一个基站对多制式的支持。

Description

一种基于重定位的多制式应用程序的动态加载方法和装置
技术领域
本发明涉及嵌入式软件系统的动态加载技术,特别涉及一种基于重定位的多制式应用程序的动态加载方法和装置。
背景技术
在成本战略的今日,人们总希望以最少的硬件实现最多的应用,这种场景的需求越来越多。比如,随着移动通信技术的飞速发展,呈现出了越来越多的协议标准,包括UMTS,CDMA2000,TD-SCDMA,WiMAX,LTE等等,对基站的设计也提出了更高的要求。在2G时代一个基站只需要满足一种制式,因为用户的移动通讯终端只支持GSM、CDMA其中一种制式,但随着3G时代的到来,带来了更多的制式,可供用户选择的移动通讯终端随着制式的不同呈现差异化,一个小区内会出现多种制式的终端,在同一个小区内建立多个不同制式的基站的形式成本太高,为了满足不同用户的差异化需求,就要求每一个基站同时可以支持多种制式。
采用传统方式,各制式的应用软件与嵌入式RTOS(Real-time operating system,实时操作系统)是一起编译的。基站要支持多制式,就意味着每种制式可以单独运行,其任意组合也可以同时运行,这就需要为每一种场景建立其相应的工程项目,进行独立编译。
多制式运行时,后台主机根据不同的制式设置,加载相应工程项目的可执行文件到存储器,然后启动运行。当制式需要切换时,就必须断电,后台主机重新加载相应工程项目的代码,因为我们不可能把所有可能运行的制式及其组合的工程代码全部放在DDR中,这样代码量太大。
这种方式虽然也能实现一个基站对多制式的支持,但是,这样势必导致工程项目繁多,各个工程项目之间存在大量的重复代码,使得耦合性紧密,为操作维护带来了不便。
发明内容
本发明的目的在于提供一种基于重定位的多制式应用程序的动态加载方法和装置,用于解决用较少的代码量实现一个基站对多制式的支持的问题。
根据本发明的一个方面,提供了一种基于重定位的多制式应用程序的动态加载方法,包括以下步骤:
A、把RTOS加载至操作系统专区,把各制式应用程序的动态库DLL(Dynamic LinkLibrary,动态链接库)加载至存储器的副本区,把用于配置各制式单独或组合运行的脚本文件加载至链接脚本区,并填写当前运行的单独或组合各制式应用程序的配置字;
B、根据配置字解析脚本文件,从副本区中加载对应的DLL至运行区;
C、根据重定位表对DLL中的符号在运行区进行重定位;
D、启动运行区的应用程序。
优选的,在步骤A之前,包括:
把存储器分成副本区、链接脚本区和运行区。
优选的,脚本文件是各制式单独或组合运行的DLL在存储器中的分布信息,分布信息包括各制式的字段名、占用的空间,及其在副本区中的首地址和运行区的加载地址。
优选的,重定位表存储了DLL需要重定位的符号、引用所述符号的地址信息及重定位类型。
优选的,重定位是根据重定位表中的符号,遍历全局符号表找出符号的存储地址,并根据重定位类型对引用符号的存储地址进行修改。
优选的,全局符号表是模块加载时收集的所有符号的信息。
根据本发明的另一方面,提供了一种基于重定位的多制式应用程序的动态加载装置,包括:
初始化单元,用于把RTOS加载至操作系统专区,把各制式应用程序的DLL加载至存储器的副本区,把用于配置各制式单独或组合的脚本文件加载至链接脚本区,并填写当前运行的单独或组合各制式应用程序的配置字;
加载单元,用于根据配置字解析脚本文件,从副本区中加载对应的DLL至运行区;
重定位单元,用于根据重定位表对DLL中的符号在运行区进行重定位;
程序运行单元,启动运行区的应用程序。
优选的,重定位表存储了DDL需要重定位的符号、引用符号的存储地址及重定位类型。
优选的,重定位单元还用于根据重定位表中的符号,遍历全局符号表找出符号的存储地址,并根据重定位类型对引用符号的存储地址进行修改,全局符号表是模块加载时收集的所有符号的信息。
与现有技术相比较,本发明的有益效果在于:本发明采用在代码加载阶段完成各制式的任意组合,编译时仅需要建立单个制式的工程项目,用较少的代码量实现了一个基站对多制式的支持。
附图说明
图1是本发明实施例提供的基于重定位的多制式应用程序的动态加载方法的流程示意图;
图2是本发明实施例提供的基于重定位的多制式应用程序的动态加载装置的示意图;
图3是本发明实施例提供的实现多制式应用程序的动态加载的代码分布示意图;
图4是本发明实施例提供的实现基于重定位的动态加载的流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1显示了本发明实施例提供的基于重定位的多制式应用程序的动态加载方法的流程示意,如图1所示:
步骤S101,把存储器分成三个区,分别为副本区,链接脚本区和运行区,副本区用于存放所有制式的应用层应用程序,链接脚本区用于描述各个制式单独运行及其组合时相关应用程序在内存中的分布,运行区是应用程序执行的空间区域。并且,对RTOS进行编译,其中,传递给RTOS的存储地址是操作系统专区的存储地址。把RTOS加载至操作系统专区,把各制式应用程序加载至副本区,把用于进行各制式单独或组合的脚本文件加载至链接脚本区,并填写当前运行的单独或组合各制式应用程序的配置字,放在固定地址中。
步骤S102,启动加载器,并根据配置字解析脚本文件,从副本区中加载对应的DLL至运行区。脚本文件描述了各制式单独或组合时应用程序在存储器中的分布信息,加载器根据脚本文件从副本区中加载相应的DLL到运行区。其中,分布信息包括各制式的字段名、占用的空间,及其在副本区中的首地址和运行区的加载地址。
步骤S103,根据重定位表对DLL中的符号在运行区进行重定位。重定位表存储了DLL需要重定位的符号、引用符号的地址信息及重定位类型。重定位是根据重定位表中的符号,遍历全局符号表找出符号的存储地址,并根据重定位类型对引用符号的存储地址进行修改。全局符号表是模块加载时收集的所有符号的信息。
步骤S104,在完成DLL的所有符号的重定位后,跳出加载器,启动运行区的应用程序。
如果进行制式切换,后台主机重新填写配置字,以中断的方式通知RTOS,加载器提取配置字并重新运行脚本文件,加载相应的DLL到运行区,然后遍历DLL中的重定位表,对所有符号进行重定位。
图2显示了本发明提供的基于重定位的多制式应用程序的动态加载装置的示意,如图2所示,初始化单元把存储器分成三个区,分别为副本区,链接脚本区和运行区,副本区用于存放所有制式的应用层应用程序,链接脚本区用于描述各个制式单独运行及其组合时相关应用程序在内存中的分布,运行区是应用程序执行的空间区域。并且,对RTOS进行编译,其中,传递给RTOS的存储地址是操作系统专区的存储地址。初始化单元把RTOS加载至操作系统专区,把各制式应用程序加载至副本区,把用于进行各制式单独或组合的脚本文件加载至链接脚本区,并填写当前运行的单独或组合各制式应用程序的配置字,放在固定地址中。其中,脚本文件是各制式单独或组合的应用程序在存储器中的分布信息,分布信息包括各制式的字段名、占用的空间,及其在副本区中的首地址和运行区的加载地址。
加载单元根据配置字解析脚本文件,从副本区中加载对应的DLL至运行区。
重定位单元根据重定位表对DLL中的符号在运行区进行重定位。重定位表存储了DLL需要重定位的符号、引用符号的地址信息及重定位类型。重定位是根据重定位表中的符号,遍历全局符号表找出符号的存储地址,并根据重定位类型对引用符号的存储地址进行修改。全局符号表是模块加载时收集的所有符号的信息。
程序运行单元启动运行区的应用程序。
图3显示了本发明实施例提供的实现多制式应用程序的动态加载的代码分布示意,如图3所示,把存储器分为三个区:副本区、链接脚本区和运行区,其中,副本区是用来存放所有制式的应用层应用程序,这样在发生制式切换时后台主机不需要重新加载相关应用程序,链接脚本区主要用来描述各个制式单独运行及其任意组合时,相关应用程序在内存中的分布,运行区是应用程序执行时的空间区域,根据脚本文件把副本区的相关应用程序加载到该区域,做相应的重定位处理后方可正常运行。
采用这种方法,所有制式的应用层应用程序编译不再是以前的静态编译,而是要制作成动态库,但RTOS依然是静态编译,生成一个可执行文件,因为动态加载仅仅改变应用层的应用程序位置,而RTOS在任何制式下都是相同的,没必要跟着制式的切换也改变位置。RTOS在静态编译时,链接脚本中描述的地址必须是操作系统专区的地址,不然RTOS被加载到该区域后无法正常运行。为了实现各种制式的动态加载,必须编写一个脚本文件,该脚本在应用程序加载时用于提供各制式单独或任意组合,其应用程序在存储器中的分布状况,描述信息主要包括section段名,占用空间的大小,及其在副本中的首地址和运行区的加载地址。
图4显示了本发明实施例提供的实现基于重定位的动态加载的流程,如图4所示:
步骤S401,后台主机在启动阶段加载所有相关的应用程序:RTOS加载到操作系统专区,各个制式的应用层的动态库加载到DDR相应的副本区,脚本文件存放在链接脚本区。
步骤S402,后台主机与RTOS事先确定一个地址用于填写配置字,然后把控制权交给RTOS,即RTOS启动运行。
步骤S403,RTOS启动,做相应的初始化,并为加载器的使用搭建好环境,然后启动RTOS内的加载器,根据配置字开始解析脚本文件。
步骤S404,脚本文件描述了各制式单独或任意组合时应用程序在存储器中的分布信息,加载器根据脚本信息走不同的分支,从副本区中加载相应的DLL到运行区。
步骤S405,DLL是不能直接运行的,因为它在编译时的所有引用地址均是以0地址开始偏移的,与存储地址无关,所以此时必须收集DLL中的符号信息,然后遍历重定位表,对所有的符号进行重定位。
步骤S406,完成DLL中所有符号的解析和重定位,跳出加载器,开始启动运行应用程序。
步骤S407,如果发生制式切换,后台主机重新填写配置字,以中断的方式通知RTOS,加载器提取配置字并重新解析脚本文件,加载相应的动态库到运行区,然后遍历动态库中的重定位表,对所有符号进行重定位。
综上所述,本发明具有以下技术效果:本发明把各制式的组合放在加载阶段完成,编译时仅仅只需建立单个制式的工程项目,用较少的代码量实现了一个基站对多制式的支持,避免了传统方式的工程项目繁多和存在大量重复代码的问题。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。

Claims (8)

1.一种基于重定位的多制式应用程序的动态加载方法,其特征在于,包括以下步骤:
把存储器分成副本区、链接脚本区和运行区;
把实时操作系统RTOS加载至操作系统专区,把各制式应用程序的动态库DLL加载至所述存储器的副本区,把用于配置各制式单独或组合运行的脚本文件加载至所述存储器的链接脚本区,并填写当前运行的单独或组合制式应用程序的配置字;
根据所述配置字解析脚本文件,从所述存储器的副本区中加载对应的DLL至所述存储器的运行区;
根据重定位表对所述DLL中的符号在所述存储器的运行区进行重定位;以及
启动所述存储器的运行区的应用程序。
2.根据权利要求1所述的方法,其特征在于,所述脚本文件是各制式单独或组合运行的DLL在存储器中的分布信息,所述分布信息包括各制式的字段名、占用的空间,及其在副本区中的首地址和运行区的加载地址。
3.根据权利要求1至2任意一项所述的方法,其特征在于,所述重定位表存储了所述DLL需要重定位的符号、引用所述符号的地址信息及重定位类型。
4.根据权利要求3所述的方法,其特征在于,所述重定位是根据重定位表中的符号,遍历全局符号表找出所述符号的存储地址,并根据所述重定位类型对引用所述符号的存储地址进行修改。
5.根据权利要求4所述的方法,其特征在于,所述全局符号表是模块加载时收集的所有符号的信息。
6.一种基于重定位的多制式应用程序的动态加载装置,其特征在于,包括:
初始化单元,用于把实时操作系统RTOS加载至操作系统专区,把各制式应用程序的动态库DLL加载至存储器的副本区,把用于配置各制式单独或组合运行的脚本文件加载至所述存储器的链接脚本区,并填写当前运行的单独或组 合制式应用程序的配置字;
加载单元,用于根据所述配置字解析脚本文件,从所述存储器的副本区中加载对应的DLL至所述存储器的运行区;
重定位单元,用于根据重定位表对所述DLL中的符号在所述存储器的运行区进行重定位;以及
程序运行单元,启动所述存储器的运行区的应用程序。
7.根据权利要求6所述的装置,其特征在于,所述重定位表存储了所述DLL需要重定位的符号、引用所述符号的存储地址及重定位类型。
8.根据权利要求7所述的装置,其特征在于,所述重定位单元还用于根据重定位表中的符号,遍历全局符号表找出所述符号的存储地址,并根据所述重定位类型对引用所述符号的存储地址进行修改,所述全局符号表是模块加载时收集的所有符号的信息。
CN201110155380.2A 2011-06-10 2011-06-10 一种基于重定位的多制式应用程序的动态加载方法和装置 Active CN102819439B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110155380.2A CN102819439B (zh) 2011-06-10 2011-06-10 一种基于重定位的多制式应用程序的动态加载方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110155380.2A CN102819439B (zh) 2011-06-10 2011-06-10 一种基于重定位的多制式应用程序的动态加载方法和装置

Publications (2)

Publication Number Publication Date
CN102819439A CN102819439A (zh) 2012-12-12
CN102819439B true CN102819439B (zh) 2017-09-29

Family

ID=47303564

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110155380.2A Active CN102819439B (zh) 2011-06-10 2011-06-10 一种基于重定位的多制式应用程序的动态加载方法和装置

Country Status (1)

Country Link
CN (1) CN102819439B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104102500B (zh) * 2013-04-03 2017-12-01 腾讯科技(深圳)有限公司 一种应用程序的进程启动方法及计算机系统
CN104731665B (zh) * 2015-03-30 2018-08-31 联想(北京)有限公司 一种信息处理方法及电子设备
CN106528254A (zh) * 2016-12-16 2017-03-22 中南大学 一种app快速加载方法
CN109814939B (zh) 2017-11-20 2021-10-15 华为技术有限公司 一种动态加载方法、目标文件的制作方法及装置
CN112650501B (zh) * 2020-12-31 2023-07-07 重庆芯讯通无线科技有限公司 编译、终端设备及其客户应用程序的编译链接和加载方法
CN115328454A (zh) * 2021-05-10 2022-11-11 阿里云计算有限公司 程序编译和程序加载方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
US6718546B1 (en) * 1999-04-23 2004-04-06 International Business Machines Corporation Application management
CN101458629A (zh) * 2008-12-31 2009-06-17 北京中星微电子有限公司 嵌入式实时操作系统中实现动态加载的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438557B1 (en) * 1999-06-23 2002-08-20 Ericsson Inc. System and method for performing context switching and rescheduling of a processor
CN100555222C (zh) * 2007-02-15 2009-10-28 凌阳科技股份有限公司 应用程序可重定位加载的方法及地址重定位装置
CN101470619A (zh) * 2007-12-29 2009-07-01 安凯(广州)软件技术有限公司 一种基于微核操作系统的应用程序动态加载方法
CN101593116A (zh) * 2008-05-26 2009-12-02 北京摩软科技有限公司 一种应用于嵌入式实时操作系统的加载方法、移动终端

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6718546B1 (en) * 1999-04-23 2004-04-06 International Business Machines Corporation Application management
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
CN101458629A (zh) * 2008-12-31 2009-06-17 北京中星微电子有限公司 嵌入式实时操作系统中实现动态加载的方法和装置

Also Published As

Publication number Publication date
CN102819439A (zh) 2012-12-12

Similar Documents

Publication Publication Date Title
CN102819439B (zh) 一种基于重定位的多制式应用程序的动态加载方法和装置
CN103473067B (zh) 嵌入式Linux分区与数据还原方法、系统及系统开发方法
CN103744709B (zh) 补丁加载方法及装置
CN103365668B (zh) 一种动态链接库装载和链接的方法、装置
CN107291480B (zh) 一种函数调用方法及装置
KR101213275B1 (ko) 무선 장치에서 사용할모놀리식(monolithic)이미지를 제공하기 위한시스템 및 방법
CN1329836C (zh) 定位程序异常的方法
CN105224370A (zh) 一种加载elf文件的方法和装置
CN111666096B (zh) 目标应用的热更新方法和装置、存储介质和电子设备
CN104714788A (zh) 一种软件安装包自动生成的方法及装置
CN102541572A (zh) 一种实现操作系统内核引导的方法、系统及装置
CN103218428B (zh) 一种动态链接方法及系统
CN104156243A (zh) 一种应用分发和快速加载运行的系统及方法
CN104820586A (zh) 一种航天器嵌入式软件在轨维护方法
CN103970563A (zh) 动态加载安卓类的方法
CN104809018A (zh) 一种嵌入式系统软件注入热补丁的方法及系统
CN102364433B (zh) 在ARM处理器上实现Wine构建工具移植的方法
CN102999352A (zh) 一种嵌入式系统组件加载方法
CN101833464A (zh) 一种移动终端分段加载应用程序的方法及装置
CN110213326A (zh) 元数据节点集群的扩容方法、系统、设备和存储介质
CN103645888A (zh) 一种自动构建操作系统的系统及方法
CN102819440B (zh) 一种多制式应用程序的动态加载方法和装置
CN109298873A (zh) 一种系统升级方法及装置
CN101882094A (zh) 嵌入式系统制作补丁的方法和系统
CN105335206A (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
GR01 Patent grant
GR01 Patent grant