Temurin-build: arm32 construit sur armv6 pi échoue avec le magasin atomique (jlong) non pris en charge

Créé le 6 nov. 2018  ·  25Commentaires  ·  Source: adoptium/temurin-build

Bonjour!

J'ai Eclipse sur mon Ubuntu où j'ai installé OpenJDK 8 pour exécuter Eclipse IDE.

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

Dans Eclipse, j'utilise le Linux 64 OpenJDK-10.0.2 + 13 comme compilateur. J'utilise également arm32 OpenJDK-10.0.2 + 13 sur 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>: ~ $

J'ai installé OpenJDK-10.0.2 + 13 sur Raspberry Pi B + v1.2 en utilisant:

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

Lorsque j'exécute mon programme java, j'ai compilé à partir de l'IDE Eclipse. J'ai eu cette erreur:

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

Vous pouvez télécharger le JoystickStepperLCD.jar à partir de JoystickStepperLCD.zip où se trouve à:
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD

bug

Commentaire le plus utile

Salut,
Je pense que la chose problématique pourrait être activée drapeau AssumeMP. Pourriez-vous s'il vous plaît essayer d'exécuter java comme ceci:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Vous pouvez également essayer d'exécuter une version JDK à partir de https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Nous corrigeons OpenJDK pour qu'il fonctionne sur un processeur ARMv5 dans un kit LEGO Mindstorms et cela semble bien fonctionner jusqu'à présent.
Salutations,
Jakub Vaněk

Tous les 25 commentaires

@DanielMartensson Ohhhhhh cela a du sens. Vous avez compilé une fonctionnalité à partir d'un runtime que arm32v6 ne prend pas en charge. Je pense que vous devez compiler le même programme sur votre Pi et voir ce qui se passe. C'est un cas rare où WORA est cassé.

@karianna Je compile déjà mon programme en utilisant Project-> Clean dans Eclipse IDE. Je sais que cela devrait être "Compile only", mais dans cet IDE, il est "Clean". La raison pour laquelle je ne peux pas exécuter l'application sur mon ordinateur Ubuntu (64 bits), est que Pi4J (une bibliothèque incluse dans mon application) ne peut pas fonctionner sur d'autres ordinateurs qui ne sont pas un ordinateur "Pi" tel que NanoPi, RaspberryPi , BananaPi et ainsi de suite.

Un problème de plus, Eclipse IDE sur Raspberry Pi ralentira tellement mon Raspberry Pi que la compilation prendrait des heures. C'est la raison pour laquelle je compile sur Ubuntu -> clé USB -> Raspberry Pi.

La compilation de code Java sur Raspberry Pi, quel que soit mon IDE, prend beaucoup de temps. N'est-il pas possible de réparer le WORA sur OpenJDK 10.0.2 + 13?

Pour exécuter cette application. WiringPi DOIT être installé sur le Raspberry Pi.

sudo apt-get install wiringpi

WiringPi est une C-bibliothèque. Pi4J est une bibliothèque Java qui peut communiquer avec WiringPi via JNI.

@DanielMartensson Pouvez-vous compiler sans éclipse? par exemple sur la ligne de commande en utilisant Ant / Maven et al?

@DanielMartensson Pouvez-vous compiler sans éclipse? par exemple sur la ligne de commande en utilisant Ant / Maven et al?

Je pense que oui. Eh bien, j'ai beaucoup de fichiers jar inclus et je ne sais pas comment les inclure lorsque je fais la commande "javac" dans le terminal de mon Pi. Avez-vous téléchargé le package?

J'utilise toujours un IDE lorsque je compile. Avez-vous des suggestions sur la façon de compiler avec ce nombre de pots inclus?

@karianna J'essaierai de compiler un simple projet hello world. Ou dois-je utiliser les mêmes bibliothèques que Pi4J?

