`
kiki1120
  • 浏览: 314521 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

移植java虚拟机CVM到ARM平台

阅读更多

J2ME CDCConnected Device Configuration,连接式设备配置集)
使用CVM,面向那些具有更强计算能力的嵌入式设备,包含了Java类库的核心部分,是应用Java技术在嵌入式设备上进行开发所需类库的最小集合。
它具有如下优点:
高级网络特性:CDC位基于套接字的网络编程技术提供了最新Java API
满足Jini技术的需求:基于CDC远程方法调用(RMI)可选包可实现对基于完全Jini技术的设备支持。

方便的移植:CDCFoundation Profile(基础描述集)核心类库包括了广为使用的java.langjava.netjava.iojava.utiljava.securityjava.text
清除了deprecated方法:程序更安全、易于理解
可以利用更高级的包进行扩展,比如说Personal Basis ProfilePBP个人基础描述集)和Personal ProfilePP个人描述集)等。
CDC
向小型设备展现了大量的Java 2技术,与Jini技术的结合提高了设备的灵活性,以及能够不断进化发展的能力,实现即插即用,分布计算等等。
CDC
对资源的要求:
内存:2MB ROM512KB 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

 

分享到:
评论

相关推荐

    java虚拟机cvm

    在Ubuntu 14.04上编译好的CVM可以直接移植到嵌入式系统,这意味着开发者可以在不支持标准JVM的硬件平台上运行Java程序。 1. JVM架构与CVM: - JVM由类加载器、运行时数据区、执行引擎、本地方法接口和本地库组成。...

    arm-linux-cvm

    "arm-linux-cvm"是一个专为ARM架构设计的编译好的CVM(Continuously Variable Slope Delta或Continuous-Time Vector Quantization,有时也被理解为虚拟机)版本。这个软件包是直接在ARM处理器平台上运行的,这意味着...

    嵌入式平台虚拟机移植

    嵌入式平台虚拟机移植,具有移植全过程,详细而又简单

    CVM管理平台介绍.pptx

    【CVM管理平台介绍】 CVM(Cloud Virtualization Manager)管理平台是H3C云计算系统中的核心组件,它提供了一套全面的虚拟化资源管理工具,帮助用户有效地管理和监控数据中心内的资源。本课程旨在使学生了解CVM管理...

    数字电视机顶盒中Java虚拟机的研究

    而Sun公司提供的CVM(C Virtual Machine)是一种针对Linux平台的Java虚拟机实现,它用C语言编写,可以移植到不同的操作系统上。 针对数字电视机顶盒的特定环境,移植Java虚拟机到嵌入式操作系统(如OS20)需要进行...

    消费电子中的数字电视机顶盒中Java虚拟机的研究

    Java虚拟机在机顶盒中起到执行Java应用程序的关键角色,同时通过中间件层将应用与底层操作系统和硬件细节隔离开,简化了上层服务应用的开发复杂度。 本文主要探讨的是J2ME(Java Micro Edition)中的Connected ...

    安装CAS云平台管理软件.doc

    CVM(Cloud Virtual Machine)是云平台的虚拟机管理组件,负责管理虚拟机的生命周期。CVK(Cloud Virtual Kernel)是云平台的虚拟机核心组件,负责提供虚拟机的操作系统。CMUI(Cloud Management User Interface)是...

    BBK CVM开发环境

    CVM,全称为Customized Virtual Machine,是一种定制化的虚拟机,类似于Java的JVM或者Dalvik VM,它允许开发者用特定的编程语言编写代码,并在设备上以虚拟机的形式运行。CVM提供了编译器、连接器等工具,帮助开发者...

    CVM单体电压采样原理图_CVM电路燃料电池单体电压采集_cell_燃料电池CVM_原理图_燃料电池CVM_

    在CVM电路中,电压采样通常采用分压电阻网络,每个单体电池的两端通过一对电阻连接到ADC输入。这种配置可以降低电压,使ADC能够在其输入范围内安全地测量。同时,电阻的选择会影响系统的精度和噪声性能,需要综合...

    CVM 网络类库(跨平台)

    CVM是一个跨平台(现支持Windows和Linux)的小型网络类库,她主要提供多路分离复用、线程池、内存管理、定时器和数据访问功能:多路分离复用:实现IO的异步调用封装,现只提供Socket调用。 线程池:提供一种执行任务的...

    哈尔滨多个关键字请用空格分隔j2me讲义

    与此相对,CDC(Connected Device Configuration)适用于资源更丰富的设备,它运行在更标准的Java虚拟机CVM(Compact Virtual Machine)上。 MIDP(Mobile Information Device Profile)是建立在CLDC之上的简档,为...

    培训CVM资料

    福建星网锐捷网络有限公司的RG-CVM产品,旨在为企业和个人用户提供高效、灵活、安全的云虚拟机解决方案。通过本培训资料,我们将深入了解RG-CVM的部署流程、硬件特性、安装配置、维护策略以及常见问题的解决方法。 ...

    Java编程思想学习笔记

    JVM的类型包括Java SE平台的HotSpot虚拟机、Java ME平台的CVM等。了解不同类型的JVM有助于我们理解Java运行环境的多样性和适用性。 JVM的原理涉及其作为虚拟处理器的角色,它位于Java编译器和操作系统平台之间,...

    H3C云计算《CVM标准版功能原理》培训.rar

    在CVM中,存储资源挂载涉及到iSCSI、FC(Fibre Channel)或NFS(Network File System)等协议,允许虚拟机挂载远程存储设备。部署过程中,我们需要规划存储池,分配存储卷,设置I/O策略,并进行性能优化。此外,存储...

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

    3. **移植**: 移植指的是将软件从一个平台或环境迁移到另一个平台或环境的过程。在这个案例中,CVM需要被修改以使其能在ARM架构上运行,可能包括调整底层的系统调用、内存管理和其他硬件相关的功能。 压缩包内的...

    java_card_kit-3_0_1-doc-spec-rr-15_may_2009

    Java Card技术是Oracle公司开发的一种在智能卡上运行微型Java应用程序的平台,它允许开发者创建安全、可移植的卡片应用。这个"java_card_kit-3_0_1-doc-spec-rr-15_may_2009"是Java Card开发套件的文档规范,发布于...

    基于java语言的C语言编译器实现

    基于Java语言和java图形界面,将C语言的基础语法经过词法分析,语法分析,语义处理翻译为中间代码四元式,再将四元式翻译为标准JVM虚拟机的字节码bytecode,模拟JVM虚拟机实现一个CVM虚拟机,并运行该程序。

    OpenCDK:OpenCDK(开放Caitlyn开发套件)是Caitlyn平台的免费开源实现。 这包括Caitlyn编译器和Caitlyn虚拟机(CVM)

    这包括Caitlyn编译器和Caitlyn虚拟机(CVM)。 贡献 与我们互动的最好方法是测试工具并通过GitHub报告错误。 如果您是开发人员。 请检查: 建筑 Linux支持Caitlyn语言,但其他平台也应该能够构建它。 首先,您需要...

Global site tag (gtag.js) - Google Analytics