CN102819439A - 一种基于重定位的多制式应用程序的动态加载方法和装置 - Google Patents
一种基于重定位的多制式应用程序的动态加载方法和装置 Download PDFInfo
- Publication number
- CN102819439A CN102819439A CN2011101553802A CN201110155380A CN102819439A CN 102819439 A CN102819439 A CN 102819439A CN 2011101553802 A CN2011101553802 A CN 2011101553802A CN 201110155380 A CN201110155380 A CN 201110155380A CN 102819439 A CN102819439 A CN 102819439A
- Authority
- CN
- China
- Prior art keywords
- reorientation
- symbol
- dll
- standard
- application program
- 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
Links
Images
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 (9)
1.一种基于重定位的多制式应用程序的动态加载方法,其特征在于,包括以下步骤:
A、把实时操作系统RTOS加载至操作系统专区,把各制式应用程序的动态库DLL加载至存储器的副本区,把用于配置各制式单独或组合运行的脚本文件加载至链接脚本区,并填写当前运行的单独或组合制式应用程序的配置字;
B、根据所述配置字解析脚本文件,从副本区中加载对应的DLL至运行区;
C、根据重定位表对所述DLL中的符号在运行区进行重定位;以及
D、启动运行区的应用程序。
2.根据权利要求1所述的方法,其特征在于,在所述步骤A之前,包括:
把存储器分成副本区、链接脚本区和运行区。
3.根据权利要求2所述的方法,其特征在于,所述脚本文件是各制式单独或组合运行的DLL在存储器中的分布信息,所述分布信息包括各制式的字段名、占用的空间,及其在副本区中的首地址和运行区的加载地址。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述重定位表存储了所述DLL需要重定位的符号、引用所述符号的地址信息及重定位类型。
5.根据权利要求4所述的方法,其特征在于,所述重定位是根据重定位表中的符号,遍历全局符号表找出所述符号的存储地址,并根据所述重定位类型对引用所述符号的存储地址进行修改。
6.根据权利要求5所述的方法,其特征在于,所述全局符号表是模块加载时收集的所有符号的信息。
7.一种基于重定位的多制式应用程序的动态加载装置,其特征在于,包括:
初始化单元,用于把实时操作系统RTOS加载至操作系统专区,把各制式应用程序的动态库DLL加载至存储器的副本区,把用于配置各制式单独或组合运行的脚本文件加载至链接脚本区,并填写当前运行的单独或组合制式应用程序的配置字;
加载单元,用于根据所述配置字解析脚本文件,从副本区中加载对应的DLL至运行区;
重定位单元,用于根据重定位表对所述DLL中的符号在运行区进行重定位;以及
程序运行单元,启动运行区的应用程序。
8.根据权利要求7所述的装置,其特征在于,所述重定位表存储了所述DDL需要重定位的符号、引用所述符号的存储地址及重定位类型。
9.根据权利要求8所述的方法,其特征在于,所述重定位单元还用于根据重定位表中的符号,遍历全局符号表找出所述符号的存储地址,并根据所述重定位类型对引用所述符号的存储地址进行修改,所述全局符号表是模块加载时收集的所有符号的信息。
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 true CN102819439A (zh) | 2012-12-12 |
CN102819439B 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) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102500A (zh) * | 2013-04-03 | 2014-10-15 | 腾讯科技(深圳)有限公司 | 一种应用程序的进程启动方法及计算机系统 |
CN104731665A (zh) * | 2015-03-30 | 2015-06-24 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN106528254A (zh) * | 2016-12-16 | 2017-03-22 | 中南大学 | 一种app快速加载方法 |
CN109814939A (zh) * | 2017-11-20 | 2019-05-28 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
CN112650501A (zh) * | 2020-12-31 | 2021-04-13 | 重庆芯讯通无线科技有限公司 | 编译、终端设备及其客户应用程序的编译链接和加载方法 |
WO2022237610A1 (zh) * | 2021-05-10 | 2022-11-17 | 阿里巴巴(中国)有限公司 | 程序编译和程序加载方法 |
Citations (7)
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 |
CN1475909A (zh) * | 2002-08-16 | 2004-02-18 | 华为技术有限公司 | 一种嵌入式系统软件补丁的实现和控制方法 |
US6718546B1 (en) * | 1999-04-23 | 2004-04-06 | International Business Machines Corporation | Application management |
CN101246427A (zh) * | 2007-02-15 | 2008-08-20 | 凌阳科技股份有限公司 | 应用程序可重定位加载的方法及地址重定位装置 |
CN101458629A (zh) * | 2008-12-31 | 2009-06-17 | 北京中星微电子有限公司 | 嵌入式实时操作系统中实现动态加载的方法和装置 |
CN101470619A (zh) * | 2007-12-29 | 2009-07-01 | 安凯(广州)软件技术有限公司 | 一种基于微核操作系统的应用程序动态加载方法 |
CN101593116A (zh) * | 2008-05-26 | 2009-12-02 | 北京摩软科技有限公司 | 一种应用于嵌入式实时操作系统的加载方法、移动终端 |
-
2011
- 2011-06-10 CN CN201110155380.2A patent/CN102819439B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6718546B1 (en) * | 1999-04-23 | 2004-04-06 | International Business Machines Corporation | Application management |
US6438557B1 (en) * | 1999-06-23 | 2002-08-20 | Ericsson Inc. | System and method for performing context switching and rescheduling of a processor |
CN1475909A (zh) * | 2002-08-16 | 2004-02-18 | 华为技术有限公司 | 一种嵌入式系统软件补丁的实现和控制方法 |
CN101246427A (zh) * | 2007-02-15 | 2008-08-20 | 凌阳科技股份有限公司 | 应用程序可重定位加载的方法及地址重定位装置 |
CN101470619A (zh) * | 2007-12-29 | 2009-07-01 | 安凯(广州)软件技术有限公司 | 一种基于微核操作系统的应用程序动态加载方法 |
CN101593116A (zh) * | 2008-05-26 | 2009-12-02 | 北京摩软科技有限公司 | 一种应用于嵌入式实时操作系统的加载方法、移动终端 |
CN101458629A (zh) * | 2008-12-31 | 2009-06-17 | 北京中星微电子有限公司 | 嵌入式实时操作系统中实现动态加载的方法和装置 |
Non-Patent Citations (2)
Title |
---|
夏爽: ""ARM处理器的分散加载及特殊应用研究"", 《计算机与嵌入式系统应用》 * |
孟钢等: ""多映像加载方法在嵌入式系统程序调试中的应用"", 《计算机工程与应用》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102500A (zh) * | 2013-04-03 | 2014-10-15 | 腾讯科技(深圳)有限公司 | 一种应用程序的进程启动方法及计算机系统 |
CN104102500B (zh) * | 2013-04-03 | 2017-12-01 | 腾讯科技(深圳)有限公司 | 一种应用程序的进程启动方法及计算机系统 |
CN104731665A (zh) * | 2015-03-30 | 2015-06-24 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN104731665B (zh) * | 2015-03-30 | 2018-08-31 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN106528254A (zh) * | 2016-12-16 | 2017-03-22 | 中南大学 | 一种app快速加载方法 |
CN109814939A (zh) * | 2017-11-20 | 2019-05-28 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
US10908925B2 (en) | 2017-11-20 | 2021-02-02 | Huawei Technologies Co., Ltd. | Dynamic loading method, and target file creation method and apparatus |
CN109814939B (zh) * | 2017-11-20 | 2021-10-15 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
CN112650501A (zh) * | 2020-12-31 | 2021-04-13 | 重庆芯讯通无线科技有限公司 | 编译、终端设备及其客户应用程序的编译链接和加载方法 |
WO2022237610A1 (zh) * | 2021-05-10 | 2022-11-17 | 阿里巴巴(中国)有限公司 | 程序编译和程序加载方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102819439B (zh) | 2017-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102819439A (zh) | 一种基于重定位的多制式应用程序的动态加载方法和装置 | |
CN111045714B (zh) | 一种固件更新方法、装置、耳机及计算机可读存储介质 | |
CN103513978B (zh) | 一种根据应用的属性信息管理应用布局的方法及系统 | |
CN105095317A (zh) | 分布式数据库服务管理系统 | |
CN104885055A (zh) | 一种应用数据同步的方法及装置 | |
CN101324850B (zh) | Linux内核动态加载方法 | |
CN102110000A (zh) | 一种软件自动升级控制方法、装置及设备 | |
CN104137482A (zh) | 一种云计算架构下的容灾数据中心配置方法及装置 | |
CN101799763A (zh) | 内核在线补丁的方法、装置和系统 | |
CN101984410A (zh) | 软件安装包的生成、卸载方法及装置 | |
CN103218428A (zh) | 一种动态链接方法及系统 | |
CN101246427A (zh) | 应用程序可重定位加载的方法及地址重定位装置 | |
CN102571940A (zh) | 应用程序远程安装系统、方法、智能终端、应用服务器 | |
CN102819440A (zh) | 一种多制式应用程序的动态加载方法和装置 | |
CN101980157A (zh) | 移动终端开机启动方法及移动终端 | |
CN101533350A (zh) | 一种页面快速切换方法、装置和注塑机系统 | |
CN102402622A (zh) | 嵌入式内存数据库的内存页面管理调度方法 | |
CN103049527A (zh) | 一种面向大电网的并行实时数据库主备切换管理系统 | |
CN103458086A (zh) | 一种智能手机及其故障检测方法 | |
CN104809018A (zh) | 一种嵌入式系统软件注入热补丁的方法及系统 | |
CN103793255A (zh) | 可配置的多主模式多os内核实时操作系统架构与启动方法 | |
CN103530427A (zh) | 一种基于多数据库的动态切换方法和装置 | |
CN110874261A (zh) | 可用性系统、方法和存储有程序的存储介质 | |
CN102231116A (zh) | 应用程序虚拟化安装及加载方法及装置 | |
CN109634840A (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 |