CN101668283A - 一种手机嵌入式系统中动态加载的方法 - Google Patents

一种手机嵌入式系统中动态加载的方法 Download PDF

Info

Publication number
CN101668283A
CN101668283A CN200810042343A CN200810042343A CN101668283A CN 101668283 A CN101668283 A CN 101668283A CN 200810042343 A CN200810042343 A CN 200810042343A CN 200810042343 A CN200810042343 A CN 200810042343A CN 101668283 A CN101668283 A CN 101668283A
Authority
CN
China
Prior art keywords
function
program
read
parameter
file
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.)
Pending
Application number
CN200810042343A
Other languages
English (en)
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.)
Network technology (Shanghai) Co., Ltd.
Science and Technology (Beijing) Co., Ltd. graduates jobs
Original Assignee
NETWORK TECHNOLOGY (SHANGHAI) 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 NETWORK TECHNOLOGY (SHANGHAI) Co Ltd filed Critical NETWORK TECHNOLOGY (SHANGHAI) Co Ltd
Priority to CN200810042343A priority Critical patent/CN101668283A/zh
Publication of CN101668283A publication Critical patent/CN101668283A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种手机嵌入式系统中动态加载的方法,包含如下步骤:编译应用程序;加载程序文件,通过节头表读出指令及只读数据节、初始化的全局变量节和未初始化的全局变量节在程序文件中的位置;初始化运行环境;参数替换,当执行该初始化运行环境步骤至函数_rt_init_stackheap()时,用加载器传入的参数替换_rt_init_stackheap()函数;继续初始化;生成目标代码;调用宿主函数;中断C运行时库的退出部分流程,完成程序文件的动态加载过程。

Description

一种手机嵌入式系统中动态加载的方法
技术领域
本发明涉及无线通信技术领域,尤其涉及一种增强手机嵌入式系统加载功能的方法。
背景技术
传统的手机嵌入式系统(例如ARM、Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX、Rtems、QNX、INTEGRITY、OSE、C Executive等系统)都是把程序全部烧入只读存储器(ROM)中,手机在FLASH上加载并运行程序。动态加载功能目前只有智能机操作系统(SYMBIAN、WINDOWS MOBILE)才有,采用实时操作系统的手机平台(例如基于MIPS的RTOS平台)不具备动态加载功能。因此,程序的使用受到FLASH大小的限制,并且若程序员需要更新程序,则只能全部更新,而无法做到部分地更新。
要解决上述问题,目前市面上有一种系统:高通的BREW,但是BREW必须配套高通专门的芯片才能使用。
因此,手机开发业界存在一种技术需求:提供一种手机嵌入式系统中动态加载的方法,使得实时操作系统具备动态加载功能。
发明内容
本发明的目的是提供一种手机嵌入式系统中动态加载的方法,包含如下步骤:
编译应用程序,将应用程序独立编译为一个程序文件,程序文件描述了程序文件所支持的处理器架构及节头表所在的位置;
加载程序文件,通过节头表读出指令及只读数据节、初始化的全局变量节和未初始化的全局变量节在程序文件中的位置,将指令及只读数据节、初始化的全局变量节和未初始化的全局变量节加载到内存的适当位置即实现程序的动态加载;
初始化运行环境,将堆栈和堆的配置参数传递给应用程序,重构_rt_stackheap_init()函数;
参数替换,当执行初始化运行环境步骤至函数_rt_init_stackheap()时,用加载器传入的参数替换_rt_init_stackheap()函数;
继续初始化,用加载器传入的参数继续初始化程序运行环境步骤;
生成目标代码,将应用程序生成为ROPI(READ ONLYPOSITION INDEPENDENT,只读位置无关)和RWPI(READ WRITE POSITION INDEPENDENT,读写位置无关)代码模式;
调用宿主函数,首先将宿主函数名称传递给符号表函数,符号表函数将宿主函数的地址返回给应用程序,应用程序将宿主函数的入口参数填写完毕后跳转至函数地址,即完成调用宿主函数的过程;
中断C运行时库的退出部分流程,完成程序文件的动态加载过程。
在本发明的其中一个实施例中,加载应用程序的步骤包含如下步骤:
读入程序文件头部的加载信息;
根据加载信息计算程序加载后所需要使用的内存容量;
根据加载信息将程序加载到内存中;
初始化传递给程序的参数列表,将参数列表复制到程序的参数区;
跳转到程序的入口地址。
本发明的优点是:使手机的实时操作系统具有动态加载功能。
附图说明
下面结合附图,通过对本发明的具体实施方式的详细描述,将使本发明的技术方案及其他有益效果显而易见。
图1为本发明手机嵌入式系统中动态加载的方法流程图;
图2为本发明中加载程序文件的工作流程图。
具体实施方式
为了更进一步了解本发明的特征,请参阅以下有关本发明的详细说明与附图,然而所附图式仅提供参考与说明之用,并非用来对本发明的保护范围加以限制。
如图1所示,为本发明方法的流程图。首先101程序开始执行,然后执行102编译应用程序;编译应用程序:将应用程序独立编译为一个程序文件,主流的程序文件格式有ELF(Executable and LinkableFormat)、a.out(UNIXv5标准)、PE(Portable Executable,Microsoft Windows专用格式)。ARM公司提供的ADS所生成的程序文件格式是ELF,ELF相对于平面结构的a.out格式有着更好的扩展性和平台无关性,相对于Windows专用的PE格式,ELF能够更好地支持异构平台。ELF文件的格式如下表所示:其文件头部的ELF header描述了程序文件所支持的处理器架构及节头表(Section header table)所在的位置。
  ELF header
  Program header table
  .text
  .rodate
  .data
  Section header table
