JVM在嵌入式linux下的移植

2019-07-12 14:49发布

移植前准备

  • 一台安装有jdk的linux虚拟机
  • 安装有linux的嵌入式设备
  • 与嵌入式设备硬件、操作系统所匹配的Oracle Java SE Embedded包
  • 参考Quick Start for Platform Developers

一、在虚拟机上安装Oracle Java SE Embedded

1. 下载Oracle Java SE Embedded软件包
本次移植所采用的的包为ejdk-8u151-linux-arm-sflt.tar.gz。
2. 从tar包中提取软件
$ cd /usr $ gunzip *.gz $ tar -xvf *.tar List of unpacked files ...
3. 设置环境变量
/etc/profile的末尾添加 export EJDK_HOME=/usr/ejdk1.8.0_151 export PATH=$EJDK_HOME/bin:$PATH
4. 验证安装
$ cd $EJDK_HOME $ bin/jrecreate.sh --help Usage: jrecreate --help Summary of jrecreate syntax ...
参考文档

二、确定运行应用程序所需的最低配置文件

jdeps可以用于确认应用程序所需的最低配置文件:compact1,compact2或compact3。为了说明这个jdeps命令的用法,下面展示了两个无头应用例子:Hello World 和 Hello RMI。
1. Hello World应用
应用仅在控制台上打印“Hello World”。 public class HelloWorld { public static void main (String args[]) { System.out.println("Hello world!"); } }
2. Hello RIM应用
应用使用RMI LocateRegistry类访问远程对象,并在出现错误时打印堆栈跟踪。 import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class HelloRMI { public static void main (String args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { Registry registry = LocateRegistry.getRegistry("testRMI"); System.out.println("Hello RMI!"); } catch (Exception e) { System.err.println("RMI exception:"); e.printStackTrace(); } } }
3. 编译Hello World和Hello RMI
$ javac HelloWorld.java $ javac HelloRMI.java
4. 对Hello World应用执行jdeps命令后的结果
$ jdeps -P HelloWorld.class HelloWorld.class -> /usr/java/jre/lib/rt.jar (compact1) (HelloWorld.class) -> java.io compact1 -> java.lang compact1 结果显示compact1配置文件是运行Hello World应用所需的最小配置文件。
5. 对Hello RMI应用执行jdeps命令后的结果
$ jdeps -P HelloRMI.class HelloRMI.class -> /usr/java/jre/lib/rt.jar (compact2) (HelloRMI.class) -> java.io compact1 -> java.lang compact1 -> java.rmi.registry compact2 结果显示Hello RMI应用中java.rmi.registry类至少需要compact2配置文件。
参考文档

三、确定要使用哪个JVM

根据性能需求选择需要的版本:minimal, client, 和server. 表1 JVM版本及其主要性能特征 JVM版本 主要特点 Minimal 最小的内存消耗 Client 最佳响应 Server 应用需要长期运行 本次移植中所采用的是Minimal版本的虚拟机,如果性能不满意,可以采用更高性能的JVM。
参考文档

四、使用jrecreate来创建JRE

$ /usr/ejdk1.8.0_151/bin/jrecreate.sh --profile compact1 --dest /tmp/defaultJRE/ 创建的JRE会生成在/tmp/defaultJRE/目录下
参考文档

五、移植至嵌入式设备

1. 复制文件
将虚拟机中生成的整个defaultJRE目录复制至嵌入式设备中的/usr/jvm目录下
2. 添加环境变量
/etc/profile的末尾添加 export PATH=/usr/jvm/defJRE/bin:$PATH
3. 验证安装
$ java -version java version "1.8.0_151" Java(TM) SE Embedded Runtime Environment (build 1.8.0_151-b12, profile compact1, headless) Java HotSpot(TM) Embedded Minimal VM (build 25.151-b12, mixed mode)
参考文档

六、在嵌入式设备中运行Hello World应用

1. 将Hello World应用打包
进入虚拟机HelloWorld.class所在的文件夹执行以下命令 $ jar -cvf ../hello.jar * 已添加清单 正在添加: HelloWorld.class(输入 = 426) (输出 = 289)(压缩了 32%)
2. 运行Hello World应用
hello.jar复制至嵌入式设备中,执行以下命令 $ java -cp hello.jar HelloWorld Hello world!
参考文档