移植kvm-cldc1.1到arm-linux上心得

原创 2007年09月11日 20:36:00

到今天为止,移植KVM虚拟机的工作可以说是大概完成了,还有一点小的缺陷,但先把整个过程说一下吧。

所做的工作的目的是把以CLDC1.1为基础的KVM和移植到CPU是以ARM体系结构,以linux为嵌入式操作系统的开发板上。我们这里所说的linux并不是uClinux,而是一般的linux。下面说一下交差编译的环境:

  • CentOS

  • JDK1.4.2

  • CLDC1.1

  • GCC 3.4.6

  • Arm-linux-gcc 2.95.3交差编译工具(在电脑里的名字是cross -2.95.3.tar.bz2

 

建立交差编译环境

好!环境介绍完后,首先要介绍一下建立交差编译环境。其实这个我也没做过,把linux操作系统的镜像拿来后,环境就在了。但从别人的文章和linux上可以看出,环境搭配并不难。主要是把JDK下载下来,要下载那种支持UNIX的,以bin为后缀的文件,安装的过程就不说了。然后再把交差编译工具解压,先bunzip2 cross -2.95.3.tar.bz2,然后再tar xvf cross -2.95.3.tar。再把下载的KVM源文件j2me_cldc-1_1-fcs-src-winunix.zip解压到文件夹。

接下来是设置环境变量,首先先设置Arm-linux-gcc 2.95.3交差编译工具的路径,打开/etc/profile或是 ~/.bash_profile,在上面添加以下一句:

export PATH=/usr/local/arm/2.95.3/bin:$PATH

JAVA_HOME=/usr/local/JAVA/j2sdk1.4.2_11

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=$JAVA_HOME/lib:.

export JAVA_HOME PATH CLASSPATH

第一句是为了可以随时调用arm-linux-gcc命令;第二句是设置JAVA_HOME环境变量,主要还是为了方便写三、四句。第三句和第一句的作用一样,是为了可以随时调用到javajavac命令。第四句是为了方便引用JAVA类库。

在这里要注意的是,第三句“$JAVA_HOME/bin:$PATH”都是把原来的系统环境变量PATH加到“$JAVA_HOME/bin”的后面,形成一个新的环境变量,如:原来PATH的内容为“abcdefg”,用“PATH=$JAVA_HOME/bin:$PATH”之后,就变成了“$JAVA_HOME/binabcdefg”。在这里,千万不能写成“PATH=$PATH :$JAVA_HOME/bin”,也就是把“$PATH”放到前面,这样一来就变成“abcefg:$JAVA_HOME/bin”了。你可能奇怪会问,这有什么不行的呢?原因是这样的,CentOS自带了一个jre,版本是1.4.2,它是由gnu开发的一个Java运行环境,一般叫作gcj。它使用的类库为libgcj X-X-X。所以,它和我们平时用的sun开发的jre还不一样。这个gnu开发的jre的位置在 /usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/,在这个目录下有一个java文件,它用来执行.class文件。这个文件的一个软连接(就像windows的一个快捷方式),被放到 /etc/alternatives/ 下,这个软连接又被创建一个软连接放到 /usr/bin/ 下(真不知道为什么这么麻烦)。最后,/usr/bin/ 这个路径又被加到PATH环境变量中。所以,如果你如果用“PATH=$JAVA_HOME/bin:$PATH”方式把你新装的jvm的路径加到环境变量PATH中的话,“$JAVA_HOME/bin”就会被放到“/usr/bin/”的后面,如果你执行java命令的话,就会先从“/usr/bin/”中找到gnu开发的那个java命令,会造成错误。比如:当我要执行j2me_cldc/build/linux/Makefile文件后,每当走到编译jcc工具时总会遇到如下错误:

java -classpath classes JavaCodeCompact /
/
-arch KVM_Native -o nativeFunctionTableUnix.c classesUnix.zip
Exception in thread "main" java.lang.NoClassDefFoundError: while resolving class:

JavaCodeCompact

at java.lang.VMClassLoader...............................
at java.lang.Class..................................................

Caused by: java.lang.ClassNotFoundException: sun.misc.Compare not found in [file:classes/,

file:/usr/share/java/libgcj-3.4.6.jar, file:./, core:/]

at java.lang.Class..................................................
at java.lang.Class..................................................

make[2]: *** [nativeFunctionTableUnix.c] Error 1
make[2]: Leaving directory `/usr/local/JAVA/j2me_cldc/tols/jcc'
make[2]: *** [nativeFunctionTableUnix.c] Error 2
make[1]: Leaving directory `/usr/local/JAVA/j2me_cldc/tols/jcc'
make: *** [all] Error 1

 

错误提示我在解析JavaCodeCompact.class这个类时找不到sun.misc.Compare这个类。我上网上找了一下,sun.misc.Compare这个类包里的类主要是sun公司开发JVM时内部用的一个类包。这时我看到在找sun.misc.Compare这个类包时的路径是:file:classes/, file:/usr/share/java/libgcj-3.4.6.jar, file:./, core:/libgcj-3.4.6.jar就是gnu开发的jre运行时要找的类包。sun.misc.Compare是在sun开发的类包里面,它当然找不到了。所以出现上面的错误。

 

修改文件

这里,我们要修改的只有两处,那就是j2me_cldc/kvm/VmUnix/build/Makefile文件。因为我们的KVM是要运行在arm-linux(这里cpuarm体系结构,操作系统为linux的开发板简称为arm-linux)系统上。所以,KVM必须用arm-linux-gcc编译器编译。我们打开Makefile文件,把

ifeq ($(GCC), true)

   CC = gcc

   ………...

else

处的gcc改成arm-linux-gcc

ifeq ($(GCC), true)

   CC = arm-linux-gcc

   ………...

Else

 

第二处就是j2me_cldc/kvm/VmUnix/src/runtime_md.c文件,把这个文件中void InitializeFloatingPoint()函数中的两句注释掉,如:

#if defined(LINUX) && PROCESSOR_ARCHITECTURE_X86
/* Set the precision FPU to double precision */
// fpu_control_t cw = (_FPU_DEFAULT & ~_FPU_EXTENDED) | _FPU_DOUBLE;
// _FPU_SETCW(cw);
#endif

 

这样,就不会出现错误了,但也不支持浮点数了。这里我还不知道如何才能让它支持浮点数,并不出现错误。

最后,我们进入j2me_cldc/build/linux目录,执行make命令,这样,就会顺序完成。

 

 

版权声明:本文为博主原创文章,未经博主允许随便转载。(你喜欢就好)

相关文章推荐

编译KVM(J2ME CLDC)

  • 2009年04月24日 20:36
  • 53KB
  • 下载

QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)

一、提升性能 就是将OPENGL 接口进行穿透调用 二、ANDROID OPENGL 业务实现细节解释 1、  OPENGL命令队列是确定了,可是命令的参数,有的是系统给的,有的是上一个命令...
  • pppaass
  • pppaass
  • 2016年05月15日 13:25
  • 635

kAWT 0.90 for Palm SUNs J2ME CLDC KVM

  • 2008年10月27日 19:04
  • 646KB
  • 下载

mplayer 移植到 arm 心得

最近时间移植了mplayer 到 imx6q 中 碰到了 一下问题。写下了让友友们少走一下弯路 个个版本下载 网址: http://www.mplayerhq.hu/MPlayer/relea...

ucos移植ARM9移植过程及心得

  • 2012年08月22日 15:32
  • 125KB
  • 下载

Java虚拟机KVM在嵌入式Linux上的移植(转)

Java虚拟机KVM在嵌入式Linux上的移植(转) [转载请注明出处,作者:张洪耿,patrick_zhg@hotmail.com] 目前嵌入式Linux被广泛应用于嵌入式设备,Jav...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:移植kvm-cldc1.1到arm-linux上心得
举报原因:
原因补充:

(最多只允许输入30个字)