CVM編譯實踐筆記

來源:互聯網
上載者:User

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處理器上。它的運行速度大概是不使用Just-In-Time 編譯器(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,可添加描述集實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.