Temurin-build: arm32 baut auf armv6 auf pi schlägt fehl, wenn Atomic Store (jlong) nicht unterstützt wird

Erstellt am 6. Nov. 2018  ·  25Kommentare  ·  Quelle: adoptium/temurin-build

Hallo!

Ich habe Eclipse auf meinem Ubuntu, wo ich OpenJDK 8 zum Ausführen von Eclipse IDE installiert habe.

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:~$ 

In Eclipse verwende ich Linux 64 OpenJDK-10.0.2 + 13 als Compiler. Ich verwende auch arm32 OpenJDK-10.0.2 + 13 auf Raspberry Pi B + v1.2

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>: ~ $

Ich habe OpenJDK-10.0.2 + 13 auf Raspberry Pi B + v1.2 installiert, indem ich Folgendes verwendet habe:

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

Wenn ich mein Java-Programm starte, habe ich aus Eclipse IDE kompiliert. Ich habe diesen Fehler erhalten:

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>:~ $

Sie können die JoystickStepperLCD.jar von JoystickStepperLCD.zip herunterladen.
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD

bug

Hilfreichster Kommentar

Hallo,
Ich denke, dass das Problem aktiviert sein könnte AssumeMP-Flag. Könnten Sie bitte versuchen, Java wie folgt auszuführen:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Könnten Sie alternativ versuchen, einen JDK-Build unter https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ auszuführen ? Wir patchen OpenJDK, um es auf einem ARMv5-Prozessor in einem LEGO Mindstorms-Kit auszuführen, und es scheint bisher gut zu funktionieren.
Grüße,
Jakub Vaněk

Alle 25 Kommentare

@ DanielMartensson Ohhhhhh das macht Sinn. Sie haben eine Funktion aus einer Laufzeit kompiliert, die arm32v6 nicht unterstützt. Ich denke, Sie müssen das gleiche Programm auf Ihrem Pi kompilieren und sehen, was passiert. Dies ist ein seltener Fall, in dem WORA kaputt ist.

@karianna Ich kompiliere mein Programm bereits mit Project-> Clean in Eclipse IDE. Ich weiß, dass das "Nur kompilieren" stehen sollte, aber in dieser IDE steht es "Reinigen". Der Grund, warum ich die Anwendung nicht auf meinem Ubuntu-Computer (64-Bit) ausführen kann, ist, dass Pi4J (eine in meiner Anwendung enthaltene Bibliothek) nicht auf anderen Computern ausgeführt werden kann, die kein "Pi" -Computer wie NanoPi oder RaspberryPi sind , BananaPi und so weiter.

Ein weiteres Problem: Eclipse IDE auf Raspberry Pi verlangsamt meinen Raspberry Pi so stark, dass das Kompilieren Stunden dauern würde. Das ist der Grund, warum ich auf Ubuntu kompiliere -> USB-Stick -> Raspberry Pi.

Das Kompilieren von Java-Code auf Raspberry Pi, egal welche IDE ich habe, dauert zu lange. Ist es nicht möglich, die WORA unter OpenJDK 10.0.2 + 13 zu reparieren?

So führen Sie diese Anwendung aus WiringPi MUSS auf dem Raspberry Pi installiert sein.

sudo apt-get install wiringpi

WiringPi ist eine C-Bibliothek. Pi4J ist eine Java-Bibliothek, die über JNI mit WiringPi kommunizieren kann.

@ DanielMartensson Kannst du ohne Eclipse kompilieren? zB in der Kommandozeile mit Ant / Maven et al?

@ DanielMartensson Kannst du ohne Eclipse kompilieren? zB in der Kommandozeile mit Ant / Maven et al?

Ich glaube schon. Nun, ich habe viele JAR-Dateien enthalten und weiß nicht, wie ich sie einschließen soll, wenn ich den Befehl "javac" im Terminal meines Pi ausführe. Haben Sie das Paket heruntergeladen?

Ich benutze immer eine IDE, wenn ich kompiliere. Haben Sie einen Vorschlag, wie Sie mit dieser Menge an Gläsern kompilieren können?

@karianna Ich werde versuchen, ein einfaches Hallo-Welt-Projekt zu kompilieren. Oder muss ich dieselben Bibliotheken wie Pi4J verwenden?

