Temurin-build: arm32 baseia-se em armv6 pi falha com Atomic store (jlong) sem suporte

Criado em 6 nov. 2018  ·  25Comentários  ·  Fonte: adoptium/temurin-build

Olá!

Eu tenho o Eclipse no meu Ubuntu, onde instalei o OpenJDK 8 para executar o IDE do Eclipse.

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

No Eclipse, uso o Linux 64 OpenJDK-10.0.2 + 13 como compilador. Eu também uso arm32 OpenJDK-10.0.2 + 13 no 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>: ~ $

Instalei o OpenJDK-10.0.2 + 13 no Raspberry Pi B + v1.2 usando:

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

Quando executo meu programa java, compilei a partir do IDE Eclipse. Eu tenho este erro:

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

Você pode baixar JoystickStepperLCD.jar em JoystickStepperLCD.zip, onde estão localizados em:
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD

bug

Comentários muito úteis

Oi,
Eu acho que a coisa problemática pode ser a sinalização AssumeMP habilitada. Você poderia tentar executar o java assim:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Como alternativa, você poderia tentar executar uma compilação JDK em https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Estamos corrigindo o OpenJDK para rodar em um processador ARMv5 em um kit LEGO Mindstorms e parece funcionar bem até agora.
Cumprimentos,
Jakub Vaněk

Todos 25 comentários

@DanielMartensson Ohhhhhh isso faz sentido. Você compilou um recurso de um tempo de execução que arm32v6 não suporta. Acho que você precisa compilar o mesmo programa em seu Pi e ver o que acontece. Este é um caso raro em que o WORA está quebrado.

@karianna Eu já

Mais um problema: Eclipse IDE no Raspberry Pi tornará meu Raspberry Pi tão lento que levaria horas para compilar. É por isso que compilo no Ubuntu -> stick USB -> Raspberry Pi.

Compilar o código Java no Raspberry Pi, não importa qual IDE eu tenha, leva muito tempo. Não é possível fazer a correção do WORA no OpenJDK 10.0.2 + 13?

Para executar este aplicativo. O WiringPi DEVE ser instalado no Raspberry Pi.

sudo apt-get install wiringpi

WiringPi é uma biblioteca C. Pi4J é uma biblioteca Java que pode se comunicar com WiringPi via JNI.

@DanielMartensson Você pode compilar sem eclipse? por exemplo, na linha de comando usando Ant / Maven et al?

@DanielMartensson Você pode compilar sem eclipse? por exemplo, na linha de comando usando Ant / Maven et al?

Eu penso que sim. Bem, eu tenho muitos arquivos jar incluídos e não sei como incluí-los quando executo o comando "javac" no terminal do meu Pi. Você baixou o pacote?

Eu sempre uso um IDE ao compilar. Você tem alguma sugestão de como compilar com essa quantidade de potes incluídos?

@karianna Vou tentar compilar um projeto simples hello world. Ou eu preciso usar as mesmas bibliotecas como Pi4J?

IIRC no eclipse, você terá um arquivo chamado .project , que lista todas as suas dependências. Posso então fornecer um script de amostra para executá-lo na linha de comando. Será algo como:

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

@karianna

E se eu tiver várias aulas? Em pastas diferentes também.

javac -cp "Caminho para todos os seus JARs" YourClass.java MySecondClass.java AnotherClass.java .... class.java

?

@karianna Você pode compilar isso e, em seguida, enviá-lo para que eu possa executá-lo com AdoptOpenJDK 10.0.2 + 13?

https://ufile.io/99cdb

Precisa ser um arquivo jar executável.

Não tenho a plataforma apropriada para compilar isso. Mas a partir de sua linha de comando no Pi, você pode executar:

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

@karianna

Não consigo nem compilar devido à mesma mensagem acima "Atomic store (jlong) não suportado nesta plataforma".
Com o OpenJDK 8, posso compilar. Com AdoptOpenJDK 10.0.2 form ARM32, não funcionará.

OK - deixe-me tentar encontrar um especialista em ARM.

Você pode se juntar a nós em adoptopenjdk.net/slack.html e entrar no canal #arm

Se valer a pena, posso replicar isso no meu Pi Zero-W

@ sxa555 Tente escrever

cat /proc/cpuinfo

E veja se você tem a mesma CPU que eu:

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

Sim, o Zero-W é mais ou menos o mesmo que um modelo original, acho, mas com o adaptador wi-fi adicionado, então todas as três linhas são idênticas ao que você postou

@karianna @ sxa555 Alguém já experimentou computadores de placa única ARM64 bits com AdoptOpenJDK? Isso funcionou ou não?

@karianna @ sxa555 Alguém já experimentou computadores de placa única ARM64 bits com AdoptOpenJDK? Isso funcionou ou não?

Não tenho certeza - provavelmente vale a pena perguntar em nosso canal ARM no slack.