之后执行103,由加载器加载程序文件;加载程序文件时,首先为只读段和读写段分配内存,这部分
内存用于保存代码与数据,加载次序为ER_RO(代码及只读数据)、ER_RW(初始化的全局变量)、ER_ZI(未初始化的全局变量)。程序和中间件使用同一个堆栈,中间件分配一块连续内存作为程序的堆,程序的动态内存分配在堆中实现。
通过节头表读出ER_RO(指令及只读数据节)、ER_RW(初始化的全局变量)和ER_ZI(未初始化的全局变量)在程序文件中的位置,将这些节加载到内存的适当位置即可实现程序文件的动态加载。
程序文件加载后的内存映像如图3所示。
ER_RO被加载到上表中的只读段,ER_RW和ER_ZI被依次加载到上表中的读写段,堆和堆栈的分配由加载器负责。
之后执行步骤104,初始化运行环境。程序加载完毕后,初始化运行环境。初始化运行环境包括堆和堆栈的初始化。堆用于保存动态分配的内存,堆栈在函数调用时用于保存临时变量及保护现场。
根据ARM C RUNTIME(C语言运行时库,这是C语言链接到程序中的一组系统代码)规范,堆及堆栈初始化必须重构_rt_stackheap_init()函数。这个函数的默认以ARM的SEMI HOSTING实现,由于大多数手机开发平台都没有实现SEMI HOSTING,因此需要重构该函数。
由于堆栈和堆是由VRE的加载器实现的,而_rt_stackheap_init()函数在被加载程序中,所以加载器必须把堆栈和堆的配置参数通过某种方式传递给应用程序。参数至少包括堆和堆栈配置、宿主函数符号表函数。传递方式有两种,一是通过堆栈传递,二是通过共享内存传送。由于ADS在不同编译参数下会链接不同的目标库,而堆栈的分配和目标库有关,因此用堆栈传递会降低系统可移植性,所以VRE采用共享内存传递参数方式。
被传递的参数被存放在堆以下的128字节中,应用程序中的_rt_stackheap_init()函数通过这块内存获取加载器传递过来的参数。获得参数后,_rt_stackheap_init()按照ARM的约定把堆和堆栈的配置参数通过R0~R3寄存器返回给C RUNTIME(C语言运行时库,这是C语言链接到程序中的一组系统代码),这样即重构了_rt_stackheap_init(),也即修改了该函数的默认实现,其重构后,按照新的流程执行。之后生成目标代码;为了支持程序的动态加载,应用程序必须以ROPI(READ ONLYPOSITION INDEPENDENT,只读位置无关)和RWPI(READ WRITE POSITION INDEPENDENT,读写位置无关)(Read Only/Read WritePosition Independent)模式生成。ADS的ARMCC编译器通过加入-apcs/ROPI(Read Only PositionIndependent,只读位置无关)/RWPI(Read Write Position Independent,读写位置无关)参数编译代码,ARMLINK加-ROPI(Read Only Position Independent,只读位置无关)-RWPI(Read Write PositionIndependent,读写位置无关)参数生成程序文件。
支持ROPI(READ ONLY POSITION INDEPENDENT,只读位置无关)和RWPI(READ WRITEPOSITION INDEPENDENT,读写位置无关)代码采用了基于PC和SB(STATIC BASE,静态基址寄存器)寄存器寻址方式,即对函数和只读数据的寻址基于PC,而全局变量的寻址基于SB(STATIC BASE,静态基址寄存器)寄存器。这种寻址方式是ARM ATPCS规定的,因此采用本方法完全符合ARM的标准,不需要另外开发编译器和连接器。
当执行初始化至函数_rt_init_stackheap()时,执行步骤105,用加载器传入的参数替换_rt_init_stackheap()函数;然后执行步骤106,用加载器传入的参数继续初始化程序运行环境。
之后,执行步骤107,执行程序的main()函数,也即调用宿主函数。宿主函数的地址通过符号表函数返回,当应用程序要调用一个系统函数时,首先把函数名称传递给符号表函数,符号表函数把这个函数的地址返回给应用程序,应用程序把系统函数的入口参数填写完毕后跳转至函数地址,即完成调用过程。程序文件执行完毕后,即执行步骤108,中断C运行时库的退出部分流程。因为如果让C运行时库继续执行下去,程序文件就会被强制退出,这样加载就失败了,所以必须执行步骤108,将默认的流程中断,才能完成程序文件的加载过程。109结束。
如图2所示,为本发明加载程序文件的工作流程图。首先执行201步骤,读入程序文件头部的加载信息;然后执行步骤202,根据加载信息计算程序文件加载后所需要使用的内存容量;步骤203根据加载信息将程序文件加载到内存之中;步骤204初始化传递给程序的参数列表,将列表复制到程序的参数区;205跳转到程序的入口地址。

