Temurin-build: arm32 se basa en armv6 pi falla con Atomic store (jlong) no compatible

Creado en 6 nov. 2018  ·  25Comentarios  ·  Fuente: adoptium/temurin-build

¡Hola!

Tengo Eclipse en mi Ubuntu donde instalé OpenJDK 8 para ejecutar 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:~$ 

En Eclipse utilizo Linux 64 OpenJDK-10.0.2 + 13 como compilador. También uso arm32 OpenJDK-10.0.2 + 13 en 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>: ~ $

Instalé OpenJDK-10.0.2 + 13 en Raspberry Pi B + v1.2 usando:

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

Cuando ejecuto mi programa Java, lo he compilado desde Eclipse IDE. Tengo este error:

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

Puede descargar JoystickStepperLCD.jar desde JoystickStepperLCD.zip donde se encuentran en:
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD

bug

Comentario más útil

Hola,
Creo que lo problemático podría ser el indicador AssumeMP habilitado. ¿Podría intentar ejecutar Java de esta manera:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Alternativamente, ¿podría intentar ejecutar una compilación JDK desde https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Estamos parcheando OpenJDK para que se ejecute en un procesador ARMv5 en un kit de LEGO Mindstorms y parece funcionar bien hasta ahora.
Saludos,
Jakub Vaněk

Todos 25 comentarios

@DanielMartensson Ohhhhhh esto tiene sentido. Ha compilado una característica de un tiempo de ejecución que arm32v6 no admite. Creo que necesitas compilar el mismo programa en tu Pi y ver qué sucede. Este es un caso raro en el que WORA está roto.

@karianna Ya

Un problema más, Eclipse IDE en Raspberry Pi ralentizará mi Raspberry Pi tanto que tardaría horas en compilarse. Esa es la razón por la que compilo en Ubuntu -> memoria USB -> Raspberry Pi.

Compilar código Java en Raspberry Pi, independientemente del IDE que tenga, lleva mucho tiempo. ¿No es posible arreglar el WORA en OpenJDK 10.0.2 + 13?

Para ejecutar esta aplicación. WiringPi DEBE estar instalado en la Raspberry Pi.

sudo apt-get install wiringpi

WiringPi es una biblioteca C. Pi4J es una biblioteca de Java que puede comunicarse con WiringPi a través de JNI.

@DanielMartensson ¿

@DanielMartensson ¿

Creo que sí. Bueno, tengo muchos archivos jar incluidos y no sé cómo incluirlos cuando hago el comando "javac" en la terminal de mi Pi. ¿Ha descargado el paquete?

Siempre uso un IDE cuando compilo. ¿Tiene alguna sugerencia de cómo compilar con esa cantidad de frascos incluidos?

@karianna Intentaré compilar un proyecto simple de hola mundo. ¿O necesito usar las mismas bibliotecas que Pi4J?

IIRC en eclipse, tendrá un archivo llamado .project , que enumera todas sus dependencias. Entonces puedo darte un script de muestra para ejecutarlo desde la línea de comandos. Se verá algo como:

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

@karianna

¿Qué pasa si tengo varias clases? En diferentes carpetas también.

javac -cp "Ruta a todos sus archivos JAR" YourClass.java MySecondClass.java AnotherClass.java .... class.java

?

@karianna ¿Puedes compilar esto y luego cargarlo para que pueda ejecutarlo con AdoptOpenJDK 10.0.2 + 13?

https://ufile.io/99cdb

Debe ser un archivo jar ejecutable.

No tengo la plataforma adecuada para compilar esto. Pero desde su línea de comando en la Pi puede ejecutar:

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

@karianna

Ni siquiera se puede compilar debido al mismo mensaje anterior "La tienda atómica (jlong) no es compatible con esta plataforma".
Con OpenJDK 8, puedo compilar. Con AdoptOpenJDK 10.0.2 formulario ARM32, no funcionará.

De acuerdo, déjame intentar encontrar un experto en ARM.

Puede unirse a nosotros en adoptopenjdk.net/slack.html y saltar al canal #arm

Por lo que vale, puedo replicar esto en mi Pi Zero-W

@ sxa555 Intenta escribir

cat /proc/cpuinfo

Y mira si tienes la misma CPU que yo:

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

Sí, el Zero-W es más o menos lo mismo que un modelo original, creo que AI, pero con el adaptador wifi agregado, las tres líneas son idénticas a lo que ha publicado

@karianna @ sxa555 ¿Alguien ha probado computadoras de placa única ARM64 bits con AdoptOpenJDK? ¿Eso funcionó o no?

@karianna @ sxa555 ¿Alguien ha probado computadoras de placa única ARM64 bits con AdoptOpenJDK? ¿Eso funcionó o no?

No estoy seguro, probablemente valga la pena preguntar en nuestro canal ARM en holgura.

Hola,
Creo que lo problemático podría ser el indicador AssumeMP habilitado. ¿Podría intentar ejecutar Java de esta manera:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Alternativamente, ¿podría intentar ejecutar una compilación JDK desde https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Estamos parcheando OpenJDK para que se ejecute en un procesador ARMv5 en un kit de LEGO Mindstorms y parece funcionar bien hasta ahora.
Saludos,
Jakub Vaněk

@karianna @ sxa555 @JakubVanek