Oi,
Eu acho que a coisa problemática pode ser a sinalização AssumeMP habilitada. Você poderia tentar executar o java assim:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Como alternativa, você poderia tentar executar uma compilação JDK em https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Estamos corrigindo o OpenJDK para rodar em um processador ARMv5 em um kit LEGO Mindstorms e parece funcionar bem até agora.
Cumprimentos,
Jakub Vaněk

@karianna @ sxa555 @JakubVanek

Funcionou! Preciso usar o sudo para controlar os pinos GPIO. Eu tenho o OpenJDK 8 instalado, mas apenas altero o JAVA_HOME para 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
versão openjdk "10.0.2-adoptopenjdk" 17/07/2018
OpenJDK Runtime Environment (build 10.0.2-adoptopenjdk + 13)
OpenJDK Client VM (versão 10.0.2-adoptopenjdk + 13, modo misto)
pi @ raspberrypi : ~ $ ls
Downloads da área de trabalho Flaktstyrning.jar Imagens Vídeos públicos
Documentos Modelos de programas de música FläktStyrning
pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Aviso do OpenJDK Client VM: a opção AssumeMP foi descontinuada na versão 10.0 e provavelmente será removida em uma versão futura.
Exceção no thread "main" java.lang.RuntimeException: Não é possível abrir a interface de direção GPIO para o pino [28]: Permissão negada

em com.pi4j.wiringpi.GpioUtil.export (Método nativo)
em com.pi4j.io.gpio.WiringPiGpioProviderBase.export (WiringPiGpioProviderBase.java:108)
em com.pi4j.io.gpio.impl.GpioPinImpl.export (GpioPinImpl.java:158)
em com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin (GpioControllerImpl.java:566)
em com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:718)
em com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:730)
em se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
em se.spektrakon.hardware.raspberry.Raspberry.(Raspberry.java:48)
em se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
DESLIGADO ou reiniciado. Contagem: 0 pulse_seconds 0
Avançar. Contagem: 1 pulse_seconds 36
Avançar. Contagem: 2 pulse_seconds 36
Avançar. Contagem: 3 pulse_seconds 36
Avançar. Contagem: 4 pulse_seconds 36
Avançar. Contagem: 5 pulse_seconds 36
Avançar. Contagem: 6 pulse_seconds 36
DESLIGADO ou reiniciado. Contagem: 0 pulse_seconds 0
DESLIGADO ou reiniciado. Contagem: 0 pulse_seconds 0
^ CExited!
DESLIGADO ou reiniciado. Contagem: 0 pulse_seconds 0
pi @ raspberrypi : ~ $

Quando eu desinstalo o OpenJDK 8, não consigo encontrar o comando java quando executo:

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

Se eu não usar o comando sudo, obtenho o mesmo que acima:

pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Aviso de VM do cliente OpenJDK: a opção AssumeMP foi descontinuada na versão 10.0 e provavelmente será removida em uma versão futura.
Exceção no thread "main" java.lang.RuntimeException: Não é possível abrir a interface de direção GPIO para o pino [28]: Permissão negada

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

Qualquer maneira! O OpenJDK 10.0.2 parece funcionar em ARM de 32 bits. Alguém sabe como posso ignorar o comando sudo e ainda tenho direitos para usar os pinos GPIO?

Olá Daniel, você poderia mostrar o resultado de

cat / proc / cpuinfo

na sua placa? Estou curioso para saber por que -AssumeMP parece ter feito a diferença.

@JamesKingdon

pi @ raspberrypi : ~ $ cat / proc / cpuinfo
processador: 0
nome do modelo: processador compatível com ARMv6 rev 7 (v6l)
BogoMIPS: 697.95
Características: meio polegar fastmult vfp edsp java tls
Implementador de CPU: 0x41
Arquitetura da CPU: 7
Variante de CPU: 0x0
Parte da CPU: 0xb76
Revisão da CPU: 7

Hardware: BCM2835
Revisão: 0010
Serial: 00000000b486e11c
pi @ raspberrypi : ~ $

Oh, OK. Bem, isso se encaixa então :)
Ah, cruzei os fios, por algum motivo pensei que você estava usando Pi 2, então esperava multi-core.

@JamesKingdon

Você sabe qual é a solução para o problema por que preciso usar -XX: -AssumeMP para fazê-lo funcionar?

A Oracle usará o AdoptOpenJDK para seus próprios fins? Quero dizer, OpenJDK 8 é a última versão da Oracle que oferece suporte a ARM.

O OpenJDK 12ea detecta sistemas multiprocessadores dinamicamente, o que provavelmente é a melhor solução. Caso contrário, temos um patch de origem que desativa AssumeMP no código:
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
AFAIK ARMv6 e anteriores dependem de que ninguém quebre a infraestrutura de suporte restante.
Além disso, para executar o java como root, tente sudo $ (which java) ...

Fechando isso como resolvido - um documento está sendo trabalhado em nosso canal ARM na folga

Esta página foi útil?
0 / 5 - 0 avaliações