java 转 嵌入式 java转嵌入式软件
转载mob64ca14040d222023-10-07 18:39:21
文章标签java 转 嵌入式嵌入式移植ARM移植JREjava文章分类Java后端开发阅读数79
前言
因公司项目需求,需要在zynq 7000平台下运行 java web程序,所以需要移植java环境。
走过的坑:
最先的想法是:直接下载支持嵌入式ARM系统的JDK,在zynq平台上直接解压JDK,配置环境变量就OK了。但是并么有找到能用的JDK;然后寻找了几天,找到了一个最轻量级的 java虚拟机 javam。交叉编译后,移植到zynq开发板上,使用 java -version 可以查看版本号,以为安装成功了,谁知道运行一个最基本的 helloworld 都不行。
大家也知道,JDK 包含 JRE ,JRE包含JVM。我跳的第一个坑就是没有找到相应的JDK;第二个坑是JVM也不起作用。
在寻找怎么移植java环境到嵌入式ARM的过程中,看到了这篇文章:
2018年12月18日 更新
其实JDK是可以移植到ARM平台 zynq系列下的,只是JDK1.8到目前都没有提供软浮点运算相应的源码包,而JDK1.7及其以下的版本提供了相应的源码包,目前我在zynq系列下成功移植JDK1.7。详细移植过程请看我接下来的一篇博文:
By the way: 这个移植JRE需要30M左右的存储空间,需要扩容一下根文件系统的大小。
关于扩容根文件系统请参考我写的这篇博文:
移植JRE
移植前准备
- 一台安装有jdk的linux虚拟机
- 安装有linux的嵌入式设备
- 与嵌入式设备硬件、操作系统所匹配的Oracle Java SE Embedded包
- 参考 Quick Start for Platform Developers
一、在虚拟机上安装Oracle Java SE Embedded
1. 下载 Oracle Java SE Embedded软件包
本次移植所采用的的包为 ejdk-8u191-linux-arm-sflt.tar.gz。
链接: https://pan.baidu.com/s/1Faoi5uVvWVPRKwRutIGk4g 提取码: m35v
2. 从tar包中提取软件
$ cd /usr
$ gunzip *.gz
$ tar -xvf *.tar
- 1.
- 2.
- 3.
3. 设置环境变量
在/etc/profile的末尾添加
export EJDK_HOME=/usr/ejdk1.8.0_191
export PATH=$EJDK_HOME/bin:$PATH
- 1.
- 2.
4. 验证安装
$ cd $EJDK_HOME
$ bin/jrecreate.sh --help
Usage: jrecreate --help
Summary of jrecreate syntax ...
- 1.
- 2.
- 3.
- 4.
- 5.
参考文档 Install Oracle Java SE Embedded
二、确定运行应用程序所需的最低配置文件
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!");
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
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();
}
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
3. 编译Hello World和Hello RMI
$ javac HelloWorld.java
$ javac HelloRMI.java
- 1.
- 2.
4. 对Hello World应用执行jdeps命令后的结果
$ jdeps -P HelloWorld.class
HelloWorld.class -> /usr/java/jre/lib/rt.jar (compact1)
<unnamed> (HelloWorld.class)
-> java.io compact1
-> java.lang compact1
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
结果显示compact1配置文件是运行Hello World应用所需的最小配置文件。
5. 对Hello RMI应用执行jdeps命令后的结果
$ jdeps -P HelloRMI.class
HelloRMI.class -> /usr/java/jre/lib/rt.jar (compact2)
<unnamed> (HelloRMI.class)
-> java.io compact1
-> java.lang compact1
-> java.rmi.registry compact2
- 1.
- 2.
- 3.
- 4.
- 5.
结果显示Hello RMI应用中java.rmi.registry类至少需要compact2配置文件。
三、确定要使用哪个JRE
根据性能需求选择需要的版本:minimal, client, 和server.
表1 JRE 版本及其主要性能特征
JRE 版本 |
主要特点 |
Minimal |
最小的内存消耗 |
Client |
最佳响应 |
Server |
应用需要长期运行 |
本次移植中所采用的是Minimal版本的虚拟机,如果性能不满意,可以采用更高性能的JRE。
参考文档 About Oracle Java SE Embedded JVMs
四、使用jrecreate来创建JRE
$ /usr/ejdk1.8.0_151/bin/jrecreate.sh \
--profile compact1 \
--dest /tmp/defaultJRE/
- 1.
- 2.
- 3.
创建的JRE会生成在/tmp/defaultJRE/目录下
参考文档 Create Your JRE with jrecreate
五、移植至嵌入式设备
1. 复制文件
将虚拟机中生成的整个defaultJRE目录复制至嵌入式设备中的/usr/jvm目录下
2. 添加环境变量
在/etc/profile的末尾添加
export PATH=/usr/jvm/defJRE/bin:$PATH
- 1.
3. 验证安装
$ java -version
- 1.
参考文档 Deploy Your JRE to the Embedded Device
六、在嵌入式设备中运行Hello World应用
运行Hello World应用
将HelloWorld.jar 复制至嵌入式设备中,执行以下命令
$ java -jar HelloWorld.jar
Hello world!
- 1.
- 2.
zynq 开发板运行结果:
参考文档 Launch Embedded Applications
标签:JRE,java,compact1,嵌入式,嵌入式软件,Hello,移植 From: https://www.cnblogs.com/zxdplay/p/17826148.html