移植Java虚拟机到mini2440

发布者:AngelicGrace最新更新时间:2024-06-27 来源: elecfans关键字:移植  Java虚拟机  mini2440 手机看文章 扫描二维码
随时随地手机看文章

一、选用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

相关推荐文章《mini2440 移植 Java虚拟机的错误处理 》 http://www.linuxidc.com/Linux/2011-08/41914.htm

四、修改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和另外的一两个工具
    Ubuntu下Java SDK安装配置具体参考见这篇 http://www.linuxidc.com/Linux/2011-08/41913.htm

    另外的一两个工具可以通过 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
        这句话意味着什么,我就不说了~~ 恭喜你!

关键字:移植  Java虚拟机  mini2440 引用地址:移植Java虚拟机到mini2440

上一篇:mini2440 移植 Java虚拟机的错误处理
下一篇:mini2440通过NFS启动的U-Boot参数设置

推荐阅读最新更新时间:2024-11-10 16:11

基于STM32MP157的Linux操作系统移植 —Trusted Firmware-A移植
嵌入式高速发展的今天,大量的嵌入式设备使用了arm为核心的芯片。我们会接触到越来越多的嵌入式设备,一个问题油然而生:数量如此巨大的嵌入式设备的安全性如何?目前针对嵌入式安全的技术和标准可谓千姿百态,除了必要的硬件安全技术,与之配套的安全软件也是必不可少的一部分。我们今天要介绍的是基于arm的可信固件Trusted Firmware-A,简称TF-A。它是一个开源软件,运行在一个硬件隔离的安全环境中并提供安全服务。 实验目的 完成TF-A的基本功能实现TF-A引导u-boot启动。 实验平台 华清远见开发环境,FS-MP1A平台 实验步骤 本实验基于tf-a-stm32mp-2.2版本,然后添加意法半导体提供的补丁文件。 导入代
[单片机]
RTEMS在S3C2440上的移植-(4)
有了前一篇文章的铺垫,基本上移植的工作就成功了一大半了,接下来要做的就是针对2410和2440的不同及不同开发板模块、接口的差异对2410的BSP进行修改工作。由于2410的寄存器基本吻合,所以头文件不改也没问题,这里我主要还是参考了Etual大牛的博客做了一下工作: 1.修改了时钟(PLL设置)。 libcpuarms3c24xxclocksupport.c 修改get_FCLK 由于2440 的PLL计算公式不同,在原来的基础上乘以2 就行了。修改为 return((BSP_OSC_FREQ * m * 2) / (p s)); 2.对启动代码进行修改。libbsparmsbc2440star
[单片机]
Linux-2.6.32.2内核在mini2440上的移植(六)---添加LCD背光驱动
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,linux 版本:linux-2.6.32.2 7,参考文章: 嵌入式linux应用开发完全手册,韦东山,编著。 Mini2440 之Linux 移植开发实战指南 到目前为止,我们一直都在命令行下移植,查看结果,LCD 屏幕上似乎总是如伸手不见五指
[单片机]
Linux-2.6.32.2内核在<font color='red'>mini2440</font>上的<font color='red'>移植</font>(六)---添加LCD背光驱动
Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方。 UBoot版本:u-boot-2013.01 一、U-Boot命令的格式 即使是内核的启动,也是通过U-Boot命令来实现的。U-Boot中每个命令都是通过 U_BOOT_CMD 宏来定义的,格式如下: U_BOOT_CMD(name,maxargs,repeatable,command, usage , help ) 各项参数的意义如下: 1) -- name:命令的名字,注意,它不是一个字符串(不要用双引号括起来); 2)-- maxargs:最大的参数
[单片机]
Exynos4412 Uboot <font color='red'>移植</font>(三)—— Uboot添加自定义命令
STM32 文件系统 fatfs 移植笔记详解
1、内存和Flash介绍 stm32 的 flash 地址起始于 0x0800 0000,结束地址是 0x0800 0000 加上芯片实际的 flash 大小,不同的芯片 flash 大小不同。 RAM 起始地址是 0x2000 0000,结束地址是 0x2000 0000 加上芯片的 RAM 大小,不同的芯片RAM也不同。 Flash 中的内容一般用来存储代码和一些定义为 const 的数据,断电不丢失,RAM 可以理解为内存,用来存储代码运行时的数据,变量等等,掉电数据丢失。 stm32 将外设等都映射为地址的形式,对地址的操作就是对外设的操作。 stm32 的外设地址从 0x4000 0000 开始,可以看到在
[单片机]
STM32 文件系统 fatfs <font color='red'>移植</font>笔记详解
arm9 mini2440 supervivi烧写方法
一: 使用JLink V8烧写Nor Flash方法: 一. 做好准备工作: 比如安装JLink驱动,USB转串口驱动(如果是笔记本)... 二. 将开发板跳线拨到Nor端,连接好JLink,JLink另外一端连接在笔记本USB端口上,开发板上电。 三. 烧写: (1)打开 开始- SEGGER- J-Link ARM V4.081- J-Flash ARM; (2)File- Open Project,打开s3c2440a_embedclub.jflash(此文件在) (3)Options- Project settings 选择Flash,点击Select flash device,选中开发板对应Nor Flash型
[单片机]
arm9 <font color='red'>mini2440</font> supervivi烧写方法
mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信
这个只能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示。数据传输完后,DMA0产生中断,beep声, LED亮。 DMA基本知识 计算机系统中各种常用的数据输入/输出方法有查询方式(包括无条件及条件传送方式)和中断方式,这些方式适用于CPU与慢速及中速外设之间的数据交换。但当高速外设要与系统内存或者要在系统内存的不同区域之间进行大量数据的快速传送时,就在一定程度上限制了数据传送的速率。直接存储器存取(DMA)就是为解决这个问题提出的,采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存
[单片机]
<font color='red'>mini2440</font>裸机试炼之——DMA直接存取 实现Uart(串口)通信
STM32下uIP移植问题
就我个人认为在uIP的移植中除了驱动之处有以下几点需要注意: 1.uip_timer 时钟要加入到中断中去。 2.各种appcall实现。如在tcp_client_demo.c 有如下语句 if(uip_len 199) { ((u8*)uip_appdata) =0; } strcpy((char*)tcp_client_databuf,uip_appdata); 这样在处理数据长时都是以tcp_client_databuf 数组的长来处理,这样不灵活,client从网络中接收到的数据长本来就是用一个全局变量uip_len来存储的。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved