关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > MIPS目标平台CLDC的Java虚拟机移植

MIPS目标平台CLDC的Java虚拟机移植

作者:时间:2009-12-28来源:网络收藏

3 VM移植过程
phoneME Feature软件结构实现了完全的模块化。它使用一个名为includeDB的配置数据库来管理项目源文件和头文件,可根据目标CPU架构和目标OS需求在配置数据库内添加或修改相应的文件。使用includeDB配置数据库,避免了#ifdef宏散布于整个源码区间,还避免了使用复杂的#ifdef嵌套语句结构。
includeDB配置数据库位于src/vm/includeDB,它是纯文本文件,针对目标CPU架构和目标OS需求进行添加或修改的头文件和函数文件都应在该配置文件中进行注册。
检查includeDB文件,可立即得到在OS移植或CPU移植时需要注意的文件。在建立移植软件时,还使用ineludeDB配置数据库来跟踪文件的依赖关系。为目标平台建立的头文件和函数文件都需要添加到includeDB数据库。
phoneME Feature软件具有良好的模块化结构,其移植工作集中于Call层。移植模型如图3所示。

本文引用地址:http://www.eepw.com.cn/article/202584.htm

针对目标架构的移植过程如下:
(1)OS移植
目标OS为经裁剪的通用Linux系统,内核为2.6.12版。phoneME Feature软件的大多数代码文件都与OS无关,只有极少的几个文件涉及目标OS。OS移植接口分为两部分:一部分为OS通用部分,它位于源码目录src/vm/share/runtime下,适合大多数OS;另一部分则针对目标OS,位于源码目录src/vm/os/linux下。
OS指定的移植接口由/src/vm/share/runtime目录下的OS.hpp和OS.cpp文件进行定义。实际上这两个文件只实现了一个Os类,向提供特殊功能。
OS移植接口的其他部分包括文件系统(由OsFile.hpp和OsFile.cpp定义)、线程(由Thread.hpp和Thread.cpp定义)、事件处理(由Task.hpp、Task.cpp、TaskCon-text.cpp、TaskContext.hpp和TaskList.hpp等定义)、内存管理(由OsMemory.hpp和OsMemory.cpp等定义)等。针对目标OS的移植,需建立/src/vm/os/mips目录(以目标架构命名),在目录下需创建下列文件:JVM_mips.hpp、JVM_mips.cpp;OS_mips.hpp、OS_mips.cpp;OsFile_mips.hpp、OsFile_mips.cpp;OsMemo-ry_mips.hpp、OsMemory_mips.cpp;OsMisc_mips.hpp、OsMisc_mips.cpp。
根据需要,可能还需创建OsSocket_mips、Globals_mips等文件。这些文件是文件系统、线程、事件处理、内存管理等在目标OS的具体实现。如OS_mips.cpp中实现了取寄存器值、取PC指针值、为PC指针值赋值、sleep等方法。需强调的是,OS_mips.cpp文件中有两个方法非常重要,且必须实现:
◆static void initialize();//用于初始化OS,如定时器、线//程、I/O等
◆static void dispose();//用于撤销初始化的所有工作,//清除线程和其他OS活动
(2)CPU移植
CPU移植的工作主要有两个:一是移植解释器和解释器的产生器;二是移植相应的编译器。
CPU移植的难点在于编译器的优化和调整,因为的汇编解释器和相应的编译器依赖于具体的CPU架构。建立/src/vm/cpu/mips目录,并编写相关文件。以解释器的产生器为例,需要编写(包括头文件和源文件):Assembler_mips、SourceAssembler_mips、SourceMacros_mips、Disassembler_mips、TemplateTable_mips、Interpret-erGenerator_mips、NativeGenerator_mips、SharedStubs_mips、InterpreterStubs_mips、CompilerStubs_mips等。
(3)Call移植
Call函数集被分成多个子系统。这些子系统包括:图形子系统、内存管理、LCD显示、字体、文件和目录、Socket套接字等。
以移植文件系统接口为例:使用了类似POSIX标准C库的文件API,由于目标平台是基于Linux的,所以不需要映射OsFile_read()方法到目标操作系统。要确保虚拟机能正确操作OS下的文件,需要验证以下接口:
◆im OsFile_remove(const JvmPathChar*filename)
◆bool OsFile_rename(const JvmPathChar*from,constJvmPathChar*to)
◆im OsFile_open(const JvmPathChar*filename,constchar*mode)
◆int OsFile_close(OsFile_Handle handle)
◆int OsFile_flush(OsFile_Handle handle)
◆size_t OsFile_read(OsFile_Handle handle,void*buffer,size_t size,size_t count)
◆size_t OsFile_write(OsFile_Handle handle,const void*buffer,size_t size,size_t count)
以上接口实现了文件的常用操作,如文件的打开、读、写、关闭、删除、重命名等。


4 CLDC VM移植验证
完成以上移植所需的修改后,建立Makefile,设置所需的环境变量,使得phoneME Feature成功通过交叉编译,生成目标系统所需的CLDC VM虚拟机。
移植的验证较为简单,将交叉编译生成的cldc_vm可执行文件、库文件以及Demo示例文件复制到目标平台,运行并检查结果。命令结构是:bin/cldc_vm.exe-class-path location-of-compiled-applications/classes classname。


5 CLDC VM移植优化
CLDC虚拟机的移植优化可以从几方面进行:
①优化参数。在虚拟机建立过程中,phoneME提供了很多选项,针对不同的目标平台使用不同的选项。
②Thumb指令集的开关。ARM等CPU支持Thumb指令集,phoneME也支持Thumb指令集。如果目标平台支持Thumb指令集,可以开启Thumb开关,加快虚拟机执行速度。
③其他。对虚拟机的优化还可从编译器自身、内存子系统等方面进行优化。


结 语
基于phoneME Feature软件生成的CLDC虚拟机与早期的KVM虚拟机相比,性能得到较大改善,尤其是在多任务支持方面(早期的KVM虚拟机不支持多任务功能)。笔者在Broadcom 7403和NXP 225上成功实现CLDC VM的移植。下一步的工作是在国产数字电视SoC芯片上实现CLDC VM的移植。目前多核技术是计算机行业的研究热点,并逐步向嵌入式领域发展,因此支持多核CPU技术和并行技术的CLDC虚拟机将是未来的研究方向之一。


上一页 1 2 下一页

关键词: MIPS CLDC Java 虚拟机

评论


相关推荐

技术专区

关闭