起因
随着 OpenJDK 项目迁往 Github,获取 OpenJDK 源码变更加容易,同时 OpenJDK 的构建也越来越方便,所以现在我们可以尝试一下能否在树莓派上进行 OpenJDK 的构建和开发。
前提
要在树莓派上顺利的进行类似 OpenJDK 这种规模的项目开发,需要满足以下几个条件:
-
较新的树莓派,我用的是 4B(8G)
4B 以后的树莓派提供了大内存,对于开发活动十分必要(浏览器、IDE 和构建)。可以从淘宝或者其他平台购买,建议只购买一个主板和一个被动散热壳(主动散热风扇太吵,被的散热一般可以控制温度在 50 度一下)。
-
读性能大于 200MB/s 的高速存储设备
之前我用买树莓派自带的 TF 卡作为系统存储设备,发现构建 OpenJDK 非常慢(5 小时以上),这显然是不可接受的。后来发现国外有人做过实验,如果换成读性能大于 200MB/s 的存储设备,构建只需要 1 小时甚至更快,所以最彻底的解决方案是配置系统从高速设备启动,并使用高速设备作为主存储器。
我使用的是闪迪的 CZ880,官方宣称读性能可以达到 410MB/s,不过我用
hdparm
工具测试读性能只有 200MB/s 多一点。 -
方便高效的代码编辑器
出于性能和个人偏好的原因,我选择使用 vim 作为代码编辑的工具,相关配置可以参考 wiki
系统安装
前面说过,出于性能的考虑需要将系统设置从 USB 设备启动,所以系统镜像需要重新下载和烧录。
首先,我们需要选择一款合适的系统。关于树莓派上装什么系统当然是仁者见仁智者见智,但从使用场景看,系统的性能表现是首要的参考指标。我开始打算使用树莓派爱好者基地的 Debian-Pi-Aarch64,因为据说性能优化的较好,但是看了一圈,居然没有找到很方便的镜像下载地址(只有国内和国外的云盘),这对于我这个只有 Linux aarch64 环境的人来说实在是太不友好了,另外这也让我感觉这个发行版似乎不怎么靠谱,将来使用成本相信会比较高。后来我还试用了 Ubuntu 和 openEuler,这两个虽然界面比较美观,但是性能一般,总给人一种慢半拍的感觉,另外系统更新也不频繁,这对开源系统而言不是一个好现象。最终我还是选择了树莓派官方的 64 位系统,虽然目前他还仍然是 beta 版本,但是从使用过程看,还没有碰到特别严重的问题。
在确定使用什么系统后,就可以通过以下步骤完成系统的烧录和配置了:
-
下载镜像
通过官网 下载最新的 64 位系统。
-
烧录镜像
可以使用官方提供的烧录工具 rpi-imager,也可以直接使用
dd
命令将镜像写入 USB 或者 SSD。 -
设置从 USB 启动
使用官方工具 raspi-config 配置固件,选择 Advanced Options -> Boot Order -> USB Boot。
构建 JDK
-
安装依赖
下载 AdoptOpenJDK16 以上版本(因为现在 OpenJDK 主线的版本已经到了 18)作为 bootjdk。
安装其他编译依赖软件:
sudo apt-get install autoconf sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev sudo apt-get install libcups2-dev sudo apt-get install libfontconfig1-dev sudo apt-get install libasound2-dev
-
构建:
git clone https://github.com/openjdk/jdk.git cd jdk bear -- bash configure --with-boot-jdk=<path to bootjdk> bear -- make images
在我的环境中,全量构建一次 JDK 需要 1 小时左右,增量构建需要 15 分钟到 30 分钟,已经基本可以满足平时的开发调试了。
文档信息
- 本文作者:Zhuojun Miao
- 本文链接:https://miaozhuojun.github.io/2021/07/30/build-openjdk-on-raspberrypi/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)