Temurin-build: arm32在armv6 pi上构建失败,并且不支持Atomic store(jlong​​)

创建于 2018-11-06  ·  25评论  ·  资料来源: adoptium/temurin-build

你好!

我在Ubuntu上安装了Eclipse,并在其中安装了用于运行Eclipse IDE的OpenJDK 8。

asus@asus-X551MA:~$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-1ubuntu0.18.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
asus@asus-X551MA:~$ 

在Eclipse中,我使用Linux 64 OpenJDK-10.0.2 + 13作为编译器。 我还在Raspberry Pi B + v1.2上使用arm32 OpenJDK-10.0.2 + 13

pi<strong i="10">@raspberrypi</strong>:~ $ java -version
openjdk version "10.0.2-adoptopenjdk" 2018-07-17
OpenJDK Runtime Enviroment (build 10.0.2-adoptopenjdk+13)
OpenJDK Client VM (build 10.0.2-adoptopenjdk+13, mixed mode)
pi<strong i="11">@raspberrypi</strong>: ~ $

我通过使用以下命令在Raspberry Pi B + v1.2上安装了OpenJDK-10.0.2 + 13:

export JAVA_HOME="path that you found"
export PATH=$JAVA_HOME/bin:$PATH

当我运行Java程序时,我已经从Eclipse IDE进行了编译。 我收到此错误:

pi<strong i="18">@raspberrypi</strong>:~ $ java -jar JoystickStepperLCD.jar
========================= DEBUG MESSAGE: Atomic load(jlong) unsupported on this platform ===============

[error occurred during error reportin ((null)), id 0xe0000000]
pi<strong i="19">@raspberrypi</strong>:~ $

您可以从JoystickStepperLCD.zip下载JoystickStepperLCD.jar,该文件位于:
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD

最有用的评论

你好,
我认为有问题的东西可能启用了AssumeMP标志。 您可以尝试像这样运行Java吗?

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

或者,您可以尝试从https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/运行JDK构建吗? 我们正在修补OpenJDK,使其可以在LEGO Mindstorms套件中的ARMv5处理器上运行,到目前为止,它似乎运行良好。
问候,
雅库布·凡涅克(JakubVaněk)

所有25条评论

@DanielMartensson Ohhhhhh这很有道理。 您已从arm32v6不支持的运行时中编译了一项功能。 我认为您需要在Pi上编译相同的程序,然后看看会发生什么。 这是WORA破损的极少数情况。

@karianna我已经通过在Eclipse IDE中使用Project-> Clean来编译程序。 我知道应该站在“仅编译”状态,但是在此IDE中,它应该处于“清理”状态。 我之所以无法在我的Ubuntu计算机(64位)上运行该应用程序,是因为Pi4J(我的应用程序中包含的库)无法在​​不是“ Pi”计算机的其他计算机上运行,​​例如NanoPi,RaspberryPi ,BananaPi等。

另一个问题是,Raspberry Pi上的Eclipse IDE会使我的Raspberry Pi变慢,以至于编译需要花费数小时。 这就是为什么我在Ubuntu-> USB记忆棒-> Raspberry Pi上进行编译的原因。

无论我使用哪种IDE,在Raspberry Pi上编译Java代码都需要花费很长时间。 无法在OpenJDK 10.0.2 + 13上修复WORA吗?

运行此应用程序。 必须在Raspberry Pi上安装WiringPi。

sudo apt-get install wiringpi

WiringPi是一个C库。 Pi4J是一个Java库,可以通过JNI与WiringPi进行通信。

@DanielMartensson您可以在不蚀的情况下进行编译吗? 例如在命令行上使用Ant / Maven等?

@DanielMartensson您可以在不蚀的情况下进行编译吗? 例如在命令行上使用Ant / Maven等?

我认同。 好吧,我包含了很多jar文件,当我在Pi的终端中执行“ javac”命令时,我不知道如何包含它们。 您下载了软件包吗?

我在编译时总是使用IDE。 您有任何建议如何使用其中包含的大量jar进行编译吗?

@karianna我将尝试编译一个简单的hello world项目。 还是我需要使用像Pi4J一样的库?