IIRC in Eclipse haben Sie eine Datei namens .project , in der alle Ihre Abhängigkeiten aufgelistet sind. Ich kann Ihnen dann ein Beispielskript geben, mit dem Sie das über die Befehlszeile ausführen können. Es wird ungefähr so ​​aussehen:

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

@ Karianna

Was ist, wenn ich mehrere Klassen habe? Auch in verschiedenen Ordnern.

javac -cp "Pfad zu all Ihren JARs" YourClass.java MySecondClass.java AnotherClass.java .... class.java

?

@karianna Kannst du das kompilieren und dann hochladen, damit ich es mit AdoptOpenJDK 10.0.2 + 13 ausführen kann?

https://ufile.io/99cdb

Es muss eine ausführbare JAR-Datei sein.

Ich habe nicht die geeignete Plattform, um dies zu kompilieren. Aber von Ihrer Kommandozeile auf dem Pi können Sie ausführen:

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

@ Karianna

Kann aufgrund der gleichen Meldung über "Atomic Store (jlong) auf dieser Plattform nicht unterstützt" nicht einmal kompiliert werden.
Mit OpenJDK 8 kann ich kompilieren. Mit AdoptOpenJDK 10.0.2 aus ARM32 funktioniert es nicht.

OK - lassen Sie mich versuchen, einen ARM-Experten zu finden.

Sie können sich uns auf adoptopenjdk.net/slack.html anschließen und auf den # arm-Kanal springen

Für das, was es wert ist, kann ich dies auf meinem Pi Zero-W replizieren

@ sxa555 Versuche zu schreiben

cat /proc/cpuinfo

Und sehen Sie, ob Sie die gleiche CPU haben wie ich:

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

Ja, das Zero-W ist mehr oder weniger das gleiche wie ein Originalmodell, aber mit dem hinzugefügten WLAN-Adapter sind alle drei Zeilen identisch mit dem, was Sie gepostet haben

@karianna @ sxa555 Hat jemand ARM64-Bit-Singleboard-Computer mit AdoptOpenJDK ausprobiert? Das hat funktioniert oder nicht?

@karianna @ sxa555 Hat jemand ARM64-Bit-Singleboard-Computer mit AdoptOpenJDK ausprobiert? Das hat funktioniert oder nicht?

Ich bin mir nicht sicher - wahrscheinlich lohnt es sich, auf unserem ARM-Kanal nach Slack zu fragen.

Hallo,
Ich denke, dass das Problem aktiviert sein könnte AssumeMP-Flag. Könnten Sie bitte versuchen, Java wie folgt auszuführen:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Könnten Sie alternativ versuchen, einen JDK-Build unter https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ auszuführen ? Wir patchen OpenJDK, um es auf einem ARMv5-Prozessor in einem LEGO Mindstorms-Kit auszuführen, und es scheint bisher gut zu funktionieren.
Grüße,
Jakub Vaněk

@karianna @ sxa555 @JakubVanek

Es funktionierte! Ich muss sudo verwenden, um die GPIO-Pins zu steuern. Ich habe das OpenJDK 8 installiert, aber ich ändere stattdessen einfach das JAVA_HOME in AdoptOpenJDK.

pi @ raspberrypi : ~ $ export JAVA_HOME = "/ home / pi / Program / jdk-10.0.2 + 13"
pi @ raspberrypi : ~ $ export PATH = $ JAVA_HOME / bin: $ PATH
pi @ raspberrypi : ~ $ java -version
openjdk Version "10.0.2-adoptopenjdk" 2018-07-17
OpenJDK-Laufzeitumgebung (Build 10.0.2-adoptopenjdk + 13)
OpenJDK Client VM (Build 10.0.2-adoptopenjdk + 13, gemischter Modus)
pi @ raspberrypi : ~ $ ls
Desktop-Downloads Flaktstyrning.jar Bilder Öffentliche Videos
Dokumente FläktStyrning Musikprogrammvorlagen
pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
OpenJDK Client VM-Warnung: Option AssumeMP war in Version 10.0 veraltet und wird wahrscheinlich in einer zukünftigen Version entfernt.
Ausnahme im Thread "main" java.lang.RuntimeException: GPIO-Richtungsschnittstelle für Pin [28] kann nicht geöffnet werden: Berechtigung verweigert

