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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 15051|回復(fù): 1
收起左側(cè)

嵌入式中的jvm

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

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

查看/修改系統(tǒng)提供的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是在編譯時(shí)指定classpath的路徑,所以,在把兩個(gè)程序的目錄復(fù)制到板子上時(shí),需要按照編譯時(shí)的安裝目錄位置
(在./configure命令后由-prefix指定)。例如在PC上編譯時(shí)jamvm被make install到/usr/local/jamvm,classpath在/usr/local/classpath。如要復(fù)制到arm板上,這兩個(gè)目錄還是要放在/usr/local/下。
另一種方法是在運(yùn)行時(shí)指定classpath的路徑,詳見(jiàn)jamvm usage,或者在系統(tǒng)環(huán)境變量中添加該路徑。
2. 其他運(yùn)行時(shí)錯(cuò)誤可以通過(guò)在jamvm命令下添加-verbose:jni 來(lái)追蹤。

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

在pc上編譯:
javac test.java
在pc上測(cè)試:
java test

把classpath,jamvm和test.class放到arm上,運(yùn)行:
/opt/java/jamvm/bin/jamvm test

編譯出錯(cuò)一(jamvm):
configure:error: zlib is missing
可以安裝/編譯zlib(當(dāng)然是對(duì)應(yīng)平臺(tái)的)
也可以使用選項(xiàng)禁用掉:--disable-zlib

運(yùn)行出錯(cuò)一:
Exceptionoccurred while VM initialising.
java/lang/NoClassDefFoundError: java/lang/Class

這是由于編譯jamvm時(shí)使用了--disable-zlib選項(xiàng)引起的,原因就是找不到類(lèi)庫(kù)
使用zlib時(shí)jamvm/share/jamvm/目錄下有個(gè)classes.zip
而不使用zlib時(shí),就會(huì)把classese.zip解壓出來(lái),不過(guò)為什么還會(huì)出錯(cuò),暫時(shí)沒(méi)有研究出來(lái)。

運(yùn)行出錯(cuò)二:
/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)

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

另一個(gè)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
(由于交叉點(diǎn)編譯也就是在make時(shí)需要用到pc上可運(yùn)行的cacaoh,暫時(shí)還沒(méi)解決這交叉編譯的問(wèn)題,所以還沒(méi)有試通,后續(xù)會(huì)把它搞定的)


后記一
在移植這些的時(shí)候,在網(wǎng)上也了解了一下關(guān)于j2me的相關(guān)資料,還是比較復(fù)雜的,還有CDC,CLDC,MIDP等等,因?yàn)槟阋嬲裞lasspath或openjdk移到自己的設(shè)備上,特別是有音頻、視頻、顯示這些的設(shè)備,還真得深入了解了解,然后才能很好地去裁剪和移植。
現(xiàn)在ARM的設(shè)備比較流行,不管是android手機(jī)還是iphone/ipad都是ARM。所以相對(duì)jamvm用得多一些,如果你iphone/ipad越獄后想使用java,你其實(shí)可以在里面進(jìn)行安裝jamvm或cacao,詳細(xì)可以網(wǎng)上查查。
再說(shuō)說(shuō)android,它使用的是dalvik vm,這是使用寄存器的vm棧,所以相對(duì)一般的jvm使用操作系統(tǒng)級(jí)vm棧會(huì)在性能上更強(qiáng)一些(還不清楚jamvm,cacao這些是哪種類(lèi)型),但是dalvik vm移植上會(huì)更困難,因?yàn)槟阋浅G宄﨏PU的東東,而其它jvm你只要熟悉OS與jvm之關(guān)的接口關(guān)系就差不多了。
還就是類(lèi)庫(kù),之前說(shuō)的phoneme其實(shí)已經(jīng)包含了類(lèi)庫(kù)在里頭(難怪這難編譯,當(dāng)然也與它的結(jié)構(gòu)有關(guān)),現(xiàn)在還有classpath和openjdk等等,當(dāng)然還少不了android。不過(guò)android與底層,包括linux kernel,平臺(tái)都搞得太緊,如果你想把dalvik vm移到一個(gè)平臺(tái),然后不想用這復(fù)雜的android類(lèi)庫(kù),轉(zhuǎn)而使用classpath或openjdk,至少現(xiàn)在還不行,不過(guò)好像已經(jīng)有人也想到了這個(gè),說(shuō)見(jiàn)IcedRobot項(xiàng)目。
其實(shí)我也想使用高性能的dalvik然后再使用一個(gè)功能,簡(jiǎn)單的類(lèi)庫(kù),這樣方便移植或加?xùn)|西,感覺(jué)android太龐大了。

后記二
一些國(guó)內(nèi)的例子:
1,淘寶使用openjdk進(jìn)行改進(jìn),還在實(shí)現(xiàn)分布式和GPU來(lái)進(jìn)行運(yùn)算等,詳見(jiàn):http://jvm.taobao.org
/index.php/首頁(yè)
2,minigui的mPeer就是在classpath進(jìn)行移植的,好像主要是AWT之類(lèi)的,jvm使用也是jamvm/cacao

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

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

使用道具 舉報(bào)

ID:51862 發(fā)表于 2013-7-15 11:07 | 顯示全部樓層
我也遇到Exceptionoccurred while VM initialising.
java/lang/NoClassDefFoundError: java/lang/Class
,請(qǐng)問(wèn)你解決了嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区二区三区乱码在线 | 成人精品一区亚洲午夜久久久 | av 一区二区三区 | 国产精品免费一区二区三区 | 91小视频在线 | 亚州无限乱码 | 91人人澡人人爽 | 产真a观专区 | 日本特黄a级高清免费大片 特黄色一级毛片 | 国产黄色小视频 | 99国内精品 | 嫩草视频在线免费观看 | 久久久久欧美 | 国产一区二区激情视频 | 久久久久久久一区二区三区 | 欧美综合一区 | 男人天堂社区 | 精品国产成人 | 国产精品视频一区二区三区不卡 | 国产乱码精品一区二区三区中文 | 国产毛片毛片 | 日韩综合在线 | 亚洲精品成人 | 欧美日韩国产一区二区三区 | 亚洲视频三 | 有码一区 | 久久伊人免费视频 | 国产精品久久久久久久久动漫 | 亚洲iv一区二区三区 | 一区二区在线免费观看 | 一二三四在线视频观看社区 | 精品乱子伦一区二区三区 | 免费在线看黄 | www.成人.com| 国产乱码精品一品二品 | 亚洲精品一区二区在线观看 | 日本a网站 | 久久久精品久 | 成人在线播放网站 | 日韩高清不卡 | 国产 欧美 日韩 一区 |