在eclipse中的IIRC中,您将有一个名为.project ,其中列出了所有依赖项。 然后,我可以为您提供一个示例脚本,以从命令行运行该脚本。 它看起来像:

javac -cp "Path's to all of your JARs" YourClass.java

@卡里安娜(@karianna)

如果我有多个班级怎么办? 也位于不同的文件夹中。

javac -cp“所有JAR的路径” YourClass.java MySecondClass.java AnotherClass.java .... class.java

@karianna您可以将其编译然后上传,以便我可以与AdoptOpenJDK 10.0.2 + 13一起运行吗?

https://ufile.io/99cdb

它必须是可执行的jar文件。

我没有合适的平台可以对此进行编译。 但是,您可以从Pi上的命令行运行:

find . -name "*.java" > sources.txt
javac -cp Jars/pi4j-core.jar @sources.txt

@卡里安娜(@karianna)

由于“此平台不支持Atomic store(jlong​​)”以上消息,甚至无法编译。
使用OpenJDK 8,我可以进行编译。 使用ARM32的AdoptOpenJDK 10.0.2形式时,它将无法使用。

好的-让我尝试寻找一位ARM专家。

您可以加入我们的网站onopenopenjdk.net/slack.html并进入#arm频道

为了值得,我可以在我的Pi Zero-W上复制它

@ sxa555尝试写

cat /proc/cpuinfo

看看您是否拥有与我相同的CPU:

processor : 0
model_name : ARMv6-compatible processor rev 7 (v6l)
Hardware : BCM2835

是的,Zero-W几乎与AI认为的原始模型相同,但是添加了wifi适配器,因此所有三行都与您发布的内容相同

@karianna @ sxa555有人使用AdoptOpenJDK尝试过ARM64位单板计算机吗? 那行得通吗?

@karianna @ sxa555有人使用AdoptOpenJDK尝试过ARM64位单板计算机吗? 那行得通吗?

我不确定-可能值得在我们的ARM渠道上随意询问。

你好,
我认为有问题的东西可能启用了AssumeMP标志。 您可以尝试像这样运行Java吗?

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

或者,您可以尝试从https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/运行JDK构建吗? 我们正在修补OpenJDK,使其可以在LEGO Mindstorms套件中的ARMv5处理器上运行,到目前为止,它似乎运行良好。
问候,
雅库布·凡涅克(JakubVaněk)

@karianna @ sxa555 @JakubVanek

有效! 我需要使用sudo来控制GPIO引脚。 我安装了OpenJDK 8,但是我只是将JAVA_HOME更改为AdoptOpenJDK。

pi @ raspberrypi :〜$ export JAVA_HOME =“ / home / pi / Program / jdk-10.0.2 + 13”
pi @ raspberrypi :〜$导出路径= $ JAVA_HOME / bin:$ PATH
pi @ raspberrypi :〜$ java-版本
openjdk版本“ 10.0.2-adoptopenjdk” 2018-07-17
OpenJDK运行时环境(内部版本10.0.2-adoptopenjdk + 13)
OpenJDK客户端VM(内部版本10.0.2-adoptopenjdk + 13,混合模式)
pi @ raspberrypi :〜$ ls
桌面下载Flaktstyrning.jar图片公共视频
文件FläktStyrning音乐程序模板
pi @ raspberrypi:〜$ java -XX:-AssumeMP -jar Flaktstyrning.jar
OpenJDK Client VM警告:选项AssumeMP在10.0版中已过时,并且可能在以后的版本中删除。
线程“主”中的异常java.lang.RuntimeException:无法打开引脚[28]的GPIO方向接口:权限被拒绝

