转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>
KJava 虚拟机有两个版本,一个针对智能手机等设备的phoneme_advanced,另一个是针对传统手机(feature phone) 等设备的的phoneme_feature。去年我花过一点时间研究phoneme_advanced,在基于DirectFB的实现下,成功的运行了一 个简单MIDlet程序。
最近要移植KVM到broncho平台上,时隔一年,我发现phoneme_advanced的实现还是非常不完善,里面有很多低级错误,虽然改掉这些错误并不困难,但是我怀疑是否有人使用这个版本做过产品,所以这一次我决定移植phoneme_feature。
编译phoneme_feature比phoneme_advanced要容易得多,基本上没有遇到什么问题。
1.下载并安装j2sdk-1_4_2_15-linux-i586.bin。注意不要使用最新版本的JDK,否则出现语法上不兼容的问题。
2.下载并解圧phoneme_feature-mr3-rel-src-b01-17_jul_2008.zip。经过验证这个版本还可以,比使用SVN中的最新代码更可靠。
3.设置环境变量,我们把它放到脚本evn.sh中。
#!/bin/bash
export PREFIX=${PREFIX_USR_LOCAL/--prefix=/}
if [ "$1" = "" ]
then
echo "Usage: . env.sh ARCH(i386|arm)"
return;
fi
export ARCH="$1"
export CPU=$ARCH
export MEHOME=$PWD
export ENABLE_PCSL=true
export BUILD_OUTPUT_DIR=$MEHOME/output
export CLDC_DIR=$MEHOME/cldc
export JVMWorkSpace=$CLDC_DIR
export JVMBuildSpace=$BUILD_OUTPUT_DIR/cldc
export MIDP_OUTPUT_DIR=$BUILD_OUTPUT_DIR/midp
export MIDP_BUILD_DIR=$MEHOME/midp/build/linux_gtk_gcc
if [ "$ARCH" = "arm" ]
then
export CPU_ALIAS="arm"
export TARGET_CPU="arm"
export CLDC_BUILD_DIR=${JVMWorkSpace}/build/linux_arm
export CLDC_DIST_DIR=${JVMBuildSpace}/linux-$CPU_ALIAS/dist
else
export CPU_ALIAS="x86"
export TARGET_CPU="i386"
export CLDC_BUILD_DIR=${JVMWorkSpace}/build/linux_i386
export CLDC_DIST_DIR=${JVMBuildSpace}/linux_i386/dist
fi
export DIRECTFB_INSTALL_DIR=$PREFIX
export PCSL_PLATFORM=linux_"$ARCH"_gcc
export PCSL_OUTPUT_DIR=$BUILD_OUTPUT_DIR/pcsl
export TOOLS_DIR=$MEHOME/tools
export TOOLS_OUTPUT_DIR=$BUILD_OUTPUT_DIR/tools
4.编译,我们把它放到脚本build.sh中。
#!/bin/bash
cd $MEHOME/pcsl
make clean
make NETWORK_MODULE=bsd/generic
cd $MEHOME
cd $CLDC_BUILD_DIR
make clean
make USE_MIDP=true CVM_DEBUG=true USE_DIRECTFB=true USE_QT_FB=false ENABLE_PCSL=true
cd $MIDP_BUILD_DIR
make clean
make SUBSYSTEM_LCDUI_MODULES=platform_widget PLATFORM=linux_gtk SUBSYSTEM_EVENTS_MODULES=slave_mode INCLUDE_SHELL_SCRIPTS=true
cd $MEHOME
5.安装,我们把它放到脚本install.sh中。
#!/bin/bash
if [ "$PREFIX" = "" ]
then
echo "PREFIX is not defined"
else
INSTALL_PATH=$PREFIX
rm -rf $INSTALL_PATH/java
mkdir -p $INSTALL_PATH/java
echo "cp -rf $CDC_DIST_DIR $INSTALL_PATH/java/cdc"
cp -rf $MIDP_OUTPUT_DIR $INSTALL_PATH/java/j2me
cp -f $CLDC_DIST_DIR/bin/cldc_vm* $INSTALL_PATH/java/j2me/bin
mv $INSTALL_PATH/java/j2me/classes.zip $INSTALL_PATH/java/j2me/classes.jar
rm -rf $INSTALL_PATH/java/j2me/classes
rm -rf $INSTALL_PATH/java/j2me/generated/
rm -rf $INSTALL_PATH/java/j2me/obj
rm -rf $INSTALL_PATH/java/j2me/ROM*
fi
我这里编译的是基于GTK+实现的MIDP,编译其它版本的要做相应修改。
欢迎到Linux mobile development上交流