在开发板上实现了Java虚拟机kvm

来源:互联网 发布:百世汇通打单软件 编辑:程序博客网 时间:2024/04/30 09:27
 
  1. 下载suncldcsrc解压,里面包含有相关的源码。我这里使用了j2me_cldc-1_0_4-src-winunix.zipj2me_cldc-1_1-fcs-src-winunix.zip这两个都可以在sun的网站下载,不过推荐大家抓紧时间下载,因为今天去下载midp2.0就已经不能下载了(sun阿,令人失望!)。

  2. 安装jdk并设置后相关路径这里不推荐使用jdk1.5,编译通不过,使用1.4或者更低的都可以(希望可以在sun的官方找到)我使用的是1.4.2_01。修改.bash_profile或者/etc/profile添加PATH或者CLASSPATH。这里说一些为什么要用到jdk,主要是要编译api里面的java文件,当然我们只一致kvm就不需要这个了,详细地大家可以看看解开的文件cldc文件夹里面的make文件

  3. 修改make文件进入j2me_cldc/kvm/VmUnix/build/vi修改Makefile,主要修改将原来使用的x86的编译器GCC改为我们的arm-linux-gcc,这样才能得到我们的所需,我主要是修改下面的句子:ifeq($(GCC), true) CC =arm-linux-gcc,另外我又在文件的开始指定exportPLATFORM=linux,当然你也可以在make的时候家参数PLATFORM=linux

  4. 编译先编译preverify,进入tools/preverfiyer/build/linux下,make,这里没有必要对这个makefile进行修改,况且你的编译平台是x86,应该不能进行修改,否则编译出来的preverify是不运行的,那么kvm的编译也将会不能通过。编译kvm,进入kvm/VmUnix/build,make,就可以得到kvm,注意这个是在kvmbuild目录下生成的,filekvm会的到以下信息:kvm:ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux2.4.18, dynamically linked (uses shared libs), not stripped

  5. 在板子上运行并进行相应的测试将得到的kvm,烧到板子上,x86kvm运行所需文件:libm.so.6 =>/lib/tls/libm.so.6 (0xb75c0000) libnsl.so.1 => /lib/libnsl.so.1(0xb75ab000) libc.so.6 => /lib/tls/libc.so.6 (0xb7473000)/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)大家可以参考以下,以便能使板子环境符合要求.更改属性为a+x,运行kvm,没有任何参数的情况下将会出现以下信息:ALERT:Must provide class name Usage: kvm < -options> Options:-version -classpath -heapsize (e.g. 65536 or 128k or 1M)

  6. 运行helloworld并正确使用preverify这一步准确来说不是移植要做的事情,因为这是j2me开发者要注意的事情.我们先来看看kvm的执行.class文件的机制: 如图示:我们javac编译完的生成的.class文件必须经过preverify预验证后才能被kvm正确的执行,否则会出现java/class/Verifyerror,为什么要采用预验证机制,是因为sun考虑到嵌入式设备资源有限,所以将jvm的庞大字节码验证机制进行严重的"缩水",也就用了一个轻量级机制来保证安全.说了这么多,讲讲具体怎么使用(这个流程开发j2me程序的人应该都知道点,虽然大家都不常用这个来开发).1编译javac -classpathkvm/classes hello.java 这里kvm/classes指你编译生成的classes文件夹2预验证preverify-classpath kvm/classes -d . mydir preverify有几个参数:-classpath 同上 -d输出验证后的class文件,默认的是当前目录下的output文件夹下,还有检测是否使用了finalizers ,float,nativemethods等将检验后的classs文件放到板子上,就可以执行了!

  7. 在开发板上运行: $ kvm -classpath /usr/gpephone/classes  HelloWorld   就有结果显示了。 (我把编译好了的HelloWorld.class拷贝到了/usr/gpephone/classes目录下。
原创粉丝点击