at com.pi4j.wiringpi.GpioUtil.export (native Methode)
at com.pi4j.io.gpio.WiringPiGpioProviderBase.export (WiringPiGpioProviderBase.java:108)
unter com.pi4j.io.gpio.impl.GpioPinImpl.export (GpioPinImpl.java:158)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin (GpioControllerImpl.java:566)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:718)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:730)
at se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
bei se.spektrakon.hardware.raspberry.Raspberry.(Raspberry.java:48)
at se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
AUS oder zurücksetzen. Anzahl: 0 puls_seconds 0
Nach vorne. Anzahl: 1 Impulssekunden 36
Nach vorne. Anzahl: 2 Impulssekunden 36
Nach vorne. Anzahl: 3 Impulssekunden 36
Nach vorne. Anzahl: 4 Impulssekunden 36
Nach vorne. Anzahl: 5 Pulssekunden 36
Nach vorne. Anzahl: 6 Pulssekunden 36
AUS oder zurücksetzen. Anzahl: 0 puls_seconds 0
AUS oder zurücksetzen. Anzahl: 0 puls_seconds 0
^ CExited!
AUS oder zurücksetzen. Anzahl: 0 puls_seconds 0
pi @ raspberrypi : ~ $

Wenn ich OpenJDK 8 deinstalliere, kann ich den Befehl Java beim Ausführen nicht finden:

pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
sudo java: Befehl nicht gefunden
pi @ raspberrypi : ~ $

Wenn ich den Befehl sudo nicht verwende, habe ich das gleiche wie oben:

pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
OpenJDK Client VM-Warnung: Option AssumeMP war in Version 10.0 veraltet und wird wahrscheinlich in einer zukünftigen Version entfernt.
Ausnahme im Thread "main" java.lang.RuntimeException: GPIO-Richtungsschnittstelle für Pin [28] kann nicht geöffnet werden: Berechtigung verweigert

at com.pi4j.wiringpi.GpioUtil.export (native Methode)
at com.pi4j.io.gpio.WiringPiGpioProviderBase.export (WiringPiGpioProviderBase.java:108)
unter com.pi4j.io.gpio.impl.GpioPinImpl.export (GpioPinImpl.java:158)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin (GpioControllerImpl.java:566)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:718)
at com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:730)
at se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
bei se.spektrakon.hardware.raspberry.Raspberry.(Raspberry.java:48)
at se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $

Wie auch immer! Das OpenJDK 10.0.2 scheint mit 32-Bit-ARM zu funktionieren. Weiß jemand, wie ich den Befehl sudo umgehen kann und trotzdem Rechte zur Verwendung von GPIO-Pins habe?

Hallo Daniel, könntest du die Ausgabe von zeigen?

cat / proc / cpuinfo

auf deinem Board? Ich bin gespannt, warum -AssumeMP einen Unterschied gemacht zu haben scheint.

@ JamesKingdon

pi @ raspberrypi : ~ $ cat / proc / cpuinfo
Prozessor: 0
Modellname: ARMv6-kompatibler Prozessor Version 7 (v6l)
BogoMIPS: 697,95
Eigenschaften: halber daumen fastmult vfp edsp java tls
CPU-Implementierer: 0x41
CPU-Architektur: 7
CPU-Variante: 0x0
CPU-Teil: 0xb76
CPU-Revision: 7

Hardware: BCM2835
Revision: 0010
Seriennummer: 00000000b486e11c
pi @ raspberrypi : ~ $

Oh ok. Na das passt dann :)
Ah, ich habe meine Drähte gekreuzt, aus irgendeinem Grund dachte ich, es sei Pi 2, den Sie verwenden, also erwartete ich Multi-Core.

@ JamesKingdon

Wissen Sie, was die Lösung für das Problem ist, warum ich -XX: -AssumeMP verwenden muss, damit es funktioniert?

Wird Oracle AdoptOpenJDK für eigene Zwecke verwenden? Ich meine, OpenJDK 8 ist die letzte Version von Oracle, die ARM unterstützt.

OpenJDK 12ea erkennt Multiprozessorsysteme im laufenden Betrieb, so dass wahrscheinlich die beste Lösung. Andernfalls haben wir einen Quell-Patch, der AssumeMP im Code deaktiviert:
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
AFAIK ARMv6 und älter hängen davon ab, dass niemand die verbleibende unterstützende Infrastruktur zerstört.
Um Java als Root auszuführen, versuchen Sie auch sudo $ (welches Java) ...

Schließen Sie dies als gelöst - ein Dokument wird in unserem ARM-Kanal in Ruhe bearbeitet

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen