注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

singleboy的博客

愿工作和生活中的点点滴滴与你分享。。。感谢各位同仁,让我跟着大家一起进步。

 
 
 

日志

 
 

Linux应用程序开发(四)---移植jamvm+jikes到arm linux  

2011-08-18 09:37:59|  分类: Linux应用开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

移植环境(红色粗字体字修改后内容,蓝色粗体字为特别注意内容)

1,主机环境:VMare下CentOS 5.5 ,1G内存。

2,集成开发环境:Elipse IDE

3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gneabi-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,参考文章:

简单几步把JVM移植到ARM环境中

JavaWeb应用在ARMLinux平台上的实现

如何在arm平台上运行Jetty5(包含移植jamvm + classpath过程)

尽管前面基于php的嵌入式web服务器已经能够运行java脚本文件,而且也能够执行xajax运行库。但是还是有些系统用不到php那样复杂的功能,而且php作为嵌入式的移植也比较复杂。java技术在嵌入式领域的应用已经流行起来。下面就有关java在嵌入式方面的移植和应用问题做些探讨。

名词解释:

JamVM : JamVM是一个新的Java虚拟机,它符合JVM规范第二版本。它与大多数其它虚拟机(不管是免费的还是商业的)相比较显示非常小(PowerPC 220K而Intel 200K)。它虽然小但支持完整的规范包括支持Java Native Interface (JNI) 与反射API。详情请参见http://jamvm.sourceforge.net/

Robert Lougher发布了嵌入式JVM比较结果,参与比较的都是开源Java VMs,有JamVM、PhoneME advanced和Cacao。从各项比较结果来看,JamVM优于其他两者,Cacao最差。

Linux应用程序开发(四)---移植winston+sqlite3+jamvm到arm linux - singleboy - singleboy的博客

Jikes: Jikes是由ibm开发出来的开放源码的java编译器。它具有非常快速的编译速度和高度的兼容性。jikes和rvm用于研究基础虚拟机设计问题的java程序的执行。它将能为研究和学术机构提供提供具有较强伸缩性的原型测试床,能在大量不同的设计上做试验。jikes可以取代javac的作用,将.java文件编译成.class文件文件。   

jikes可以到如下网址下载:

http://jikes.sourceforge.net 

http://linux.softpedia.com/progDownload/Jikes-RVM-Download-1709.html

jikes 作为一款性能优良的Java 编译器,性能要比 Sun 的 javac 或者 tools.jar 好的多。jikes 的 Linux 版本可以很好地支持字符集转换,但是从 sourceforge 下载的 jikes 的 Windows 版本因为没有和 iconv 做连接,因此不支持字符集转换。解决这个问题很容易:重新编译!开源软件就是把 power 完全交在你的手里。 这里是按照 jikes FAQ 的指导重新编译的最新的 jikes 1.22 for Windows,大家可以直接下载了使用。   

jikes 能做什么? javac 能做的所有事情 jikes 全部都能做,它能:

1、在 Ant 创建文件中替代 javac 增量编译 java 源代码。可以极大地提高编译的速度,源文件越多,你的感受就越明显。  

2、在 Tomcat/Jetty 中替代 tools.jar 来编译 JSP 文件。   

注意,tools.jar 是随 JDK 分发的,按照其 License,你无权随你们的产品分发 JDK 或者其中的内容,你只能分发 JRE,因此理论上你必须让用户自己去下载并安装 JDK。有了 jikes,你就可以随你的产品分发,省去了这一步的麻烦。

1.1 JamVM移植

在移植jamvm之前应安装以下库

【1】安装gmp大数运算库(multiple precision arithmetic library)

classpath-0.98版本要求gmp库的版本在4.2以上,而arm-linux-gcc的库中的gmp的版本是4.1.0,需要对其更新

下载gmp-5.0.2.tar.bz2 : ftp://ftp.gnu.org/gnu/gmp/

[root@localhost linux-test]# tar jxvf gmp-5.0.2.tar.bz2
[root@localhost linux-test]# cd gmp-5.0.2

[root@localhost gmp-5.0.2]# tar jxvf gmp-5.0.2.tar.bz2
[root@localhost gmp-5.0.2]# cd gmp-5.0.2
[root@localhost gmp-5.0.2]# CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/arm/4.4.3/arm-none-linux-gnueabi
[root@localhost gmp-5.0.2]# make & install

【2】安装java 核心类库GNU classpath。

(1)下载classpath-0.98.tar.gz

 国内镜像地址:http://mirror.bjtu.edu.cn/gnu/classpath/

官方地址:http://www.gnu.org/software/classpath/classpath.html

(2)下载jamvm-1.5.4.tar.gz

官方地址:http://sourceforge.net/projects/jamvm/files/

(3)配置安装

<1>解压

[root@localhost linux-test]# tar -zxvf classpath-0.98.tar.gz

[root@localhost linux-test]# cd classpath-0.98

<2>配置

配置前清除之前的配置

[root@localhost classpath-0.98]#make distclean

进行配置

