java虚拟机JVM 移植
-----by flyyang
注:版权所有,如若转载请注明出处。
原文出自:http://blog.youkuaiyun.com/flyyang123456789/article/details/17392103
前言:所需安装包 arm-linux交叉编译工具包 java 类编译器Jikes jikes-1.22.tar.bz2 java 核心类库 GNU classpath classpath-0.90.tar.gz 以及
jamvm-1.4.2.tar.gz 和 依赖包zlib-1.2.7.tar.gz
一、jVM在 宿主机上的裁剪与编译
1、交叉编译环境通常叫做交叉编译工具链 只要包括 预处理器CPP 编译器GCC C 库Glibc/NewLib 汇编器AS 链接器LD 其中CPP 处理头文件和宏 并生成C 程序文本文件 GCCG将 经过 预处 理 的 C文 件编 译 为 汇编 代 码 AS 将汇 编 代码 生 成二 进 制 可 重 定位 的 目标对 象文 件 , 由链 接 器LD 链接生成可执行文件
2、arm-linux 交叉编译器的环境配置 略
3、安装 java 类编译器Jikes
解压: tar jvxf jikes-1.22.tar.bz2 cd jikes-1.22
直接 ./configure 即可 make make install
测试 Jikes 安装是否成功 当出现这种情况即 安装成功
[root@localhost ~]# jikes
use: jikes [options] [@files] file.java...
For more help, try -help or -version.
4、编译和安装java 核心类库 GNU classpath
解压 :tar zvxf classpath-0.90.tar.gz cd classpath-0.90
配置裁剪:要指定目标安装平台 arm-linux 并指名编译器为刚安装的 jikes 和指定classpath安装 目录 /opt/classpath
指定编译工具
[root@localhost classpath-0.90]# CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-ld CPP=arm-linux-cpp RANLIB=arm-linux-ranlib STRIP=arm-linux-strip
配置:./configure --host=arm-linux --disable-gtk-peer --disable-gconf-peer --disable-plugin --with-jikes --with-jni --prefix=/opt/classpath
GTK图形库 裁剪掉不编译 标准图形桌面环境gconf库 裁剪掉不编译 浏览器插件库 裁剪掉不编译
编译JNI 方便以后添加更多的第三方包 java JNI本地接口
make
可能出错 修改 /classpath-0.90/native/jni/ 下Makefile 删除里面所有的 all-local(第 500行,576行,590(包括591)行) all-recursive(第 55行,第 281行,第 503行,第 506行)
然后保存后 再次 make 即可通过
make install
5、编译安装jamVM
解压 :tar zvxf jamvm-1.4.2.tar.gz cd jamvm-1.4.2
配置编译工具
[root@localhost classpath-0.90]# CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-ld CPP=arm-linux-cpp RANLIB=arm-linux-ranlib STRIP=arm-linux-strip
配置:[root@localhost jamvm-1.4.2]# ./configure --host=arm-linux -prefix=/mnt/jamvm --with-class-path-install-dir=/mnt/jamvm/lib/classpath
make (没有出现错误)然后 make install 安装
再然后 就可以 到相关 目录下去 看到jamvn 的可执行文件我的是在 这就是 需要在开发板上运行的 虚拟机的可执行文件
然后 增加链接库文件
因jamVM 在 启动是需要读入两个 zip 文件 这就需要zlib 库文件的 支持
安装 zlib 包
解压: tar zvxf zlib-1.2.7.tar.gz cd zlib-1.2.7
指定 编译器
#CC=arm-linux-gcc
配置:./configure --prefix=/mnt/zlib
make make install
即可 然后到 /mnt/zlib/lib/ 下将 libz.so libz.so.1 这两个链接库文件 拷贝到 classpath 目录下即可 可以使用 cp
然后 将 /opt/class 目录下的 所有文件就是要移植的 虚拟机
二、 jVM 移植到 开发板
配置JVM 在6410开发板上的环境变量
1:指 定 类 路 径
export BOOTCLASSPATH=/mnt/flyde/class/classp~1/share/classp~1/glibj.zip:/mnt/flyde/class/jamvm/share/jamvm/classes.zip
2:指 定 LD_LIBARY_PATH 环 境 变 量 到 /classjava/classpath
下, 那 里 有 许 多 *.so 文 件 , 这 些 都 是 java 核 心 类 库 API 的 C 程 序
链接
export LD_LIBRARY_PATH=/mnt/flyde/class/classp~1/lib/classp~1
3:在目标板上的 /lib 下建立链接
ln -s /mnt/flyde/class/classp~1/libz.so.1 /lib/libzso~1.1
ln -s /mnt/flyde/class/classp~1/libz.so /lib/libz.so
4:添加环境变量 PATH
export PATH=$PATH:/mnt/flyde/class/jamvm/bin
或者是将环境变量配置放在 config 里 加上 x 权限 在开发板上执行即可
在开发板上要运行 java字节码文件
注 : 在 开发版 上 使用jamvm 来执行的java 字节码 (.class 文件)
必须是在 宿主机上 使用 jikes 来 编译生成的 编译时 指名要加载的包名
在宿主机上使用 如下命令 来编译.java 文件
Jikes--bootclasspath /opt/JVM/class/jamvm/share/jamvm/classes.zip:/opt/JVM/class/classpath/share/classpath/glibj.zip hello.java
即可生成hello.class 文件
同时 拷贝到 开发板上 即可
注:
Arm-linux-ranlib来对静态库的符号索引表进行更新
用Arm-linux-strip处理过后,将去掉其中的调试信息,执行文 件大小也将小很多