首页 > 编程语言 >java 转 嵌入式 java转嵌入式软件

java 转 嵌入式 java转嵌入式软件

时间:2023-11-11 17:55:06浏览次数:47  
标签:JRE java compact1 嵌入式 嵌入式软件 Hello 移植

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软件包

java 转 嵌入式 java转嵌入式软件_移植JRE

 

本次移植所采用的的包为 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配置文件。

参考文档  About Compact Profiles

三、确定要使用哪个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/目录下

java 转 嵌入式 java转嵌入式软件_移植JRE_02

参考文档  Create Your JRE with jrecreate

五、移植至嵌入式设备

1. 复制文件
将虚拟机中生成的整个defaultJRE目录复制至嵌入式设备中的/usr/jvm目录下

2. 添加环境变量
在/etc/profile的末尾添加

export PATH=/usr/jvm/defJRE/bin:$PATH
  • 1.
 

3. 验证安装

$ java -version
  • 1.
 

java 转 嵌入式 java转嵌入式软件_java 转 嵌入式_03

参考文档  Deploy Your JRE to the Embedded Device

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

运行Hello World应用

将HelloWorld.jar 复制至嵌入式设备中,执行以下命令

$ java -jar HelloWorld.jar
Hello world!
  • 1.
  • 2.
 

zynq 开发板运行结果:

java 转 嵌入式 java转嵌入式软件_java_04

参考文档  Launch Embedded Applications

 

标签:JRE,java,compact1,嵌入式,嵌入式软件,Hello,移植
From: https://www.cnblogs.com/zxdplay/p/17826148.html

相关文章

  • 一个很漂亮的鼠标移动特效,Javascript 脚本,可惜复制到博客园配置适配效果不好
    一个很漂亮的鼠标移动特效,Javascript脚本,可惜复制到博客园配置适配效果不好,暂时记录一下<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>小白教程(json.cn)</title></head><body><script>varStats=function(){var......
  • java开发历史-Java是一种面向对象的编程语言
    Java是一种面向对象的编程语言,由SunMicrosystems于1995年推出。它具有跨平台、安全强大、可移植性强等特点,被广泛应用于企业级Web应用开发、移动应用开发、大数据处理、人工智能等领域。作为一种高级编程语言,Java可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、......
  • JavaScript的BOM和DOM对象操作与设置顶级窗口------前端
    准备一个用来嵌入的HTML页面<!DOCTYPEhtml><!--这是HTML的注释--><htmllang="en"id="myHtml"> <head> <!--这里不是设置了编码,而是告诉浏览器,用什么编码方式打开文件避免乱码--> <metacharset="UTF-8"> <metaname="viewport&q......
  • IDEA 导入jpbc库报错 java: 程序包it.unisa.dia.gas.jpbc不存在
    直接拷贝jars文件夹和lib文件夹至java项目中后报错运行后报错内容如下:解决方法:在项目最外层的.iml文件中合适的位置添加下述内容:<orderEntrytype="module-library"exported=""><library><CLASSES><rooturl="file://$MODULE_DIR$/lib&qu......
  • JavaScript--事件监听
     事件绑定 dom属性绑定  <inputtype="button"id="btn"value="点我">  <script>    //document.getElementById('myImgine').src='images/open.jpg';    document.getElementById("btn&......
  • JavaSEday05 泛型,数据结构,List,Set集合
    javSEday05泛型,数据结构,List,Set今日目标泛型使用数据结构ListSet1泛型1.1泛型的介绍泛型是一种类型参数,专门用来保存类型用的最早接触泛型是在ArrayList,这个E就是所谓的泛型了。使用ArrayList时,只要给E指定某一个类型,里面所有用到泛型的地方都会被......
  • Java中关于try...catch的return规则
    本部分针对有return要求的异常捕获和处理,具体的,try...catch语句存在于方法体中。方法体中的try...catch的return总共有四种可能的地方:try,catch,finally,方法体末尾(try…catch外)。共存规则finally中的return和方法return不能同时存在。(显而易见的第一法则!)try中的return......
  • 狂胜说Java:Java基础
    一、注释分为三个类别:1.“//”:表示只注释一行代码2.“/*/”:表示注释多行代码3.JavaDoc,用“/**/”写:表示描述相关内容/***@author:TTT*@description:about*/二、标识符关键字标识符注意点1、以字母(A-Z或a-z),美元符号$、或者下划线_开始2、首字符之后可以增加数......
  • JavaSE day05【泛型,数据结构,List接口,Set接口】测评题
    选择题题目1(单选):查看下列代码,选出正确的传参()publicclassTest2{publicstaticvoidmain(String[]args){ArrayList<Integer>list1=newArrayList<Integer>();ArrayList<Number>list2=newArrayList<Number>();Arr......
  • JavaScript-3
    JavaScript-3onmousemove该事件将会在鼠标在元素中移动时被触发<style>#a1{width:200px;height:100px;border:2pxsolidred;}#a2{width:200px;height:50px;border:2pxsolid#14dc2f}</style>......