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

//#define ucontext asm_ucontext     //注释掉这句

#include             //去掉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"

* 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

*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

java cvm_java虚拟机CVM到ARM平台相关推荐

  1. cvm java_移植JAVA虚拟机CVM到ARM平台(收藏)

    J2ME CDC(Connected Device Configuration,连接式设备配置集)使用CVM,面向那些具有更强计算能力的嵌入式设备,包含了Java类库的核心部分,是应用Java技术在嵌 ...

  2. zynq7000系列移植—JRE移植到嵌入式ARM平台(java运行在嵌入式linux)

    转载:https://blog.csdn.net/weixin_39827918/article/details/78806642 前言 因公司项目需求,需要在zynq 7000平台下运行 java ...

  3. cvm java,关于嵌入式Java虚拟机 --- CVM

    Root Data结构体 设计CVM的一个标准就是可以重新启动,无论这个宿主操作系统是否支持进程.抛开进程的支持,来完成冲洗启动虚拟机的过程需要我们能够释放在启动CVM过程中 所有malloc'ed ...

  4. java学习笔记1--开发环境平台总结

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note1.html,转载请注明源地址. 1.Java程序设计语言 Java程序设计语言是一种高 ...

  5. java7 arm_zynq7000系列移植—JDK1.7 移植到嵌入式ARM平台

    今天无意间搜索到 armv7的硬件相关信息--ARM 浮点运算 硬浮点Hard-float 编译器将代码直接编译成发射给硬件浮点协处理器(浮点运算单元FPU)去执行.FPU通常有一套额外的寄存器来完成 ...

  6. Java修炼之路——基础篇——平台无关性

    Java如何实现平台无关性? 首先说无论是哪种语言,都需要经过操作系统和CPU来完成程序的运行.平台无关性指的是程序不会因为操作系统和处理器的不同而不能运行或者发生运行错误.而不同的CPU和OS组成的 ...

  7. 【华为云技术分享】为什么越来越多企业正在往ARM平台迁移?

    架构变迁 说到CPU架构,我们可能必然会提到CISC(复杂指令集,比如桌面端采用的X86系列)和RISC(精简指令集,比如移动端广泛采用的ARM系列).理论上,RISC 相比于 CISC(Intel ...

  8. linux编译x86和arm平台的x264

    摘抄网址:http://blog.csdn.net/baliguan163/article/details/11773363 参考网址:http://blog.csdn.net/evsqiezi/ar ...

  9. JVM基础 之Java HotSpot虚拟机中的内存管理

    1  简介 依托JavaTM 2平台的力量,标准版(J2SETM)实现了内存的自动管理,将开发人员从复杂的显式内存管理中解放出来. 本文将对Sun公司的J2SE发行版中的Java HotSpot虚拟机 ...

最新文章

  1. 停电后,JavaScript定时器居然变慢了~
  2. 新记录诞生,腾讯云2分31秒打破ImageNet训练记录
  3. 自动化测试jenkins shell命令
  4. 面向大数据处理应用的广域存算协同调度系统
  5. 三款免费的PHP加速器:APC、eAccelerator、XCache比较
  6. php ab压力测试,安装Xcache缓存加速php及ab压力测试结果
  7. html按钮样式_一组强大的CSS3 Material 按钮
  8. 使用DBATools编写SQL Server对象脚本
  9. 如何在ubuntu中编写python_在ubuntu下使用visual studio code编写python
  10. 故障树分析法(FTA)
  11. Java实现 蓝桥杯VIP 算法训练 调和数列
  12. python getchar函数_linux命令行下用getchar()函数捕获按键
  13. 期货反跟单-侃侃人工反跟单那些事儿
  14. KVM虚拟机绑定物理CPU进行性能调优
  15. java安装有错误码咋办_java编程出现的错误对应的解决方法
  16. Mac Big Sur提示xxx文件已损坏
  17. UE C++中获得蓝图函数返回值
  18. 新年伊始,25岁“天才少年”曹原再发一篇Nature!9个月的第三篇Nature!
  19. python通达信股票分价表数据_通达信指标——分价图(主图)
  20. JuliaSetMandelBulb @ MayaKK —— 4亿粒子的测试

热门文章

  1. 流氓软件卸载-MrWReSadse、Nexuser.exe、WRSvcmbdl.dll
  2. LinuxCNC与EtherCAT的理解
  3. 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解
  4. WriteProcessMemory的用法
  5. 【AtCoder2442】フェーン現象 (Foehn Phenomena)
  6. 在html里如何下雪花,html加动态雪花
  7. 牛B的人到处都是(打击的一沓糊涂)
  8. Java反射到底反射什么?
  9. 基于Flask+bootstrap+sqlite开发宝宝成长管理系统,宝宝成长记录系统源码
  10. popen和system函数的区别 以及 popen打开的FILE指针能否用close替代fclose关闭