1. 程式人生 > >KVM移植到ARM-Linux步驟

KVM移植到ARM-Linux步驟

所需原始碼:     1、j2sdk-1_4_2_18-linux-i586.bin,不推薦使用jdk1.5及以上版本,不能編譯通過     2、j2me_cldc-1_1-fcs-src-winunix.zip包,此zip包包含KVM的原始碼     3、arm-linux-gcc-2.95.3  或者  arm-linux-gcc-3.3 都能OKay         
     

第一步:安裝j2sdk-1_4_2_18-linux-i586.bin,並設定此jdk的環境變數
        直接執行此bin檔案邊可以順利安裝,主要問題在於jdk環境變數的設定。
        開啟根目錄下的.bash_profile檔案(隱藏檔案,安ctrl+h顯示),新增如下程式碼:

JAVA_HOME=/home/j2sdk-1_4_2_18/j2sdk1.4.2_18
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/lib:/root/JAVA
export JAVA_HOME PATH CLASSPATH

根據你自己的實際解壓位置作適當的修改,我的解壓位置為/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

public class FirstSample
{
    public static void main(String[] args)
    {
    System.out.println("We will not use 'Hello World'");
    }
}

      
         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字尾寫成