`

JAVA在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- 为自己的交叉编译器的地址


五、输出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

分享到:
评论

相关推荐

    ARM开发板配置java运行环境成功笔记记录

    在本文中,我们将深入探讨如何在ARM架构的开发板上配置Java运行环境,以便能够成功地执行Java测试代码。...一旦完成,你就可以在ARM平台上编写、编译和运行Java应用程序,这对于物联网设备的开发和测试非常有帮助。

    javacv1.1-android-armARM

    在这个“javacv1.1-android-armARM”压缩包中,主要是针对Android ARM架构的版本,使得开发者能够在运行Android系统的设备上进行图像和视频处理。 1. **JavaCV**:JavaCV是一个Java接口,它封装了多个计算机视觉库...

    java8安装包_linux-arm版本.rar

    在本场景中,我们讨论的是"java8安装包_linux-arm版本.rar",这是一个针对Linux ARM平台的Java 8安装压缩包。 首先,要安装这个Java 8版本,你需要遵循以下步骤: 1. **下载**: 从可靠的源获取"java8安装包_linux-...

    java-7-openjdk-arm64-aarch64.tar.gz

    Java 7 OpenJDK Arm64 AArch64 压缩包文件“java-7-openjdk-arm64-aarch64.tar.gz”是专为基于ARM架构的64位系统设计的Java开发运行环境。这个压缩包包含了OpenJDK 7的实现,OpenJDK是一个开源版本的Java开发工具包...

    Java虚拟机在ARM—Linux平台的移植研究.pdf

    该研究的结果可以应用于嵌入式系统的开发,实现Java程序在嵌入式设备上的运行环境。 Java虚拟机的移植对于嵌入式系统的发展具有重要意义,可以实现Java程序在嵌入式设备上的运行环境,提高嵌入式系统的智能化和...

    Java1.8 Linux环境下 x86、x64 以及 arm架构的安装包 RPM格式 和 tar.gz格式 共6个文件

    - `jdk-8u271-linux-aarch64.rpm`:这是针对64位ARM架构(如树莓派等设备)的RPM安装包,适合在ARM处理器上部署Java应用。 2. **tar.gz格式**: - `jdk-8u271-linux-i586.tar.gz`:32位x86版的源代码压缩包,用户...

    JavaWeb应用在ARMLinux平台上的实现.pdf

    "JavaWeb应用在ARMLinux平台上的实现" 本文主要讨论了在ARMLinux平台上实现JavaWeb应用的详细过程。首先,作者们完成了Java虚拟机JAMVM、Java Web容器Winstone和嵌入式数据库Sqhte的移植配置,并成功地在ARMLinux...

    JAVA Linux ARM 中文手册

    【标题】"JAVA Linux ARM 中文手册"是一个综合性的资源包,主要涵盖了Java在Linux操作系统下的应用以及在ARM架构上的开发知识。这个压缩包显然旨在为开发者提供在这些技术领域内的详细指南,帮助他们理解和实践Java...

    arm64位系统jdk1.8版opencv动态库opencv-454.jar和libopencv-java454.so

    针对arm64架构,这是ARM公司设计的一种64位指令集,常用于移动设备和嵌入式系统,近年来也开始被广泛应用在服务器领域。arm64位系统具有更高的计算能力和能效比,对于处理图像和视频数据等密集型任务尤为适合。此...

    java调用摄像头推流(arm架构,树莓派,安卓可用)

    下面将详细介绍如何在Java中调用摄像头并进行推流,以及与ARM架构和Android设备相关的技术要点。 1. **Java Media Framework (JMF) 和 OpenCV**: Java Media Framework是Java平台上的多媒体处理框架,可以用来...

    Arm.rar_arm java_arm 聊天室_java群聊开发_java聊天室_私聊

    标题中的"Arm.rar_arm java_arm 聊天室_java群聊开发_java聊天室_私聊"暗示了这是一个关于使用Java编程语言开发的聊天室应用程序,特别提到了支持群聊和私聊功能,并且可能涉及了ARM架构的适配。描述中的"实现java...

    Java虚拟机向ARM平台的移植

    移植完成后,必须对移植后的JVM进行详尽的测试,确保其在ARM平台上能够正确运行各种Java应用,同时满足性能需求。这包括基本的字节码解释、垃圾回收、多线程支持以及与硬件资源的交互等。 5. **优化**: 为了提高...

    Java虚拟机在ARM_Linux平台的移植全过程

    ### Java虚拟机在ARM_Linux平台的移植全过程 #### 一、引言 随着软件行业的开源风气日益增强,开源的Java虚拟机(JVM)的开发变得越来越活跃。市场上已经出现了一系列成熟且易于移植的开源Java虚拟机,例如Kaffe、...

    基于arm的一些应用实例

    - **应用程序开发**:展示如何在ARM设备上开发用户界面、数据处理和网络通信等功能,可能涵盖Android应用程序的Java或Kotlin开发,或者在RTOS上用C/C++编写控制逻辑。 - **硬件交互**:讲解如何通过编程控制ARM芯片...

    Java SE Development Kit 17.0.4.1 Arm 64 DMG Installer

    随着Apple转向自家的基于ARM架构的M1芯片,这个版本的JDK确保了在新款Mac电脑上能顺利运行Java应用程序,提供原生支持,从而获得更好的性能和兼容性。 DMG文件是苹果操作系统特有的安装镜像格式,扩展名为".dmg"。...

    java_arm_porting.rar_JAVA虚拟机

    在本文中,我们将深入探讨将Java虚拟机移植到ARM架构的过程,这是一种广泛应用于嵌入式系统、移动设备和服务器的处理器架构。 首先,我们需要理解ARM平台的特性。ARM(Advanced RISC Machines)是一种精简指令集...

    基于Java与html实现ARM与Android的互联网智能家居系统

    Android是基于Java的开源操作系统,因此Java在这里用于开发Android应用程序,可能是一个配套的控制应用,用于与智能家居系统通信。HTML是超文本标记语言,用于创建网页界面。ARM代表了硬件层面的处理器架构,表明...

    基于麒麟系统arm64的jdk8基础镜像

    基于麒麟系统arm64的jdk8基础镜像,亲测可用!!! # 选择一个已有的os镜像作为基础 FROM centos@sha256:43964203bf5d7fe38c6fca6166ac89e4c095e2b0c0a28f6c7c678a1348ddc7fa # ADD命令 将jdk打包文件上传到镜像...

    swt-arm64.jar.zip

    `swt-arm64.jar`针对64位ARM架构进行了优化,确保在这些平台上运行的Java应用能够充分利用硬件资源,提供流畅、高效的用户体验。 在国产化服务器环境中,如飞腾和麒麟服务器,由于它们采用了非Intel的CPU架构,因此...

    《ARM系列处理器应用技术完全手册》

    Jazelle技术则允许在ARM处理器上同时运行Java应用程序和其他传统应用,进一步提升性能和降低系统成本。 ARM处理器的应用范围广泛,不仅局限于某一种具体产品,而是渗透到几乎所有电子产品的核心当中。无论是在智能...

Global site tag (gtag.js) - Google Analytics