在com.pi4j.wiringpi.GpioUtil.export(本机方法)
在com.pi4j.io.gpio.WiringPiGpioProviderBase.export(WiringPiGpioProviderBase.java:108)
在com.pi4j.io.gpio.impl.GpioPinImpl.export(GpioPinImpl.java:158)
在com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin(GpioControllerImpl.java:566)
在com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin(GpioControllerImpl.java:718)
在com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin(GpioControllerImpl.java:730)
网址为se.spektrakon.hardware.L293.WriteL293。(WriteL293.java:30)
在se.spektrakon.hardware.raspberry.Raspberry。(Raspberry.java:48)
在se.spektrakon.hardware.Main.main(Main.java:11)
pi @ raspberrypi:〜$ sudo java -XX:-AssumeMP -jar Flaktstyrning.jar
关闭或重置。 计数:0 pulse_seconds 0
向前。 计数:1脉冲秒36
向前。 计数:2脉冲秒36
向前。 计数:3脉冲秒36
向前。 计数:4脉冲秒36
向前。 计数:5脉冲秒36
向前。 计数:6脉冲秒36
关闭或重置。 计数:0 pulse_seconds 0
关闭或重置。 计数:0 pulse_seconds 0
^ CExited!
关闭或重置。 计数:0 pulse_seconds 0
pi @ raspberrypi :〜$

当我卸载OpenJDK 8时,我在运行时找不到命令java:

pi @ raspberrypi:〜$ sudo java -XX:-AssumeMP -jar Flaktstyrning.jar
sudo java:找不到命令
pi @ raspberrypi :〜$

如果我不使用sudo命令,则会得到与上面相同的信息:

pi @ raspberrypi:〜$ java -XX:-AssumeMP -jar Flaktstyrning.jar
OpenJDK Client VM警告:选项AssumeMP在10.0版中已过时,并且可能在以后的版本中删除。
线程“主”中的异常java.lang.RuntimeException:无法打开引脚[28]的GPIO方向接口:权限被拒绝

在com.pi4j.wiringpi.GpioUtil.export(本机方法)
在com.pi4j.io.gpio.WiringPiGpioProviderBase.export(WiringPiGpioProviderBase.java:108)
在com.pi4j.io.gpio.impl.GpioPinImpl.export(GpioPinImpl.java:158)
在com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin(GpioControllerImpl.java:566)
在com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin(GpioControllerImpl.java:718)
在com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin(GpioControllerImpl.java:730)
网址为se.spektrakon.hardware.L293.WriteL293。(WriteL293.java:30)
在se.spektrakon.hardware.raspberry.Raspberry。(Raspberry.java:48)
在se.spektrakon.hardware.Main.main(Main.java:11)
pi @ raspberrypi :〜$

反正! OpenJDK 10.0.2似乎可以在32位ARM上运行。 有谁知道我可以绕过sudo命令并仍然有权使用GPIO引脚吗?

嗨,丹尼尔,您能显示一下输出吗?

猫/ proc / cpuinfo

在你的板上吗? 我很好奇-AssumeMP为何有所作为。

@詹姆士·金登(JamesKingdon)

pi @ raspberrypi :〜$ cat / proc / cpuinfo
处理器:0
型号名称:与ARMv6兼容的处理器rev 7(v6l)
BogoMIPS:697.95
功能:半拇指fastmult vfp edsp java tls
CPU实现器:0x41
CPU架构:7
CPU变体:0x0
CPU部分:0xb76
CPU版本:7

硬件:BCM2835
修订:0010
序列号:00000000b486e11c
pi @ raspberrypi :〜$

哦好的。 好吧,那么:)
啊,我的电线交叉了,出于某种原因,我以为您正在使用的是Pi 2,因此期待多核。

@詹姆士·金登(JamesKingdon)

您知道为什么需要使用-XX:-AssumeMP使其工作的问题的解决方案吗?

Oracle会出于自己的目的使用AdoptOpenJDK吗? 我的意思是,OpenJDK 8是Oracle支持ARM的最新版本。

OpenJDK 12ea可以实时检测多处理器系统,因此这可能是最佳解决方案。 否则,我们有一个源补丁会禁用代码中的AssumeMP:
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
AFAIK ARMv6和更早的版本依赖于没有人破坏其余的支持基础结构。
另外,要以root用户身份运行Java,请尝试sudo $(which java)...

解决此问题,请解决-在我们的ARM渠道上,一个文档正在松弛中工作

此页面是否有帮助?
0 / 5 - 0 等级