IIRC dans eclipse, vous aurez un fichier appelé .project , qui répertorie toutes vos dépendances. Je peux ensuite vous donner un exemple de script pour l'exécuter à partir de la ligne de commande. Cela ressemblera à quelque chose comme:

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

@karianna

Et si j'ai plusieurs classes? Dans différents dossiers aussi.

javac -cp "Chemin d'accès à tous vos JAR" YourClass.java MySecondClass.java AnotherClass.java .... class.java

?

@karianna Pouvez-vous compiler ceci et ensuite le télécharger pour que je puisse l'exécuter avec AdoptOpenJDK 10.0.2 + 13?

https://ufile.io/99cdb

Il doit s'agir d'un fichier jar exécutable.

Je n'ai pas la plate-forme appropriée pour compiler cela. Mais à partir de votre ligne de commande sur le Pi, vous pouvez exécuter:

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

@karianna

Impossible de compiler même en raison du même message ci-dessus "Magasin atomique (jlong) non pris en charge dans cette plate-forme".
Avec OpenJDK 8, je peux compiler. Avec AdoptOpenJDK 10.0.2 formulaire ARM32, cela ne fonctionnera pas.

OK - laissez-moi essayer de trouver un expert ARM.

Vous pouvez nous rejoindre sur adoptopenjdk.net/slack.html et sauter sur le canal #arm

Pour ce que ça vaut, je peux le reproduire sur mon Pi Zero-W

@ sxa555 Essayez d'écrire

cat /proc/cpuinfo

Et voyez si vous avez le même processeur que moi:

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

Oui, le Zero-W est plus ou moins le même qu'un modèle original, mais avec l'adaptateur wifi ajouté, les trois lignes sont identiques à ce que vous avez publié

@karianna @ sxa555 Quelqu'un a-t-il essayé les ordinateurs monocarte ARM64 bits avec AdoptOpenJDK? Cela a fonctionné ou pas?

@karianna @ sxa555 Quelqu'un a-t-il essayé les ordinateurs monocarte ARM64 bits avec AdoptOpenJDK? Cela a fonctionné ou pas?

Je ne suis pas sûr - il vaut probablement la peine de demander sur notre chaîne ARM sur slack.

Salut,
Je pense que la chose problématique pourrait être activée drapeau AssumeMP. Pourriez-vous s'il vous plaît essayer d'exécuter java comme ceci:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Vous pouvez également essayer d'exécuter une version JDK à partir de https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Nous corrigeons OpenJDK pour qu'il fonctionne sur un processeur ARMv5 dans un kit LEGO Mindstorms et cela semble bien fonctionner jusqu'à présent.
Salutations,
Jakub Vaněk

@karianna @ sxa555 @JakubVanek

Ça a marché! J'ai besoin d'utiliser sudo pour contrôler les broches GPIO. J'ai installé OpenJDK 8, mais je change simplement le JAVA_HOME en AdoptOpenJDK à la place.

pi @ raspberrypi : ~ $ export JAVA_HOME = "/ home / pi / Programme / jdk-10.0.2 + 13"
pi @ raspberrypi : ~ $ export PATH = $ JAVA_HOME / bin: $ PATH
pi @ raspberrypi : ~ $ java -version
openjdk version "10.0.2-adoptopenjdk" 17/07/2018
Environnement d'exécution OpenJDK (build 10.0.2-adoptopenjdk + 13)
OpenJDK Client VM (build 10.0.2-adoptopenjdk + 13, mode mixte)
pi @ raspberrypi : ~ $ ls
Téléchargements de bureau Flaktstyrning.jar Images Vidéos publiques
Documents Modèles de programmes de musique FläktStyrning
pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Avertissement OpenJDK Client VM: l'option AssumeMP est obsolète dans la version 10.0 et sera probablement supprimée dans une version ultérieure.
Exception dans le thread "main" java.lang.RuntimeException: impossible d'ouvrir l'interface de direction GPIO pour la broche [28]: autorisation refusée

