KVM移植到ARM-Linux步驟
第一步:安裝j2sdk-1_4_2_18-linux-i586.bin,並設定此jdk的環境變數
直接執行此bin檔案邊可以順利安裝,主要問題在於jdk環境變數的設定。
開啟根目錄下的.bash_profile檔案(隱藏檔案,安ctrl+h顯示),新增如下程式碼:
|
/home/j2sdk-1_4_2_18/資料夾下 其中PATH是指指令的
搜尋路徑,比如說用javac去編譯一個.java檔案,直接在命令列中用javac就可以,而不要代絕對路徑了。 CALSSPATH中的 $JAVA_HOME/lib 為你的java程式碼執行的類 路徑,
/root/JAVA 為編譯你的java程式碼生成的class所放置的路徑。
第二步:修改程式碼
第一處:修改j2me_cldc/kvm/VmUnix/build/目錄下的makefile檔案
進入j2me_cldc/kvm/VmUnix/build/,vi Makefile,主要修改將原來使用的x86的編譯器GCC改為我們的arm-linux-gcc,這樣才能得到我們的所需,我主要是修改下面的句子:
ifeq ($(GCC), true) CC =arm-linux-gcc
另外在檔案的開始指定export PLATFORM=linux
第二處:修改j2me_cldc/kvm/VmUnix/src/runtime_md.c檔案
把這個檔案中void InitializeFloatingPoint()
#if defined(LINUX) && PROCESSOR_ARCHITECTURE_X86
/* Set the precision FPU to double precision */
// fpu_control_t cw = (_FPU_DEFAULT & ~_FPU_EXTENDED) | _FPU_DOUBLE;
// _FPU_SETCW(cw);
#endif
這樣,編譯的時候才不會出現錯誤,但也不支援浮點數了。
第三步:編譯生成KVM
修改完成之後記得要儲存,然後進入j2me_cldc-1_1-fcs-src-winunix/kvm/VmUnix/build目錄,make,這樣就會順序完在此目錄下生成KVM可執行bin檔案
第四步:編譯生成preverify
直接進入tools/preverfiyer/build/linux下,make,這裡沒有必要對這個makefile進行修改。可以看到此時在目錄下生成了preverfiyer可執行檔案。
第五步:測試,驗證KVM移植成功
1、編寫Hello World程式碼,儲存成
FirstSample.java
|
2、編譯:javac FirstSample.java
如果你之前安裝jdk的時候環境變數沒有設定好這步會出錯,記得修改的
.bash_profile要重新啟動計算機才生效。 3、預校驗preverify:
將生成的preverify可執行檔案放到你檔案系統的/bin目錄下面去,然後
preverify -classpath kvm/classes -d . mydir preverify有幾個引數:
-classpath 同上 -d 輸出驗證後的class檔案,預設的是當前目錄下的output資料夾下。這裡最容易出錯了,我在此處就折騰了老半天。這樣生成的.class檔案放到板子上去執行會出現如下提示: ALERT:java/lang/NoClassDefFoundError
解決辦法:
preverify的時候,在classpath中不僅要指定自己的類,而且還要指定需要用來做驗證處理的CLDC的類(在cldc中是在tools/jcc下的那兩個zip 包)將它解壓出來,然後在classpath中指定它的路徑就可以了比如:將其解壓成d:/classes那麼preverify應該寫成(比如要驗證的class為test.class)
preverify -classpath d:/classes;. test
(注d:/classes;. 這裡是分號和點,分號是表示路徑的分隔,點是表示test在當前目錄下)
要相應改動 preverify -classpath d:/classes;. test此句。
我的過程如以下截圖所示:
4、在板子上校驗
將kvm和經過preverify處理之後生成的FirstSample
.class檔案放置到開發板中,執行,執行如下指令:
#kvm FirstSample 注:不要畫蛇添足加.class字尾寫成