移植java虚拟机CVM到ARM平台
来源:互联网 发布:淘宝网男士羊毛衫 编辑:程序博客网 时间:2024/06/16 08:36
移植java虚拟机CVM到ARM平台
J2ME CDC(Connected Device Configuration,连接式设备配置集)
使用CVM,面向那些具有更强计算能力的嵌入式设备,包含了Java类库的核心部分,是应用Java技术在嵌入式设备上进行开发所需类库的最小集合。
它具有如下优点:
高级网络特性:CDC位基于套接字的网络编程技术提供了最新Java API
满足Jini技术的需求:基于CDC远程方法调用(RMI)可选包可实现对基于完全Jini技术的设备支持。
方便的移植:CDC的Foundation Profile(基础描述集)核心类库包括了广为使用的java.lang、java.net、java.io、java.util、java.security和java.text包
清除了deprecated方法:程序更安全、易于理解
可以利用更高级的包进行扩展,比如说Personal Basis Profile(PBP个人基础描述集)和Personal Profile(PP个人描述集)等。
CDC向小型设备展现了大量的Java 2技术,与Jini技术的结合提高了设备的灵活性,以及能够不断进化发展的能力,实现即插即用,分布计算等等。
CDC对资源的要求:
内存:2MB ROM、512KB RAM
处理器:32位CPU
网络连接能力:至少支持UDP,附加的profile可添加对TCP/IP的完全支持
用户界面:没有支持图形用户的GUI,可添加描述集实现。
一、选用sun的phoneme
https://phoneme.dev.java.net/
二、下载
http://download.java.net/mobileembedded/phoneme/advanced/phoneme_advanced-mr2-dev-src-b97-20_nov_2008.zip
三、解压
unzip phoneme_advanced-mr2-dev-src-b97-20_nov_2008.zip
四、修改makefile
cd phoneme_advanced_mr2/cdc/build/linux-arm-generic
gedit GNUmakefile
修改 CVM_TARGET_TOOLS_PREFIX=/usr/local/arm/4.3.2/bin/arm-linux- 为自己的交叉编译器的地址
修改 USE_AAPCS ?= false 为 true
五、输出PATH
export PATH=/usr/local/arm/4.3.2/bin/:$PATH 为自己的交叉编译器的地址
六、编译
make
七、如果是使用ubuntu的朋友,可能要安装sun-java6-jdk和另外的一两个工具
Java SDK安装配置
http://wiki.ubuntu.org.cn/Java%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE
另外的一两个工具可以通过 apt-get install 来安装(出错时会提醒的了,具体我忘了,没有记录)
八、出错
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:45:26: error: asm/ucontext.h: No such file or directory
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:In function 'handleSegv':
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:224: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:285: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:285: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:286: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:294: error: dereferencing pointer to incomplete type
修改 segvhandler_arch.c 文件
gedit ../../src/linux-arm/javavm/runtime/segvhandler_arch.c
修改
#define ucontext asm_ucontext
#include <asm/ucontext.h>
为
//#define ucontext asm_ucontext //注释掉这句
#include <ucontext.h> //去掉arm/
九、编译
make
编译成功!
ls
可以看到在当前目录有
bin lib testclasses.zip
十、测试
1)、拷贝上面三个文件与文件夹到开发板/home/j2me目录
2)、在开发板/etc/init.d/rcS文件里加入如下
JAVA_HOME=/home/j2me
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
3)、经典的HelloWorld
cd /home/j2me/bin
./cvm -cp ../testclasses HelloWorld
可以看到输出了 HelloWorld.
4)、来个全面测试
./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"
*<clinit> threw java.lang.ExceptionInInitializerError
*<clinit> 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
*CONGRATULATIONS: test Test completed with 411 tests passed and 0 failures
这句话意味着什么,我就不说了~~ 恭喜你!
---------------------------------------
我的补充:
GNUmakefile里有两个USE_AAPCS ,都要改成false
否则运行时报
Java VM panic: AAPCS calling convention used; compilation must use -DAAPCS
J2ME CDC(Connected Device Configuration,连接式设备配置集)
使用CVM,面向那些具有更强计算能力的嵌入式设备,包含了Java类库的核心部分,是应用Java技术在嵌入式设备上进行开发所需类库的最小集合。
它具有如下优点:
高级网络特性:CDC位基于套接字的网络编程技术提供了最新Java API
满足Jini技术的需求:基于CDC远程方法调用(RMI)可选包可实现对基于完全Jini技术的设备支持。
方便的移植:CDC的Foundation Profile(基础描述集)核心类库包括了广为使用的java.lang、java.net、java.io、java.util、java.security和java.text包
清除了deprecated方法:程序更安全、易于理解
可以利用更高级的包进行扩展,比如说Personal Basis Profile(PBP个人基础描述集)和Personal Profile(PP个人描述集)等。
CDC向小型设备展现了大量的Java 2技术,与Jini技术的结合提高了设备的灵活性,以及能够不断进化发展的能力,实现即插即用,分布计算等等。
CDC对资源的要求:
内存:2MB ROM、512KB RAM
处理器:32位CPU
网络连接能力:至少支持UDP,附加的profile可添加对TCP/IP的完全支持
用户界面:没有支持图形用户的GUI,可添加描述集实现。
一、选用sun的phoneme
https://phoneme.dev.java.net/
二、下载
http://download.java.net/mobileembedded/phoneme/advanced/phoneme_advanced-mr2-dev-src-b97-20_nov_2008.zip
三、解压
unzip phoneme_advanced-mr2-dev-src-b97-20_nov_2008.zip
四、修改makefile
cd phoneme_advanced_mr2/cdc/build/linux-arm-generic
gedit GNUmakefile
修改 CVM_TARGET_TOOLS_PREFIX=/usr/local/arm/4.3.2/bin/arm-linux- 为自己的交叉编译器的地址
修改 USE_AAPCS ?= false 为 true
五、输出PATH
export PATH=/usr/local/arm/4.3.2/bin/:$PATH 为自己的交叉编译器的地址
六、编译
make
七、如果是使用ubuntu的朋友,可能要安装sun-java6-jdk和另外的一两个工具
Java SDK安装配置
http://wiki.ubuntu.org.cn/Java%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE
另外的一两个工具可以通过 apt-get install 来安装(出错时会提醒的了,具体我忘了,没有记录)
八、出错
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:45:26: error: asm/ucontext.h: No such file or directory
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:In function 'handleSegv':
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:224: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:285: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:285: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:286: error: dereferencing pointer to incomplete type
../../src/linux-arm/javavm/runtime/segvhandler_arch.c:294: error: dereferencing pointer to incomplete type
修改 segvhandler_arch.c 文件
gedit ../../src/linux-arm/javavm/runtime/segvhandler_arch.c
修改
#define ucontext asm_ucontext
#include <asm/ucontext.h>
为
//#define ucontext asm_ucontext //注释掉这句
#include <ucontext.h> //去掉arm/
九、编译
make
编译成功!
ls
可以看到在当前目录有
bin lib testclasses.zip
十、测试
1)、拷贝上面三个文件与文件夹到开发板/home/j2me目录
2)、在开发板/etc/init.d/rcS文件里加入如下
JAVA_HOME=/home/j2me
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
3)、经典的HelloWorld
cd /home/j2me/bin
./cvm -cp ../testclasses HelloWorld
可以看到输出了 HelloWorld.
4)、来个全面测试
./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"
*<clinit> threw java.lang.ExceptionInInitializerError
*<clinit> 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
*CONGRATULATIONS: test Test completed with 411 tests passed and 0 failures
这句话意味着什么,我就不说了~~ 恭喜你!
---------------------------------------
我的补充:
GNUmakefile里有两个USE_AAPCS ,都要改成false
否则运行时报
Java VM panic: AAPCS calling convention used; compilation must use -DAAPCS
0
上一篇:嵌入式web服务器boa的编译移植
下一篇:fedora18默认进入init3(字符界面)的方法
相关热门文章
- windows C 与 linux C区别?...
- CentOS5下XEN虚拟机的安装和配...
- VmWare虚拟机增加硬盘容量的方...
- 欢迎sunny阿飞happy在ChinaUni...
- 欢迎demon_chin在ChinaUnix博...
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- 什么是shell
- linux socket的bug??
- linux的线程是否受到了保护?...
- 修改默认端口为222,centos自...
- 用PHP做一个ftp登录页面...
- Toad for Oracle工具,为什么在...
- 本地win7安装vmw9系统winserv...
- powermt config是所什么用的...
给主人留下些什么吧!~~
评论热议
- 移植java虚拟机CVM到ARM平台
- 移植JAVA虚拟机CVM到ARM平台(收藏)
- java虚拟机CVM到ARM平台
- 移植CVM到arm920
- 关于嵌入式Java虚拟机 --- CVM
- 移植 ffmpeg 到 ARM 平台
- DNSmasq移植到arm平台
- 移植OpenCV到ARM平台
- 移植e2fsprogs到arm平台
- 移植Lua到ARM平台
- 移植e2fsprogs到arm平台
- Jrtplib移植到arm平台
- 移植ethtool到arm平台
- 移植mysql到ARM平台
- 移植QT到arm平台
- caffe移植到arm平台
- strace工具移植到ARM(davinci)平台
- LOG4C移植到ARM平台流程
- C++之从头开始(2)
- 友善SD卡烧写工具(SD-Flasher)替代解决方案
- Linux使用高压缩率的lzma和xz
- 嵌入式web服务器boa的编译移植
- 维吉尼亚密码及其破解
- 移植java虚拟机CVM到ARM平台
- fedora18默认进入init3(字符界面)的方法
- C语言中extern的用法
- fedora18 init3模式下,startx进入纯英文界面,输入中文的方法
- allegro PCB拼板(不同电路板)
- allegro拼板(同一块电路板)
- ALLEGRO 问题累积
- allegro给批量via加上gnd 的net属性的方法
- 嵌入式系统Linux内核开发工程师必须掌握的三十道题
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
实施工程师
职级并行实施细则
道路交通法实施条例
招标投标法实施条例
新公务员法实施细则
公务员法实施细则
实施乡村振兴战略
社区矫正实施办法
招标投标实施条例
采购法实施条例
网络安全法实施时间
安全生产法实施时间
国6排放标准实施时间
公务员法实施细则全文
监督宪法实施
招投标法实施细则
森林法实施条例
所得税法实施条例
行政复议法实施条例
招投标实施细则
交通安全法实施条例
招投标实施条例
国六排放标准实施时间
一批新规10月实施
社保降费正式实施
房贷利率新规实施成都
房贷利率新规实施青岛
托育机构新规实施
物业管理条例实施细则
驾考新规2019实施时间
道路交通安全法实施条例
医疗机构管理条例实施细则
增值税暂行条例实施细则
公务员职级并行实施细则
网络主播持证上岗实施
脱贫攻坚责任制实施办法
2020年中国一妻二夫实施
职务职级并行制度实施方案
烟花爆竹经营许可实施办法
车辆购置税新规7月起实施
2019新劳动法辞退赔偿实施细则