à com.pi4j.wiringpi.GpioUtil.export (méthode native)
à 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)
sur se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
à se.spektrakon.hardware.raspberry.Raspberry.(Framboise.java:48)
sur se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
OFF ou réinitialisé. Compte: 0 impulsions_secondes 0
Avant. Nombre: 1 impulsion_secondes 36
Avant. Nombre: 2 impulsions_secondes 36
Avant. Nombre: 3 impulsions_secondes 36
Avant. Nombre: 4 impulsions_secondes 36
Avant. Nombre: 5 impulsions_secondes 36
Avant. Nombre: 6 impulsions_secondes 36
OFF ou réinitialisé. Compte: 0 impulsions_secondes 0
OFF ou réinitialisé. Compte: 0 impulsions_secondes 0
^ CExited!
OFF ou réinitialisé. Compte: 0 impulsions_secondes 0
pi @ raspberrypi : ~ $

Lorsque je désinstalle OpenJDK 8, je ne trouve pas la commande java lorsque je lance:

pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
sudo java: commande introuvable
pi @ raspberrypi : ~ $

Si je n'utilise pas la commande sudo, j'ai la même chose que ci-dessus:

pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Avertissement OpenJDK Client VM: l'option AssumeMP est obsolète dans la version 10.0 et sera probablement supprimée dans une version ultérieure.
Exception dans le thread "main" java.lang.RuntimeException: impossible d'ouvrir l'interface de direction GPIO pour la broche [28]: autorisation refusée

à com.pi4j.wiringpi.GpioUtil.export (méthode native)
à 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)
sur se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
sur se.spektrakon.hardware.raspberry.Raspberry.(Framboise.java:48)
sur se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $

En tous cas! L'OpenJDK 10.0.2 semble fonctionner à ARM 32 bits. Est-ce que quelqu'un sait comment je peux contourner la commande sudo et avoir toujours le droit d'utiliser des broches GPIO?

Salut Daniel, pourriez-vous montrer la sortie de

cat / proc / cpuinfo

sur votre planche? Je suis curieux de savoir pourquoi -AssumeMP semble avoir fait une différence.

@JamesKingdon

pi @ raspberrypi : ~ $ cat / proc / cpuinfo
processeur: 0
nom du modèle: processeur compatible ARMv6 rev 7 (v6l)
BogoMIPS: 697,95
Caractéristiques: half thumb fastmult vfp edsp java tls
Implémenteur du processeur: 0x41
Architecture du processeur: 7
Variante de processeur: 0x0
Partie CPU: 0xb76
Révision du processeur: 7

Matériel: BCM2835
Révision: 0010
N ° Série: 00000000b486e11c
pi @ raspberrypi : ~ $

Oh d'accord. Eh bien ça va alors :)
Ah, j'ai fait croiser mes fils, pour une raison quelconque, je pensais que c'était Pi 2 que vous utilisiez, donc je m'attendais à du multi-cœur.

@JamesKingdon

Savez-vous quelle est la solution au problème, pourquoi j'ai besoin d'utiliser -XX: -AssumeMP pour le faire fonctionner?

Oracle utilisera-t-il AdoptOpenJDK à ses propres fins? Je veux dire, OpenJDK 8 est la dernière version d'Oracle qui prend en charge ARM.

OpenJDK 12ea détecte les systèmes multiprocesseurs à la volée, ce qui est probablement la meilleure solution. Sinon, nous avons un correctif source qui désactive AssumeMP dans le code:
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
AFAIK ARMv6 et les versions antérieures dépendent du fait que personne ne rompt l'infrastructure de support restante.
Aussi, pour exécuter le java en tant que root, essayez sudo $ (quel java) ...

Clôture de ce problème comme résolu - un document est en cours d'élaboration sur notre canal ARM dans Slack

Cette page vous a été utile?
0 / 5 - 0 notes