[发明专利]基于ARM芯片的多个程序段同时运行的动态加载方法无效
申请号: | 201210022599.X | 申请日: | 2012-02-01 |
公开(公告)号: | CN103246524A | 公开(公告)日: | 2013-08-14 |
发明(设计)人: | 冯嵩 | 申请(专利权)人: | 上海野火网络科技有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F9/45 |
代理公司: | 上海科盛知识产权代理有限公司 31225 | 代理人: | 赵志远 |
地址: | 200082 上海市虹*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 arm 芯片 程序 同时 运行 动态 加载 方法 | ||
技术领域
本发明涉及一种智能移动终端的程序加载相关技术,尤其是涉及一种基于ARM芯片的多个程序段同时运行的动态加载方法。
背景技术
移动终端的智能性是指:手机在不需要重新烧录固件程序的情况下,通过执行存储在外部设备(例如TF卡、SD卡等)上的、或无线网络下载(例如GPRS、WIFI等)得到的可扩展手机原有功能的动态程序,以满足手机更丰富、更定制化的用户需求。一般而言,这是所谓“智能手机”的主要特征。
目前解决移动终端智能性的技术方案主要有2个:
(一)JAVA虚拟机技术。JAVA虚拟机是著名的SUN公司经多年积累所开发的一套虚拟机解决方案(现已被甲骨文公司收购),其特点是技术稳定成熟,有丰富的第三方应用程序支持,文档配套齐全并拥有大量的开发人才;但是缺点也是非常明显的,一是使用JAVA虚拟机要收取一笔昂贵的授权费用,这对于很多规模不大的公司往往承担不起;二是JAVA虚拟机由于执行效率低下、消耗资源庞大,使得大多数配置较为低端的手机根本无法流畅运行起来。
(二)传统动态加载技术。事实上,正是考虑到JAVA虚拟机技术的局限性,移动终端业内已经出现一种称为“动态加载”的技术,该技术基于ARM芯片,可以将独立开发的应用程序通过动态加载的方式载入手机中运行,从而达到扩展手机功能的目的。然而目前这种传统的动态加载技术实现方法有一个重大缺陷,就是这种方法要依赖ARM芯片的R9寄存器进行重定位,这样就无法实现多个动态段的同时运行,从而限制了技术的应用价值,只能说采用这种技术的移动终端是“半智能”的。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于ARM芯片的多个程序段同时运行的动态加载方法。
本发明的目的可以通过以下技术方案来实现:
一种基于ARM芯片的多个程序段同时运行的动态加载方法,其特征在于,包括以下步骤:
1)以指定源文件的用户自定义函数为入口对源文件进行编译,并对编译结果进行两次链接处理,得到两个可执行文件,分别为startup_0.elf和startup_1.elf;
2)对得到的两个可执行文件进行比较分析后得到重定位表relocation.lis;
3)将其中一个可执行文件startup_0.elf和重定位表relocation.lis压缩并打包,生成动态程序startup.bin;
4)将动态程序startup.bin导入智能移动终端后,所述的智能移动终端中的ARM芯片将动态程序startup.bin中的startup_0.elf解包并分析,建立该动态程序startup.bin的RO、RW、ZI段的内容;
5)将动态程序startup.bin中relocation.lis解包,并根据该文件信息,结合RO、RW+ZI段的首地址,针对RO段进行重定位;
6)将RO段首地址转换为步骤1)中所指定的用户自定义函数类型的函数指针,直接调用该函数指针,完成动态加载过程。
所述的对编译结果进行两次链接处理具体为:
1)对编译的结果进行链接处理,链接时指定链接选项-rw-base为0xF0000000,得到链接后的可执行文件startup_0.elf;
2)对编译的结果进行链接处理,链接时指定链接选项-rw-base为0xE0000000,得到链接后的可执行文件startup_1.elf。
所述的RW段为所有已经初始化且不为0的变量,所述的ZI段为所有声明但没有初始化的变量,所述的RO段为所有逻辑代码信息和只读变量。
与现有技术相比,本发明具有以下优点:
将重定位表与可执行文件能够打包在一起,任意时刻需要运行动态程序,只需根据重定位表进行动态重定位即可,无需考虑系统寄存器状态、更无需考虑其它动态程序的运行状况,从而稳定地实现了多程序任意时刻同时运行。
附图说明
图1为本发明的编译阶段流程图;
图2为本发明的运行阶段流程图;
图3为本发明的具体应用流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
实施例
对于针对ARM7系列CPU、且只有一个文件(Example.c)的工程,常规来讲如果需要动态加载地执行它,需要在编译时:
armcc-c-apcs/ropi/rwpi/interwork-cpu ARM7EJ-S Example.c
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海野火网络科技有限公司,未经上海野火网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210022599.X/2.html,转载请声明来源钻瓜专利网。