久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14913|回復: 1
收起左側

嵌入式中的jvm

[復制鏈接]
ID:262 發表于 2013-6-14 19:07 | 顯示全部樓層 |閱讀模式
幾年前在arm, powerpc, mips上編譯了phoneme,并成功運行今
天再次想把java移到arm,dsp(uclinux), powerpc上
想到當前編譯phoneme是如此地難和復雜,dalvik是不太可能了,在想還有沒有其它方案。
找找發現了以下:
cacao
jamvm
上面只是jvm,還需要以下其中一個class庫
GNU ClassPath  (http://www.gnu.org/software/classpath/docs/hacking.html
IcedTea
OpenJDK
(其實IcedTea與OpenJDK是兄弟來的,也就是同源,OpenJDK是當前sun開源的jdk,但是由于有一些是屬于第三方的,開不了源,只用
二進制的,于是IcedTea就把這沒開源的二進制實現了并開源)

以下操作都是在ubuntu 10.10上進行,并以arm為例,powerpc等同例也
安裝openjdk(之前安裝了sun jdk 6,所以把原來默認的openjdk給刪除了,現在再安裝回來)
sudo apt-get install default-jdk

查看/修改系統提供的JDK版本信息
sudo update-alternatives --config java
sudo update-alternatives --config javac

classpath_0.98.orig.tar.gz
編譯并安裝GNU ClassPath
CC=arm-none-linux-gnueabi-gcc \
LD=arm-none-linux-gnueabi-ld \
AR=arm-none-linux-gnueabi-ar \
RANLIB=arm-none-linux-gnueabi-ranlib \
./configure \
     --disable-gtk-peer \
     --disable-alsa \
     --disable-gconf-peer \
     --disable-gstreamer-peer \
     --disable-plugin \
     --disable-tools \
     --disable-examples \
     --host=arm-none-linux-gnueabi \
     --target=arm-none-linux-gnueabi \
     --prefix=/opt/java/classpath
make
make install

jamvm_1.5.3.orig.tar.gz
編譯并安裝jamvm
CC=arm-none-linux-gnueabi-gcc \
LD=arm-none-linux-gnueabi-ld \
AR=arm-none-linux-gnueabi-ar \
RANLIB=arm-none-linux-gnueabi-ranlib \
./configure \
     --host=arm-none-linux-gnueabi \
     --target=arm-none-linux-gnueabi \
     --with-classpath-install-dir=/opt/java/classpath \
     --prefix=/opt/java/jamvm
make
make install

注意:
1.由于jamvm是在編譯時指定classpath的路徑,所以,在把兩個程序的目錄復制到板子上時,需要按照編譯時的安裝目錄位置
(在./configure命令后由-prefix指定)。例如在PC上編譯時jamvm被make install到/usr/local/jamvm,classpath在/usr/local/classpath。如要復制到arm板上,這兩個目錄還是要放在/usr/local/下。
另一種方法是在運行時指定classpath的路徑,詳見jamvm usage,或者在系統環境變量中添加該路徑。
2. 其他運行時錯誤可以通過在jamvm命令下添加-verbose:jni 來追蹤。

HelloWorld
文件:test.java
public
class test {
    public static void main(String[] args) {
        System.out.println("Hello! World!");
    }
}

在pc上編譯:
javac test.java
在pc上測試:
java test

把classpath,jamvm和test.class放到arm上,運行:
/opt/java/jamvm/bin/jamvm test

編譯出錯一(jamvm):
configure:error: zlib is missing
可以安裝/編譯zlib(當然是對應平臺的)
也可以使用選項禁用掉:--disable-zlib

運行出錯一:
Exceptionoccurred while VM initialising.
java/lang/NoClassDefFoundError: java/lang/Class

這是由于編譯jamvm時使用了--disable-zlib選項引起的,原因就是找不到類庫
使用zlib時jamvm/share/jamvm/目錄下有個classes.zip
而不使用zlib時,就會把classese.zip解壓出來,不過為什么還會出錯,暫時沒有研究出來。

運行出錯二:
/opt/java/jamvm/bin/jamvm:/lib/libpthread.so.0: version `GLIBC_2.2.3' not found (required by /opt/java/jamvm/bin/jamvm)
/opt/java/jamvm/bin/jamvm: /lib/libpthread.so.0: version `GLIBC_2.2' not found (required by /opt/java/jamvm/bin/jamvm)
/opt/java/jamvm/bin/jamvm: /lib/libpthread.so.0: version `GLIBC_2.0' not found (required by /opt/java/jamvm/bin/jamvm)
/opt/java/jamvm/bin/jamvm: /lib/libpthread.so.0: version `GLIBC_2.1' not found (required by /opt/java/jamvm/bin/jamvm)
/opt/java/jamvm/bin/jamvm: /lib/libpthread.so.0: version `GLIBC_2.3.2' not found (required by /opt/java/jamvm/bin/jamvm)

平臺和編譯搞錯。如:
6467平臺使用arm_v5t_le- (我使用的是低版本的SDK,新版本的一樣是:arm-none-linux-gnueabi)
8168平臺使用arm-none-linux-gnueabi-

另一個jvm---cacao
編譯并安裝
CC=arm-none-linux-gnueabi-gcc \
LD=arm-none-linux-gnueabi-ld \
AR=arm-none-linux-gnueabi-ar \
RANLIB=arm-none-linux-gnueabi-ranlib \
./configure \
     --host=arm-none-linux-gnueabi \
     --target=arm-none-linux-gnueabi \
     --build=i686-pc-linux-gnu \
     --with-java-runtime-library-prefix=/opt/java/classpath
make
make install
(由于交叉點編譯也就是在make時需要用到pc上可運行的cacaoh,暫時還沒解決這交叉編譯的問題,所以還沒有試通,后續會把它搞定的)


后記一
在移植這些的時候,在網上也了解了一下關于j2me的相關資料,還是比較復雜的,還有CDC,CLDC,MIDP等等,因為你要真正把classpath或openjdk移到自己的設備上,特別是有音頻、視頻、顯示這些的設備,還真得深入了解了解,然后才能很好地去裁剪和移植。
現在ARM的設備比較流行,不管是android手機還是iphone/ipad都是ARM。所以相對jamvm用得多一些,如果你iphone/ipad越獄后想使用java,你其實可以在里面進行安裝jamvm或cacao,詳細可以網上查查。
再說說android,它使用的是dalvik vm,這是使用寄存器的vm棧,所以相對一般的jvm使用操作系統級vm棧會在性能上更強一些(還不清楚jamvm,cacao這些是哪種類型),但是dalvik vm移植上會更困難,因為你要非常清楚CPU的東東,而其它jvm你只要熟悉OS與jvm之關的接口關系就差不多了。
還就是類庫,之前說的phoneme其實已經包含了類庫在里頭(難怪這難編譯,當然也與它的結構有關),現在還有classpath和openjdk等等,當然還少不了android。不過android與底層,包括linux kernel,平臺都搞得太緊,如果你想把dalvik vm移到一個平臺,然后不想用這復雜的android類庫,轉而使用classpath或openjdk,至少現在還不行,不過好像已經有人也想到了這個,說見IcedRobot項目。
其實我也想使用高性能的dalvik然后再使用一個功能,簡單的類庫,這樣方便移植或加東西,感覺android太龐大了。

后記二
一些國內的例子:
1,淘寶使用openjdk進行改進,還在實現分布式和GPU來進行運算等,詳見:http://jvm.taobao.org
/index.php/首頁
2,minigui的mPeer就是在classpath進行移植的,好像主要是AWT之類的,jvm使用也是jamvm/cacao

后記三
不知能否把我現有的設備都裝上jvm,再加上類庫,就變成了j2me或j2se,甚至j2ee,然后就可以用這些設備打造自己的私有云!?哈哈

后記四
如果移植到現在cacao還不支持的平臺上去呢?比如現在正在整的8核dsp上(使用uclinux)?
如果移植類庫?比如AWT之類的顯示,還有視頻,聲音,輸入等等
下來有空的話會繼續這個方面的東東
回復

使用道具 舉報

ID:51862 發表于 2013-7-15 11:07 | 顯示全部樓層
我也遇到Exceptionoccurred while VM initialising.
java/lang/NoClassDefFoundError: java/lang/Class
,請問你解決了嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久一区二区三区 | 69av在线视频 | 婷婷综合激情 | 亚洲女优在线播放 | 岛国精品 | 欧美日韩精品久久久免费观看 | 美日韩精品 | 蜜桃毛片 | 国产精品亚洲精品 | 草久视频 | 91精品久久久久久久久 | 97视频免费 | 91精品国产综合久久小仙女图片 | 成人超碰| 色婷婷国产精品综合在线观看 | 久久久精 | 久久成人精品视频 | 亚洲精品一区二区另类图片 | 天天综合干 | 成人国内精品久久久久一区 | 国产伦精品一区二区三区高清 | 国产伊人精品 | 国产精品综合网 | 色在线看 | 国产午夜精品一区二区三区 | 超碰成人av| 在线视频91 | 午夜欧美一区二区三区在线播放 | 99久久精品国产一区二区三区 | 国产高清视频一区 | 黄色片免费 | 中文字幕日韩一区二区 | 999精品在线| 久热免费 | 国产高清免费视频 | 91av久久久| 欧美久久一区二区三区 | 国产欧美精品一区 | 亚洲午夜电影 | 国产亚洲精品久久19p | 亚洲一区二区在线免费观看 |