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