[root@localhost classpath-0.98]# CC=arm-linux-gcc CPP=arm-linux-cpp CFLAGS="-g -O2 -Wno-strict-aliasing" CXXFLAGS="-g -O2 -Wno-strict-aliasing" LD=arm-linux-ld DIR=/usr/local/arm/4.4.3/arm-none-linux-gnueabi ./configure --host=arm-linux --disable-gtk-peer --disable-gconf-peer --disable-plugin  --disable-gmp --enable-jni --enable-Werror=no  --with-ecj-jar --prefix=/nfsboot/rootfs/usr/local/classpath

配置说明:

--disable-gtk-peer 不使用gtk+gnome
-Wno-strict-aliasing 为避免产生错误,error: dereferencing type-punned pointer will break strict-aliasing rules

参考文章http://ihacklog.com/linux/memcached-compilation.html

 --enable-Werror 保存其默认[no],不然长生会错误 error: implicit declaration of function 'mpz_set_str'

--disable-gmp  禁用编译本地gmp大数运算库(compile native java.math.BigInteger library)

遗留问题:

在把gmp安装到上面--prefix指定的目录之后,在classpath的configure中指定GMP_CFLAGS为此安装路径,编译仍通不过。在Makefile查看的结果仍是GMP_CFLAGS = -I/usr/include,也即configure只会配置本地gmp库给Makefile,不知怎样让configure去找上面安装的gmp库。没办法只能先使用--disable-gmp 选项禁用gmp库。

进行编译

[root@localhost classpath-0.98]# make

[root@localhost classpath-0.98]# make install

【3】安装jamvm

(1)下载jamvm-1.5.4.tar.gz : http://sourceforge.net/projects/jamvm/files/jamvm/
(2)配置安装

<1>解压

[root@localhost linux-test]# tar -zxvf jamvm-1.5.4.tar.gz
[root@localhost linux-test]# cd jamvm-1.5.4

<2>配置

配置前清除之前的配置

[root@localhost jamvm-1.5.4]# make distclean
进行配置

[root@localhost jamvm-1.5.4]# CC=arm-linux-gcc CPP=arm-linux-cpp LD=arm-linux-ld ./configure --host=arm-linux --with-classpath-install-dir=/nfsboot/rootfs/usr/local/classpath --prefix=/nfsboot/rootfs/usr/local

配置说明:

--with-classpath-install-dir 是指classpath的安装路径

<3>编译安装

[root@localhost jamvm-1.5.4]# make

[root@localhost jamvm-1.5.4]# make install

【4】安装jikes

<1>下载 jikes-1.22.tar.bz2 : http://download.chinaunix.net/download/0006000/5048.shtml

<2>解压并配置

[root@localhost linux-test]# tar -jxvf jikes-1.22.tar.bz2
[root@localhost linux-test]# cd jikes-1.22
[root@localhost jikes-1.22]# CXX=arm-linux-g++ CPP=arm-linux-cpp ./configure --host=arm-linux --prefix=/nfsboot/rootfs/usr/local
<3>编译

[root@localhost jikes-1.22]# make
[root@localhost jikes-1.22]# make install

【5】在目标板上建立到jamvm和jikes的软连接

[root@mini2440 bin]#cd /usr/local/bin
[root@mini2440 bin]#ln -s jamvm java
[root@mini2440 bin]#ln -s jikes javac
[root@mini2440 bin]#ls -l javac
lrwxrwxrwx    1 root     root            5 Aug 16 07:23 javac -> jikes
[root@mini2440 bin]#ls -l java
lrwxrwxrwx    1 root     root            5 Aug 16 03:26 java -> jamvm
[root@mini2440 bin]#

【6】设置目标板运行的环境变量

[root@localhost jamvm-1.5.4]# vim /nfsboot/rootfs/etc/profile

修改如下:

USER="id -un"
LOGNAME=$USER
PS1='[\u@\h \W]\$'
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/local/classapth/bin
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/classpath/lib/classpath
export PHP_INI_PATH=$PATH_INI_PATH:/usr/local
export BOOTCLASSPATH=/usr/local/share/jamvm/classes.zip:/usr/local/classpath/share/classpath/glibj.zip
修改后保存退出。

经过以上几个步骤,java虚拟机就成功地移植到了arm-linux平台上,java字节码是跨平台的,所以嵌入式java应用开发环境没有交叉编译的概念。实际应用中,使用宿主机上的集成开发环境(如Eclipse)编码,生成的字节码.class文件,就可直接运行在嵌入式目标板上。

【7】运行测试

启动开发板,在目标板/root目录下新建一个文件HelloWorld.java,然后将下面内容复制其中

class HelloWorld
{
 p lic static void main(String args[])
 {
  System.out.println("welcome to java!");
 }
}

然后保存

在目标板的串口终端进行编译

[root@mini2440 /root]#jikes HelloWorld.java
[root@mini2440 /root]#ls
HelloWorld.class  HelloWorld.java   HelloWorld.java~  rootfs.tar.gz
[root@mini2440 /root]#

然后经在root目录下运行

[root@mini2440 /root]#jamvm HelloWorld
welcome to java!
[root@mini2440 /root]#

遗憾的是,jikes项目不再是提供版本升级,仅支持到java 5.0,Java 6.0 以上不再支持。
  评论这张
 
阅读(1168)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017