[发明专利]一种可重定位文件动态加载的方法及装置有效
申请号: | 200910210623.0 | 申请日: | 2009-11-04 |
公开(公告)号: | CN101697131A | 公开(公告)日: | 2010-04-21 |
发明(设计)人: | 何海建;武晓慧;范伟 | 申请(专利权)人: | 中兴通讯股份有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 北京派特恩知识产权代理事务所(普通合伙) 11270 | 代理人: | 张颖玲;王黎延 |
地址: | 518057 广东省深圳市南山*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 定位 文件 动态 加载 方法 装置 | ||
技术领域
本发明涉及一种嵌入式微内核操作系统,特别是涉及一种可重定位文件动 态加载的方法及装置。
背景技术
随着科技的发展,移动电话呈现出个人计算机(PC)化的发展驱势,其所 需的动态应用文件越来越多。移动电话一般分为智能移动电话(smart phone) 和非智能移动电话(feather phone),智能移动电话如wince、ulinux等操作系统 基本都实现了动态加载技术,类似于PC上可动态加载应用的Windows操作系统 的动态链接库、或Linux操作系统的动态共享文件;而feather phone多数基于嵌 入式微内核操作系统开发的,大部分嵌入式操作系统尚未实现动态加载技术。
然而,目前feather phone的市场占有率仍很高,feather phone的应用开发方 式通常有两种:一种使用JAVA语言进行开发,另一种静态链接到版本之中。其 中,JAVA是一种解释性语言,执行速度慢,同时还需要JAVA虚拟机的支持; 而对于通过传统的应用与移动电话版本进行静态链接,以编译生成可执行文件 来讲,文件越大需求的硬件资源,如随机存取存储器(RAM)或者非易失性或 非闪存(NOR FLASH)的容量就越大,且由于在调试过程中,经常会修改代码, 每次修改都要对整个移动电话版本进行重新链接、烧录、加载操作,因此,修 改代码所花费的时间甚至比调试代码的时间还多,严重影响了应用开发调试的 效率。此外,当代码直接运行于具有NOR FLASH的移动电话时,因烧录时间较 长而使得上述现象更为严重,应用开发调试的效率尤为低。同时,电信运营商 还有动态升级应用的要求,而静态链接的应用却无法进行动态升级。
目前,在微内核操作系统中实现了动态链接技术,这使得软件开发效率得 以提高,按需加载以节省硬件资源,还可以随时为移动电话增加新功能。其中, 动态加载过程主要包括计算并分配加载代码所需内存、符号解析、代码重定位 三个过程。然而,现有技术在重定位过程中,当函数调用者与被调用者地址距 离太远而超出跳转范围时,会造成动态加载失败、或动态加载动态应用文件运 行发生错误。
发明内容
有鉴于此,本发明的主要目的在于提供一种可重定位文件动态加载的方法 及装置,能在函数调用距离超出跳转范围时,实现可重定位动态加载。
为达到上述目的,本发明公开了一种可重定位文件动态加载的方法,包括: 解析可重定位文件获取信息,并在找到重定位节区后获取重定位目的地址,计 算待重定位的地址及跳转距离;判断所述跳转距离是否超出短跳转范围,如果 未超出短跳转范围,则将所述重定位目的地址填入待重定位的地址,进行重定 位加载;如果超出短跳转范围,则生成veneer代码段,并将长跳转指令和重定 位目的地址分别填充到veneer代码段中;将veneer代码段的起始地址填入待重定 位的地址,形成一个有效的短跳转,所述有效的短跳转指令指向veneer代码段; 通过有效的短跳转跳到veneer代码段,再通过veneer代码段的长跳转跳转到重定 位目的地址,进行重定位加载;所述veneer代码段为实现ARM状态到thumb状态 转换、以及长距离跳转的代码段。
其中,所述解析可重定位文件之前,该方法还包括:生成系统符号表;按 照可重定位文件的节区的属性,重组所述可重定位文件,计算加载动态应用文 件的代码所需内存空间,并为加载代码分配内存空间以及计算出各代码段的起 始地址,读取可重定位文件的节区内容并对应写入所分配的节区的内存空间; 其中,所述重组可重定位文件为:将可重定位文件所属文本TEXT、数据DATA、 未初始化数据段BSS三段的节区按节区名称和节区序号进行升序排列,且优先 按节区名称进行升序排列。
上述方法中,所述获取重定位目的地址为:解析可重定位文件获取符号节 区的节区头,根据该节区头的sh_type字段对节区头表进行遍历,来查找可重定 位文件的符号节区;根据所述符号节区的符号项的st_shndx字段,判断可重定位 文件的符号是否为未定义符号;当可重定位文件的符号为未定义符号时,查找 所述系统符号表获得未定义符号的符号地址,将该未定义符号的符号地址作为 动态应用文件的符号地址;所述动态应用文件引用的外部符号地址为重定位目 的地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910210623.0/2.html,转载请声明来源钻瓜专利网。