论文部分内容阅读
目前的功能手机的程序加载一般采用的方法是静态链接,将所有的应用程序与内核一同编译成目标机上的可执行的二进制文件,然后下载到非易失性的存储设备上运行。这种方案要完善手机功能,只有不断增加手机的本机应用程序,无法加载第三方应用程序。然而,手机系统的硬件资源非常有限,不断增加本机应用程序与非易失性的存储设备存储容量之间是矛盾的,因此目前的功能手机实现第三方应用程序加载基本上都是通过中间件技术,譬如通过移植J2ME中间件技术来加以实现。可是移植J2ME将带来较大的系统开销,大约要占用1.2MB的ROM加载空间,运行时需要600KB的RAM空间,效果不是非常理想。本文通过对嵌入式系统的程序静态加载方法、函数跳转的实现方法、手机动态加载第三方应用程序的方法以及ELF文件的动态加载过程的研究,根据一个具体的项目需求,要在功能手机上以极小的系统开销实现第三方应用程序的动态加载,提出了一种新的实现动态加载的方法,其基本思想是:首先通过ADS1.2在PC机端编译,指定虚拟的ROM地址和RAM地址编译形成ELF文件,文件中包含所有需要重定位数据的地址(虚拟地址),然后将ELF文件中的各个段按照自己设置的文件格式形成一个新的文件。动态加载时在手机RAM中申请与文件大小相同的空间,将整个文件载入到RAM中。通过重定位的数据,找到该数据所在的位置,把该数据地址减去虚拟的RAM地址再加上目标端申请到的空间的首地址,这样就完成了重定位。然后把手机端的PC指针指向代码的首地址,直接运行即可完成动态加载。根据本文提出的动态加载方法,在MTK手机开发环境下设计并实现了一个可以实现第三方应用软件动态加载的开发平台,扩充了功能手机的程序加载功能。通过测试,该动态加载平台占用的系统资源极少,加载时需要占用目标端的ROM空间为31KB,非运行状态所需的RAM空间小于1KB,成功地在1GB的t卡上加载了第三方开发的满足MTK编程规范的全部应用软件2450个,占用t卡不到600MB,而且都能够顺利地运行,速度比较理想,很好地解决了应用方和厂商方提出的问题。