Claims (2)

1.一种手机嵌入式系统中动态加载的方法,其特征在于,包含如下步骤:
编译应用程序,将该应用程序独立编译为一个程序文件,该程序文件描述了程序文件所支持的处理器架构及节头表所在的位置;
加载程序文件,通过节头表读出指令及只读数据节、初始化的全局变量节和未初始化的全局变量节在程序文件中的位置,将该指令及只读数据节、该初始化的全局变量节和该未初始化的全局变量节加载到内存的适当位置即实现程序的动态加载;
初始化运行环境,将堆栈和堆的配置参数传递给该应用程序,重构_rt_stackheap_init()函数;
参数替换,当执行该初始化运行环境步骤至函数_rt_init_stackheap()时,用加载器传入的参数替换_rt_init_stackheap()函数;
继续初始化,用加载器传入的参数继续该初始化程序运行环境步骤;
生成目标代码,将该应用程序生成为ROPI(READ ONLY POSITION INDEPENDENT,只读位置无关)和RWPI(READ WRITE POSITION INDEPENDENT,读写位置无关)代码模式;
调用宿主函数,首先将该宿主函数名称传递给符号表函数,该符号表函数将该宿主函数的地址返回给该应用程序,该应用程序将该宿主函数的入口参数填写完毕后跳转至函数地址,即完成该调用宿主函数的过程;
中断C运行时库的退出部分流程,完成程序文件的动态加载过程。
2.根据权利要求1所述的手机嵌入式系统中动态加载的方法,其特征在于,该加载程序文件的步骤包含如下步骤:
读入程序文件头部的加载信息;
根据该加载信息计算程序加载后所需要使用的内存容量;
根据该加载信息将程序加载到内存中;
初始化传递给程序的参数列表,将该参数列表复制到程序的参数区;
跳转到程序的入口地址。
CN200810042343A 2008-09-01 2008-09-01 一种手机嵌入式系统中动态加载的方法 Pending CN101668283A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200810042343A CN101668283A (zh) 2008-09-01 2008-09-01 一种手机嵌入式系统中动态加载的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200810042343A CN101668283A (zh) 2008-09-01 2008-09-01 一种手机嵌入式系统中动态加载的方法

