CVM编译实践笔记

来源:互联网 发布:哒鸣派 知乎 编辑:程序博客网 时间:2024/05/03 01:46

J2ME开发平台的建立
CLDC平台的建立无论是网上还是图书资料都很丰富,而CDC平台的建立资料却很少,可能是使用J2ME用于工业控制领域尝试的开发人员还比较少吧,笔者做这方面尝试的出发点是实现IEC61850,因为61850的描述都是面向对象的,如果用传统的C语言做设备开发将力不从心。而且ARM处理器现已有了支持Java加速器的J系列产品,相信可以很好的解决Java的实时性问题,使Java能够用于工业控制设备领域。由于工业嵌入式设备不似移动设备,它的资源比较丰富,可以在上面实现CDC配置集,更理想的情况是使用Personal Profile。下面详细说明CDC平台的建立过程(RedHat9环境):
1.下载如下资源
j2sdk-1_4_2_08-linux-i586
j2me_cdcfp-1_0_1-fcs-src-b12-linux-i686-14_May_2002
compat-egcs-6.2-1.1.2.16.i386
compat-glibc-6.2-2.1.3.2.i386
j2me_pp-1_0-bin-linux-i686(这是Personal Profile描述集,如果选用Personal Basis Profile描述集则需下载j2me_pb-1_0-fcs-src-b45-linux-i686-15_jul_2002)
pdksh-5.2.14-21.i386
注:jdk的版本必须是1.4.*版本的,否则会出现编译问题,我开始时按Sun的 CDC specification中说的1.3.1版本JDK,结果走了很多弯路,估计是应为1.3.1版本只可在7.1版本的RedHat上支持CDC吧。ksh也是必须安装的,cdcfp在bash下无法编译,必须在ksh下,我也不知道为什么,真是很麻烦吧,嘻嘻!egcs和glibc也需安装,否则将出现找不到库文件之类的错误。以上资源在内部下载中software/j2me/目录下,我已经整理了,可供下载,也可在sun的网页上下载,egcs,glibc和ksh就需要rpmfounder网站上去search一下了。
首先安装j2sdk-1_4_2_08-linux-i586(尽量下载rpm包,安装起来比较方便,具体的安装步骤不用说了吧,unzip一下,rpm –ivh一下就ok拉!)
然后设置环境变量,在bash中使用vi .bashrc命令打开bashrc文件,修改后的bashrc文件如下:
#!/bin/sh

# User specific aliases and functions
JAVA_HOME=/usr/java/j2sdk1.4.2_08
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
接下来重启一下终端修改就生效拉!然后安装ksh,egcs和glibc,在终端上运行ksh,出现#提示符就可以进行接下来的工作了,以下的步骤都是在ksh下进行的。
将j2me_cdcfp-1_0_1-fcs-src-b12-linux-i686-14_May_2002解压,里面又有两个压缩文件,将src文件解压,就建立了cdcfoundation目录树了,进入build/share目录,用编辑器打开defs.mk文件,找到
ifeq ($(uname), Linux)
HOST_PLATFORM = linux
LOCALHOSTARCH = $(shell uname -m)
CVM_GNU_TOOLS_PATH=/micro/tools/i686-redhat-linux/gnu/bin
endif
修改其中的CVM_GNU_TOOLS_PATH=/usr/bin
(CDC的建立所需文件就在linux,linux-*,share目录中。目前我只试了i686的实现,接下来需要结合开发板尝试在ARM下的实现)
接下来进入build/linux-i686目录,运行如下命令
# make CC=egcs CVM_JAVABIN=<your_java_bin> CVM_DEBUG=true J2ME_CLASSLIB=foundation
其中<your_java_bin>是你jdk安装的目录,例如我机子上就是:
# make CC=egcs CVM_JAVABIN=/usr/java/j2sdk1.4.2_08/bin CVM_DEBUG=true J2ME_CLASSLIB=foundation
(具体CVM配置的一些可选项可根据需求配置,可以参考之前修改的defs.mk文件,其中有所有CVM配置选项的注释)
这样编译就完成了,可以看到编译过程建立了一些目录,其中/bin文件下产生了cvm虚拟机。接下来就可以测试一下了,进入这个/bin目录下,键入如下命令./cvm -Djava.class.path=../testclasses.zip HelloWorld
Hello World就显示在终端上了!
Personal Profile配置集j2me_pp-1_0-bin-linux-i686(如果下载的src文件,需按如上步骤进行编译,只是改J2ME_CLASSLIB=personal)
这里下载了bin文件,直接将其解压缩,建立目录树(要对cvm移植的话,还是需要下载src文件,进行配置再编译,以有效的利用资源),编辑一个HelloWordPersonal.java做测试
/*HelloWorldPersonal.java*/
import java.awt.*;
import java.awt.event.*;
public class HelloWorldPersonal extends Frame
{
public void start()
{
Label label=new Label("HelloWorld from J2ME personal");
add("Center",label);
validate();
}
public static void main(String argv[])
{
HelloWorldPersonal app=new HelloWorldPersonal();
app.start();
app.setSize(220,200);
app.validate();
app.show();
}
}
编译该文件:
javac –bootclasspath /usr/java/personal/btclass.zip:/usr/java/personal/lib/personal.jar HelloWorldPersonal.java
运行该文件
进入personal/bin/目录下
./cvm –Djava.class.path=/usr/java/personal/ HelloWorldPersonal
就可以在弹出的窗口中看到显示了HelloWorld from J2ME personal消息。
接下来的工作就是如何将cvm移植到ARM开发板上,进而做jini的实现,再来找到一种好的开发工具(以上这种基于命令行的编译执行过程太麻烦了)来编写基于61850实现的应用程序,然后我就可以毕业拉,^_^!毛主席告诉我们前途是光明的,道路是坎坷的。


附:J2ME简介(给不了解J2ME的兄弟们)
J2ME用于小型设备实现的优点:
可靠:嵌入式设备无法忍受没完没了的重新启动和死机,Java技术消除了这一切;
没有内存指针:开发人员无需进行类似C语言的内存分配和管理;
安全:Java技术内置的安全机制使数据免受未被授权访问的破坏;
不受病毒侵扰:Java技术内置的安全机制同样阻止了病毒的发生;
自动内存垃圾回收:垃圾自动回收将内存泄漏减少至最低;
面向对象:Java语言完全面向对象的天性使得软件设计变得轻松自如。

J2ME技术包含两种配置集:CDC和CLDC。
J2ME CLDC(Connected Limited Device Configuration,连接式有限设备配置集)
使用KVM,以资源有限的消费类电子设备为目标平台,实际运行时,KVM共需要128K的可用内存,就能够很好的工作在16位或32位的RISC或CISC处理器上。它的运行速度大概是不使用实时编译器(JIT)的Java Development Kit(JDK)1.1的JVM速度的30% ~80%。其未支持的特性有:字节码验证,Java本地接口,AWT图形库支持,许多诸如Reflection,RMI等高级Java 2特性。
CLDC对资源的要求:
内存:512KB ROM
处理器:16位CPU
网络连接能力:无要求
用户接口:GUI没有打包到CLDC和KVM中,可以使用MIDP(Mobile Information Device Profile)向CLDC添加图形API(实现简单的小屏幕显示,比如说手机显示)

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,可添加描述集实现。

原创粉丝点击