手机软件中的动态加载方法及其应用

所属栏目:软件开发论文 发布日期:2012-10-22 10:17 热度:

  摘要:随着电子通讯技术的不单进步,消费者对手机的功能需求越来越多样化和高端化,但是手机生产商通常只能够满足的是具有普遍性的消费需求,手机用户为了实现手机功能的个性化,往往需要通过外部操作来完成,在这之中,通过静态链接的方式来进行加载的效果有限,动态加载的功能则更为强大。本文的主要内容就是以功能手机为例,介绍如何实现动态加载在功能手机上的应用。
  关键词:功能手机;动态加载;函数跳转表;重定位
  一、手机动态加载的研究背景
  手机已经成为一件普及率极高的通信工具,当前的手机市场从整体上来看已经逐渐表现出一种饱和的态势,手机市场的持续发展,必须依赖于换机市场,满足当前手机用户的换机需求。消费者换机,实际上就是对手机功能的进一步追求,当然,要提升手机的功能,除了购买新手机外,另一种方式就是对现有手机的功能进行加载。市面上的手机,我们分为两种,一种就是在2011年掀起了一拨热潮的智能化手机,另一种就是不具备智能操作系统的功能手机。智能手机与功能手机的区别就在于,手机是否有可以独立运行的操作系统。智能手机能够允许用户自行操作、下载、安装程序,最为普遍的就是游戏软件和一些生活类软件。智能操作系统作用的发挥,还必须依赖第三方服务商提供与操作平台相匹配的程序或者软件,通过操作系统与第三方服务商的联合作用,实现手机功能的拓展与扩充。而功能手机,通常只能通过接口的方式,例如比较常见的Java程序实现静态的加载。基本上,在当前除了智能手机和PDA手机以外,其他手机都属于功能手机的范畴。
  功能手机要实现程序的加载,只能通过不断的加载本机的符合来实现,它无法借助第三方程序来完成安装,只有通过接口这种静态的链接,编译成可执行的二进制文件,然后下载到非易失性的存储设备上运行,这种不能由于手机的硬件存储资源非常有限,所以,功能的加载与手机的内存容量之间往往是矛盾的。当前智能手机中最为常见的就是安卓系统,它与Windows类似,也是一个独立的操作系统,智能手机的加载虽然具有很高的灵活性和便捷性,但是它对手机硬件质量要求高,对ROM和RAM空间有很高的要求。功能手机要实现动态加载,只能采取移植J2ME的方式,但是系统资源消耗大,速度慢,而且容易产生故障。所以,采用这种方式来实现功能手机的动态加载并不受用户欢迎,难以得到普及和应用。所以,在本文中,我们探析的主要内容就是如何在功能手机中实现与第三方应用软件的动态加载。
  二、手机软件动态加载的具体方案
  手机动态加载能够通过不同的程序与方式实现,本文采用的方式是重定位来实现第三方应用软件加载。实现这种动态加载实际上是在一个交叉编译的环境中来完成的,也就是在PC上需要建立一个开发环境,对手机的代码和平台的代码进行编译,在手机上也需要建立一个空间,实现重定位。采用这种模式进行动态加载,需要三个流程。
  (一)函数跳转
  要进行函数跳转,是因为,在功能手机中,本机函数是动态链接的方法,但是要实现第三方软件的应用,本机函数就必须确保能够与其协同工作,我们通过函数跳转表来表达这一问题。具体操作方式就是在手机端中建立一个列表,将所有函数的入口地址输入这个列表中,这样,我们在PC端只需要通过地址的查找就能够实现函数的使用。当然,手机端中的函数分为普通函数和函数指针,所以应该按照返回值的类型将它们区别开来,分别建立在列表中,并且将列表的首地址用EX-PORT输出,这样,我们只需要在PC端采用IMPORT命令引入列表就可以实现与手机端的函数调用。
  (二)资源重定位
  在进行重定位以前,我们必须做好前期的数据准备工作,也就是先从ADS1.2编译链接形成的ELF文件中取出需要重定位的数据(相对于虚拟地址的偏移量),由于每一个平台的文件格式要求存在着差异,所以应该进行格式的调整,将文件下载到手机t卡,动态加载时在手机端通过二次重定位来实现。
  第一,文件格式的分析。文件格式的统一,是能够实现重定位的重要前提,一般平台对文件格式有着自己的要求,包括文件头、Code部分、已初始化数据部分、未初始化数据部分、重定位数据和资源数据六部分组成。第二,重定位操作。重定位操作是在一个交叉编译环境下进行的,它包括手机端和PC端两部分,在两个环境中的操作方式有着很大的不同,PC端操作如下:建立一个scat文件,指定编译、链接的虚拟ROM地址和虚拟的RAM地址,然后利用ADS1.2编译源代码,通过ADS1.2链接生成带调试信息的ARM映像文件。运用gmake运行Makefile文件即可为源文件中的每个函数生成一个ELF段,并链接合并得到ELF文件code.axf。将code.axf文件中的各个段分别按照该系统定义文件格式结构生成一个新的文code.df(自定义的文件及扩展名)。手机端实现:在RAM中申请文件大小的空间,将整个文件载入到RAM中。通过重定位的数据,找到该数据所在的位置,把该数据地址-虚拟的RAM地址+申请空间的首地址,这样就完成了重定位。然后把手机端PC的指针指向CODE的首地址,直接运行即可正常运行。
  (三)外部资源访问
  动态加载需要访问到的外部资源,主要有三项:字符串、图片还有铃声。三种资源的属性和格式有着很大的差异,所以我们在进行访问时也必须采用不同的方式来进行。
  第一,字符串的处理。字符串的处理较为复杂,因为字符串有很多个语种,每一个语种表达同一个字符串的长度也有着很多的不同,并且字符串从整体上看特别容易重复,我们在分析字符串的时候采用的是哈希算法,它能够有效的解决字符重复问题。我们在对字符串进行编译的时候,必须采用双组制的方式,也就是每一个语种我们都需要使用两组编译,一个组用来存放字符串本身的内容,另一个则是用来表示每一个对应字符串的偏移量。我们在手机端中,只需要根据字符串独立的ID在对应的列表中找到对应的字符偏移量,就能够返回字符资源。第二,图片和铃声的处理,相对于字符串,这两种资源的处理方式较为简便,同时方式上也大致相同。主要是通过在源文件上进行文件头的添加,这个文件头应该包括八个字节的信息,第一个字节表示的是资源的类型,四个字节表示文件的长度,图片和铃声处理的差异表现在最后三个字节,在对铃声进行编译的时候是采用不处理的方式,在对图片进行编译的时候则是用来表示宽度和长度。
  三、效果分析
  在本文中,我们提出了一种采用重定位方式实现手机动态加载的方案,通过这种方法,可以有效的改变只能通过本机增加程序进行加载的限制,将其与高端智能手机一样,实现对第三方程序的加载以及利用。从最终的完成效果看,达到预期效果。并且在现实生产中,由于系统的开销较小,不会加重手机生产商的生产成本,并且作为源生程序,其运行速度和稳定性能都非常好。当然,它的不足之处就在于能够通过这种重定位实现动态加载的平台较少,只有MTK平台能够满足功能需求,并且能够应用的软件资源也很少,功能开发受到局限。
  参考文献:
  [1]王娜.2008年中国手机业特点与国产手机发展之路[J].通讯世界,2009,(1):32-33
  [2]杨伟,罗蕾.嵌入式系统中的模块动态加载技术[J].单片机与嵌入式系统应用,2005,(11):8-10
  [3]齐宁,丁松阳,孙维新,等.基于加载机制分析的ELF文件main函数定位技术[J].计算机工程,2007,33(6):89-91

文章标题:手机软件中的动态加载方法及其应用

转载请注明来自:http://www.sofabiao.com/fblw/dianxin/ruanjiankaifa/13579.html

相关问题解答

SCI服务

搜论文知识网的海量职称论文范文仅供广大读者免费阅读使用! 冀ICP备15021333号-3