Publications (1)

Publication Number Publication Date
CN101668283A true CN101668283A (zh) 2010-03-10

Family

ID=41804663

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200810042343A Pending CN101668283A (zh) 2008-09-01 2008-09-01 一种手机嵌入式系统中动态加载的方法

Country Status (1)

Country Link
CN (1) CN101668283A (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814020A (zh) * 2010-04-15 2010-08-25 长沙理工大学 一种基于嵌入式的程序快速执行方法及系统
CN101938469A (zh) * 2010-08-08 2011-01-05 北京大学 一种运行时Android库文件的透明加载方法及系统
CN101984409A (zh) * 2010-11-10 2011-03-09 南京南瑞继保电气有限公司 一种用于Linux系统测试代码注入的方法
CN102486735A (zh) * 2010-12-02 2012-06-06 腾讯科技(深圳)有限公司 一种手机软件动态加载方法及装置
CN102508660A (zh) * 2011-10-26 2012-06-20 青岛海信宽带多媒体技术有限公司 可执行文件的生成方法及生成装置
WO2012126203A1 (zh) * 2011-03-21 2012-09-27 中兴通讯股份有限公司 一种处理器间传递参数的方法及装置
CN103309684A (zh) * 2012-03-07 2013-09-18 腾讯科技(深圳)有限公司 动态加载应用的方法及装置
CN105740660A (zh) * 2016-01-20 2016-07-06 广州彩瞳网络技术有限公司 一种应用安全性的检测方法及装置
CN106406991A (zh) * 2016-08-30 2017-02-15 西安航天华迅科技有限公司 一种ThreadX操作系统在ARM处理器上的运行方法
CN107122216A (zh) * 2017-05-19 2017-09-01 北京计算机技术及应用研究所 一种嵌入式实时操作系统动态加载方法
CN107247608A (zh) * 2017-05-31 2017-10-13 河南思维轨道交通技术研究院有限公司 一种具有应用软件硬件地址无关性的操作系统实现方法
CN111176659A (zh) * 2018-11-12 2020-05-19 商派软件有限公司 一种ecos程序开发框架
CN112380529A (zh) * 2020-10-26 2021-02-19 浙江大学 一种基于操作的嵌入式裸机系统安全隔离系统
CN113641413A (zh) * 2021-08-25 2021-11-12 Oppo广东移动通信有限公司 目标模型加载更新方法及装置、可读介质和电子设备

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814020A (zh) * 2010-04-15 2010-08-25 长沙理工大学 一种基于嵌入式的程序快速执行方法及系统
CN101938469A (zh) * 2010-08-08 2011-01-05 北京大学 一种运行时Android库文件的透明加载方法及系统
CN101984409A (zh) * 2010-11-10 2011-03-09 南京南瑞继保电气有限公司 一种用于Linux系统测试代码注入的方法
CN101984409B (zh) * 2010-11-10 2013-03-13 南京南瑞继保电气有限公司 一种用于Linux系统测试代码注入的方法
CN102486735A (zh) * 2010-12-02 2012-06-06 腾讯科技(深圳)有限公司 一种手机软件动态加载方法及装置
WO2012126203A1 (zh) * 2011-03-21 2012-09-27 中兴通讯股份有限公司 一种处理器间传递参数的方法及装置
US9032115B2 (en) 2011-03-21 2015-05-12 Zte Corporation Method and device for passing parameters between processors
CN102508660A (zh) * 2011-10-26 2012-06-20 青岛海信宽带多媒体技术有限公司 可执行文件的生成方法及生成装置
CN103309684A (zh) * 2012-03-07 2013-09-18 腾讯科技(深圳)有限公司 动态加载应用的方法及装置
CN105740660B (zh) * 2016-01-20 2019-02-15 广州优视网络科技有限公司 一种应用安全性的检测方法及装置
CN105740660A (zh) * 2016-01-20 2016-07-06 广州彩瞳网络技术有限公司 一种应用安全性的检测方法及装置
CN106406991A (zh) * 2016-08-30 2017-02-15 西安航天华迅科技有限公司 一种ThreadX操作系统在ARM处理器上的运行方法
CN106406991B (zh) * 2016-08-30 2019-12-17 西安航天华迅科技有限公司 一种ThreadX操作系统在ARM处理器上的运行方法
CN107122216A (zh) * 2017-05-19 2017-09-01 北京计算机技术及应用研究所 一种嵌入式实时操作系统动态加载方法
CN107122216B (zh) * 2017-05-19 2020-06-16 北京计算机技术及应用研究所 一种嵌入式实时操作系统动态加载方法
CN107247608A (zh) * 2017-05-31 2017-10-13 河南思维轨道交通技术研究院有限公司 一种具有应用软件硬件地址无关性的操作系统实现方法
CN111176659A (zh) * 2018-11-12 2020-05-19 商派软件有限公司 一种ecos程序开发框架
CN112380529A (zh) * 2020-10-26 2021-02-19 浙江大学 一种基于操作的嵌入式裸机系统安全隔离系统
CN113641413A (zh) * 2021-08-25 2021-11-12 Oppo广东移动通信有限公司 目标模型加载更新方法及装置、可读介质和电子设备
CN113641413B (zh) * 2021-08-25 2024-05-07 Oppo广东移动通信有限公司 目标模型加载更新方法及装置、可读介质和电子设备

Similar Documents

Publication Publication Date Title
CN101668283A (zh) 一种手机嵌入式系统中动态加载的方法
US20050010911A1 (en) Shared library system and method of building the system
EP2487585B1 (en) Method and device for dynamically loading relocatable file
US20130339926A1 (en) System and Method for Automatic Invocation of Constructor Code for Superclasses
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
KR101059633B1 (ko) 멀티태스킹 가상 머신을 위한 힙 구성
CN100530108C (zh) 一种调用函数的方法及系统
US7730472B2 (en) Dynamic linking of modules in a pre-operating system environment
CN103365668A (zh) 一种动态链接库装载和链接的方法、装置
CN108829465B (zh) 一种基于直接读写flash的本地动态加载系统及方法
CN113238819B (zh) 一种适用于U-Boot的驱动文件动态加载方法及系统
CN102364433B (zh) 在ARM处理器上实现Wine构建工具移植的方法
CN102681893A (zh) 可执行程序的跨平台实现方法及移动终端
US5835773A (en) Method for achieving native performance across a set of incompatible architectures using a single binary file
MXPA01012308A (es) Migracion de diferentes lenguajes de fuente hacia un medio de ejecucion.
US20040083467A1 (en) System and method for executing intermediate code
CN100492286C (zh) 一种嵌入式系统开发平台图形库的性能优化设计方法
CN110659088B (zh) 一种嵌入式环境下程序扩展的方法及系统
CN103077056A (zh) 使用少量ROM资源的Bootlorder实现方法
CN105224309A (zh) 一种调取函数的方法和装置
CN101334737A (zh) 一种嵌入式设备的启动或复位方法
CN101763273A (zh) 一种在嵌入式系统的扩展存储器中动态装入代码的方法
US20110113409A1 (en) Symbol capabilities support within elf
US9262136B2 (en) Allocate instruction and API call that contain a sybmol for a non-memory resource
CN107391191B (zh) 一种程序模块动态装载方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
ASS Succession or assignment of patent right

Owner name: MEDIATEK (BEIJING) INC.

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 200235 ROOM 407, TOWER B, NO.250, CAOXI ROAD, SHANGHAI CITY TO: 200072 ROOM 716, FANOU MODERN BUILDING, NO.2449, GONGHE NEW ROAD, SHANGHAI CITY

TA01 Transfer of patent application right

Effective date of registration: 20100326

Address after: 200072, modern building, room 2449, Pan European modern building, 716 Gonghe Road, Shanghai

Applicant after: Network technology (Shanghai) Co., Ltd.

Applicant after: Science and Technology (Beijing) Co., Ltd. graduates jobs

Address before: 200235 Shanghai City Caoxi Road No. 250 building B room 407

Applicant before: Network technology (Shanghai) Co., Ltd.

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20100310

WD01 Invention patent application deemed withdrawn after publication