移植CVM到arm920

参考:http://www.linuxidc.com/Linux/2011-08/41912.htm

http://witmax.cn/install-sun-java6-jdk.html   

主机:ubuntu 12.04

交叉编译环境:gcc version 4.6.3

java虚拟机:下载sun的phoneme

开发板:s3c2440


一、解压

unzip phoneme_advanced-mr2-dev-src-b97-20_nov_2008.zip


二、配置java运行环境

由于本机使用的是ubuntu 12.04,安装java环境的时候需要如下配置

 1、添加源

deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse

  操作的方法是:sudo gedit /etc/apt/sources.list

在打开的文件的最后一行加上 deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse

最后保存退出

2、更新

sudo apt-get update

  3、安装java

sudo apt-get install sun-java6-jdk

4、查看是否成功

java -version


三、配置文件

cd phoneme_advanced_mr2/cdc/build/linux-arm-generic

vim GUNmakefile

修改 USE_AAPCS ?= false 为 true

修改 CVM_TARGET_TOOLS_PREFIX=/work/tools/gcc-3.4.5-glibc-2.3.6/bin/arm-linux- (交叉编译环境的地址)


四、编译

make

假如提示arm-linux-gcc:command not found之类的信息,那就是交叉编译环境没有配置

可以用:echo $PATH查看

配置交叉编译环境的命令:export PATH=$PATH:/work/tools/gcc-3.4.5-glibc-2.3.6/bin


五、编译成功

产生新的文件,在其中找到 bin    lib      testclasses.zip三个文件,拷贝到arm下的文件系统

假设这个文件叫做/home/j2me/


六、在arm下的环境配置

1、在/etc/init.d/rcS下添加如下内容

JAVA_HOME=/home/j2me

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib

2、测试程序

"Hello world!"问题:./cvm -cp testclasses.zip HelloWorld

  全面的测试:./cvm -cp testclasses.zip Test

*Number of command line arguments: 0 
        Starting test1 
        ...recurse 
        ...recurse 
        ...recurse 
        ...link 
        ...link 
        ...link 
        Starting test1 again 
        ...recurse 
        ...recurse 
        ...recurse 
        ...link 
        ...link 
        ...link 
        test6: Caught inner java.lang.NullPointerException 
        test6: Caught outer java.lang.NullPointerException 
        Testing Array Copy 
        *TestE exception thrown because "I'm feeling Testy" 
        * threw java.lang.ExceptionInInitializerError 
        * threw java.lang.NoClassDefFoundError: StaticE 
        c1 = class [LTest; 
        c2 = class [[LTest; 
        c3 = class [LC; 
        c4 = class [[LC; 
        c1.modifiers = 1041 
        c2.modifiers = 1041 
        c3.modifiers = 1040 
        c4.modifiers = 1040 
        *FloatMIN =1.4E-45 
        *FloatMAX =3.4028235E38 
        FloatMIN (the int bits) =1 
        FloatMAX (the int bits) =2139095039 
        java.lang.IllegalArgumentException: too many dimensions 
            at java.lang.reflect.Array.multiNewArray(Native Method) 
            at java.lang.reflect.Array.newInstance(Unknown Source) 
            at Test.testDeepArrayConstruction(Unknown Source) 
            at Test.main(Unknown Source) 
            at sun.misc.CVM.runMain(Unknown Source) 
        Constructed an object of type 
        [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[LTest; 
        finally! 
        Requesting GC with a latency request of 2 seconds 
        (Turning GC tracing on) 
        Sleeping 5 seconds, and waiting for GC's 
        Woke up! Cancelling latency request 
        ............. 
        *CONGRATULATIONS: test Test completed with 411 tests passed and 0 failures 
        *Output lines starting with a * should be checked for correctness 
        *They can be compared to src/share/javavm/test/TestExpectedResult

出现以上信息,则移植成功

3、测试一个自己的“ hello world! "程序

public class helloworld {

public static void main(String[] args) {

System.out.println(" hello world! ");

}

}

在主机ubuntu12.04上用javac helloworld.java编译程序

然后用java helloworld试运行,假如成功,将helloworld.class拷贝到arm板子的/home/j2me/bin/目录下

用./cvm helloworld试运行

假如出现下面这样的问题:

java.lang.UnsupportedClassVersionError: helloworld (Unsupported major.minor version 50.0)
        at sun.misc.Launcher$AppClassLoader.findContainer(Native Method)
        at sun.misc.Launcher$AppClassLoader.access$400(Unknown Source)
        at sun.misc.Launcher$AppClassLoader$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Unknown Source)
        at java.security.AccessController.doPrivileged(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.doClassFind(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.CVM.runMain(Unknown Source)

那就是编译的.class文件的版本高于java虚拟机的版本

解决办法:

在主机上重新编译,采用jdk1.5

javac -target 1.5 -source 1.5 Hello.java

    然后重新拷贝.class文件到板子上,重新测试运行。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值