¡Funcionó! Necesito usar sudo para controlar los pines GPIO. Tengo el OpenJDK 8 instalado, pero simplemente cambio JAVA_HOME a AdoptOpenJDK en su lugar.

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
versión de openjdk "10.0.2-adoptopenjdk" 2018-07-17
Entorno de tiempo de ejecución OpenJDK (compilación 10.0.2-adoptopenjdk + 13)
VM de cliente OpenJDK (compilación 10.0.2-adoptopenjdk + 13, modo mixto)
pi @ raspberrypi : ~ $ ls
Descargas de escritorio Flaktstyrning.jar Imágenes Vídeos públicos
Documentos Plantillas de programas de música FläktStyrning
pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Advertencia de VM de cliente OpenJDK: la opción AssumeMP quedó obsoleta en la versión 10.0 y es probable que se elimine en una versión futura.
Excepción en el hilo "principal" java.lang.RuntimeException: No se puede abrir la interfaz de dirección GPIO para el pin [28]: Permiso denegado

en com.pi4j.wiringpi.GpioUtil.export (método nativo)
en com.pi4j.io.gpio.WiringPiGpioProviderBase.export (WiringPiGpioProviderBase.java:108)
en com.pi4j.io.gpio.impl.GpioPinImpl.export (GpioPinImpl.java:158)
en com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin (GpioControllerImpl.java:566)
en com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:718)
en com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:730)
en se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
en se.spektrakon.hardware.raspberry.Raspberry.(Frambuesa.java:48)
en se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
APAGADO o reinicio. Cuenta: 0 pulse_seconds 0
Hacia adelante. Cuenta: 1 pulso_segundos 36
Hacia adelante. Cuenta: 2 pulse_seconds 36
Hacia adelante. Cuenta: 3 pulse_seconds 36
Hacia adelante. Cuenta: 4 pulse_seconds 36
Hacia adelante. Cuenta: 5 pulse_seconds 36
Hacia adelante. Cuenta: 6 pulse_seconds 36
APAGADO o reinicio. Cuenta: 0 pulse_seconds 0
APAGADO o reinicio. Cuenta: 0 pulse_seconds 0
^ CExited!
APAGADO o reinicio. Cuenta: 0 pulse_seconds 0
pi @ raspberrypi : ~ $

Cuando desinstalo OpenJDK 8 no puedo encontrar el comando java cuando ejecuto:

pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
sudo java: comando no encontrado
pi @ raspberrypi : ~ $

Si no uso el comando sudo, obtengo lo mismo que el anterior:

pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Advertencia de VM de cliente OpenJDK: la opción AssumeMP quedó obsoleta en la versión 10.0 y es probable que se elimine en una versión futura.
Excepción en el hilo "principal" java.lang.RuntimeException: No se puede abrir la interfaz de dirección GPIO para el pin [28]: Permiso denegado

en com.pi4j.wiringpi.GpioUtil.export (método nativo)
en com.pi4j.io.gpio.WiringPiGpioProviderBase.export (WiringPiGpioProviderBase.java:108)
en com.pi4j.io.gpio.impl.GpioPinImpl.export (GpioPinImpl.java:158)
en com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin (GpioControllerImpl.java:566)
en com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:718)
en com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:730)
en se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
en se.spektrakon.hardware.raspberry.Raspberry.(Frambuesa.java:48)
en se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $

¡De todas formas! El OpenJDK 10.0.2 parece funcionar en ARM de 32 bits. ¿Alguien sabe cómo puedo omitir el comando sudo y aún tengo derechos para usar pines GPIO?

Hola Daniel, ¿podrías mostrar la salida de

cat / proc / cpuinfo

en tu tablero? Tengo curiosidad de por qué -AssumeMP parece haber marcado la diferencia.

@JamesKingdon

pi @ raspberrypi : ~ $ cat / proc / cpuinfo
procesador: 0
nombre del modelo: procesador compatible con ARMv6 rev 7 (v6l)
BogoMIPS: 697,95
Características: medio pulgar fastmult vfp edsp java tls
Implementador de CPU: 0x41
Arquitectura de CPU: 7
Variante de CPU: 0x0
Parte de la CPU: 0xb76
Revisión de CPU: 7

Hardware: BCM2835
Revisión: 0010
Clave: 00000000b486e11c
pi @ raspberrypi : ~ $

Ah, OK. Bueno, eso encaja entonces :)
Ah, tengo mis cables cruzados, por alguna razón pensé que era Pi 2 lo que estaba usando, así que esperaba multi-core.

@JamesKingdon

¿Sabes cuál es la solución para el problema por el que necesito usar -XX: -AssumeMP para que funcione?

¿Oracle utilizará AdoptOpenJDK para sus propios fines? Quiero decir, OpenJDK 8 es la última versión de Oracle que admite ARM.

OpenJDK 12ea detecta sistemas multiprocesador sobre la marcha, por lo que probablemente sea la mejor solución. De lo contrario, tenemos un parche fuente que deshabilita AssumeMP en el código:
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
AFAIK ARMv6 y versiones anteriores dependen de que nadie rompa la infraestructura de soporte restante.
Además, para ejecutar java como root, intente sudo $ (que java) ...

Cerrando esto como resuelto: se está trabajando en un documento en nuestro canal ARM en holgura

¿Fue útil esta página
0 / 5 - 0 calificaciones