查看: 1483|回复: 0
收起左侧

【Java on RISC-V】OpenJ9对于RISC-V的支持进展调研与搭建测试

[复制链接]

  离线 

  • TA的每日心情
    拍拍
    2022-6-27 11:09
  • 签到天数: 25 天

    [LV.4]

    发表于 2020-9-27 11:36:09 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 sky 于 2020-9-27 11:36 编辑

    本文是根据OpenJ9官方文档对于RISC-V的支持进展进行的调研与在Fedora(on QEMU)虚拟机上的搭建测试

    状态
    • 目前的移植基于OpenJDK11+OpenJ9+OMR(无JIT),OpenJ9用以替代Hotspot
    • 目前OpenJ9 OpenJDK V11暂不支持针对Riscv64的JIT编译器,在这种情况下,无论是否-Xint在命令行上指定了该选项,JDK默认都会以相同的输出结束。


    尝试在Fedora(on QEMU)上运行OpenJ9

    假定Ubuntu版本至少为16.04,并且已搭建好交叉编译环境Fedora (on QEMU)
    此外还需要:




    1.安装用于OpenJ9交叉编译的额外(不包括
    交叉编译环境Fedora (on QEMU))的软件包

    1.登录QEMU虚拟机并安装在Fedora / QEMU上构建JDK所需的开发相关的软件包:

    1. dnf install libX11-devel libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel libXext-devel
    2. dnf install cups-devel fontconfig-devel alsa-lib-devel freetype-devel  #freetype might be skipped if already installed
    3. dnf install libdwarf-devel libstdc++-static #optional if the DDR is enabled for compilation on the target system
    4. dnf install wget git autoconf automake  #mostly used in the compilation on the target system
    5. dnf install openssl-devel  #optional if the OpenSSL support is required
    复制代码

    2.完成上述所有安装后,按以下步骤关闭Fedora OS的电源。
    1. poweroff
    复制代码

    3.将Fedora OS映像挂载(mount)到主机系统以进行交叉编译
    1. <1> sudo  partx -v -a  Fedora-Developer-Rawhide-20191123.n.0-sda.raw
    2. partition: none, disk: Fedora-Developer-Rawhide-20191123.n.0-sda.raw, lower: 0, upper: 0
    3. Trying to use '/dev/loop0' for the loop device
    4. /dev/loop0: partition table type 'gpt' detected
    5. /dev/loop0: partition #1 added
    6. /dev/loop0: partition #2 added
    7. /dev/loop0: partition #3 added
    8. /dev/loop0: partition #4 added

    9. <2> sudo fdisk -l /dev/loop0
    10. Disk /dev/loop0: 10 GiB, 10737418240 bytes, 20971520 sectors
    11. Units: sectors of 1 * 512 = 512 bytes
    12. Sector size (logical/physical): 512 bytes / 512 bytes
    13. I/O size (minimum/optimal): 512 bytes / 512 bytes
    14. Disklabel type: gpt
    15. Disk identifier: AD758DB6-0843-40FD-AF2E-46FE0B9F9A42

    16. Device          Start      End  Sectors  Size Type
    17. /dev/loop0p1    2048  1230847  1228800  600M Linux filesystem
    18. /dev/loop0p2 1230848  1230911       64   32K
    19. /dev/loop0p3 1232896  1249279    16384    8M
    20. /dev/loop0p4 1249280 20971486 19722207  9.4G Linux filesystem

    21. <3> mkdir fedora_mount

    22. <4> sudo mount /dev/loop0p4  fedora_mount
    23. <your_fedora_mount_directory> ls fedora_mount
    24. bin  boot  dev  etc  home  lib  lib64  lost+found  media
    25. mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    复制代码

    2.获取构建JDK的源
    克隆适用于OpenJ9的OpenJDK扩展,该扩展是OpenJDK的git镜像,没有HotSpot JVM,但带有openj9分支,其中包含一些必要的修补程序。运行以下命令:

    1. git clone https://github.com/ibmruntimes/openj9-openjdk-jdk11.git
    复制代码

    克隆该存储库可能需要一段时间,该过程完成后将目录更改为克隆的存储库:
    1. cd openj9-openjdk-jdk11
    复制代码

    现在,从Eclipse OpenJ9项目及其Eclipse OMR克隆中获取其他资源:
    1. bash get_source.sh
    复制代码

    3.生成用于交叉编译的构建JDK
    在上一步的openj9-openjdk-jdk11文件夹下进行编译:

    1. export JAVA_HOME=/<path_to_build_JDK>  # the build JDK here is downloaded from https://api.vm.net/v3/binary/latest/11/ga/linux/x64/jdk/openj9/normal/adoptopenjdk
    2. export PATH="$JAVA_HOME/bin:$PATH"

    3. bash configure --disable-warnings-as-errors --with-freemarker-jar=/<path_to>/freemarker.jar
    复制代码

    官方文档中给出的上述build JDK链接如果失效,可以从此处下载替代

    configure可能会出现的报错:

    1.configure: error: Could not find numa!configure exiting with result code 1

    1. sudo apt-get install libnuma-dev
    复制代码

    2.checking for nasm... noconfigure: error: Could not find required tool for NASMconfigure exiting with result code 1

    1. sudo apt-get install nasm
    复制代码

    生成用于以后交叉编译的build-JDK:
    1. make all
    复制代码

    ⚠️如果只键入make,而不是make all,构建将是不完整的,因为默认make目标是exploded-image。如果要指定make而不是make all,则必须--default-make-target=images在运行configure脚本时添加。

    请将生成的build-JDK build/linux-x86_64-normal-server-release/images移至其他目录,因为在下一步中将使用此镜像进行交叉编译并且会在同目录下生成RISCV64的JDK镜像。

    1. cd ..
    2. mv openj9-openjdk-jdk11/build/linux-x86_64-normal-server-release/images ./
    复制代码

    4.配置交叉编译环境
    运行以下configure命令以删除现有目录后,在上一步创建交叉openj9-openjdk-jdk11目录的同一目录中设置交叉编译环境

    1. export RISCV64=/<path_to_gnu_cross_toolchain>  #e.g. /home/linux/opt/riscv
    2. export PATH="$RISCV64/bin:$PATH"

    3. bash configure --disable-warnings-as-errors \
    4.                --disable-ddr \
    5.                --with-boot-jdk=/<path_to_build_JDK_for_cross_compilation> \   
    6.                --with-build-jdk=/<path_to_build_JDK_for_cross_compilation> \  #the `build-JDK` created at step 5
    7.                --openjdk-target=riscv64-unknown-linux-gnu \                   #the prefix for the compiled cross-toolchain
    8.                --with-sysroot=/<path_to_your_fedora_mount_directory> \
    9.                --with-freemarker-jar=/<path_to>/freemarker.jar

    10. #<path_to_build_JDK_for_cross_compilation> the `build-JDK` created and moved at step 3,e.g. /home/linux/opt/images/jdk
    11. #<path_to_your_fedora_mount_directory> e.g. /home/linux/opt/fedora_mount
    复制代码

    5.交叉编译RISCV64的JDK
    现在,可以使用OpenJ9交叉构建OpenJDK了

    1. make clean CONF=linux-riscv64-normal-server-release
    2. make all CONF=linux-riscv64-normal-server-release
    复制代码

    6.在Fedora / QEMU上测试JDK
    [1]交叉编译完成后,卸载Fedora OS映像。
    1. sudo umount /<path_to_your_fedora_mount_directory>
    复制代码

    [2] qemu-system-riscv64在步骤2中使用命令通过QEMU引导Fedora :
    1. stage4 login: root
    2. Password: riscv
    3. Last login: Fri Oct  4 21:21:28 from 10.0.2.2
    复制代码

    如果您已经通过QEMU启动了另一个Fedora映像,则无需卸载并启动该Fedora映像。

    [3]通过以下scp命令将压缩的JDK上传到Fedora :

    主机上操作:
    1. cd /home/linux/opt/openj9-openjdk-jdk11/build/linux-riscv64-normal-server-release
    2. zip -r jdk.zip jdk
    3. scp -P 3333 -r /home/linux/opt/openj9-openjdk-jdk11/build/linux-riscv64-normal-server-release/jdk.zip root@localhost:~/
    复制代码

    开启Fedora虚拟机并操作:
    1. [your_user_name@riscv_qemu new_dir]#unzip jdk.zip
    复制代码

    [4]转到Fedora上的jdk目录,然后尝试运行java -version命令进行简单测试。
    1. [your_user_name@riscv_qemu jdk]# cd bin
    2. [your_user_name@riscv_qemu bin]# ./java -version
    复制代码

    这是一些示例输出:

    国内芯片技术交流-【Java on RISC-V】OpenJ9对于RISC-V的支持进展调研与搭建测试risc-v单片机中文社区(1)



    DaCapo-9.12-bach-MR1 [xalan](Xalan-Java Version 2.7.1)测试


    国内芯片技术交流-【Java on RISC-V】OpenJ9对于RISC-V的支持进展调研与搭建测试risc-v单片机中文社区(2)









    上一篇:推动改变的RISC-V催化剂
    下一篇:突发!美信函曝光,中芯国际恐遭封杀!
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-26 03:30 , Processed in 0.530243 second(s), 48 queries .

    快速回复 返回顶部 返回列表