Temurin-build: arm32 строится на armv6 pi терпит неудачу с неподдерживаемым атомным хранилищем (jlong)

Созданный на 6 нояб. 2018  ·  25Комментарии  ·  Источник: adoptium/temurin-build

Привет!

У меня Eclipse на моем Ubuntu, где я установил OpenJDK 8 для запуска 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:~$ 

В Eclipse я использую Linux 64 OpenJDK-10.0.2 + 13 в качестве компилятора. Я также использую arm32 OpenJDK-10.0.2 + 13 на 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>: ~ $

Я установил OpenJDK-10.0.2 + 13 на Raspberry Pi B + v1.2, используя:

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.jar из JoystickStepperLCD.zip, который находится по адресу:
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD

Самый полезный комментарий

Привет,
Думаю, что проблемная штука могла быть включена флагом AssumeMP. Не могли бы вы попробовать запустить Java следующим образом:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

В качестве альтернативы, не могли бы вы попробовать запустить сборку JDK с https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Мы исправляем OpenJDK для работы на процессоре ARMv5 в наборе LEGO Mindstorms, и, похоже, пока он работает хорошо.
С уважением,
Якуб Ванек

Все 25 Комментарий

@DanielMartensson Ооооо, это имеет смысл. Вы скомпилировали функцию из среды выполнения, которую arm32v6 не поддерживает. Я думаю, вам нужно скомпилировать ту же программу на своем Pi и посмотреть, что произойдет. Это редкий случай, когда WORA не работает.

@karianna Я уже скомпилировал свою программу, используя Project-> Clean в Eclipse IDE. Я знаю, что должно стоять "Compile only", но в этой IDE стоит "Clean". Причина, по которой я не могу запустить приложение на моем компьютере с Ubuntu (64-разрядная версия), заключается в том, что Pi4J (библиотека, включенная в мое приложение) не может работать на других компьютерах, не являющихся «Pi» -компьютерами, такими как NanoPi, RaspberryPi. , BananaPi и так далее.

Еще одна проблема: Eclipse IDE на Raspberry Pi так сильно замедлит мой Raspberry Pi, что на его компиляцию уйдут часы. Вот почему я компилирую на Ubuntu -> USB-накопитель -> Raspberry Pi.

Компиляция Java-кода на Raspberry Pi, независимо от того, какая у меня IDE, занимает много времени. Нельзя ли исправить WORA на OpenJDK 10.0.2 + 13?

Для запуска этого приложения. WiringPi ДОЛЖЕН быть установлен на Raspberry Pi.

sudo apt-get install wiringpi

WiringPi - это C-библиотека. Pi4J - это библиотека Java, которая может связываться с WiringPi через JNI.

@DanielMartensson Можете ли вы скомпилировать без eclipse? например, в командной строке с помощью Ant / Maven и др.?

@DanielMartensson Можете ли вы скомпилировать без eclipse? например, в командной строке с помощью Ant / Maven и др.?

Я думаю так. Ну, у меня есть много jar-файлов, и я не знаю, как их включить, когда я выполняю команду «javac» в терминале на моем Pi. Вы скачали пакет?

Я всегда использую IDE при компиляции. Есть ли у вас какие-либо предложения, как скомпилировать с таким количеством включенных jar-файлов?

@karianna Я попробую скомпилировать простой проект hello world. Или мне нужно использовать те же библиотеки, что и Pi4J?

IIRC в eclipse у вас будет файл с именем .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

Невозможно даже скомпилировать из-за того же сообщения выше «Атомное хранилище (jlong) не поддерживается на этой платформе».
С OpenJDK 8 я могу компилировать. С AdoptOpenJDK 10.0.2 из ARM32 это не сработает.

ОК - позвольте мне попробовать найти эксперта по ARM.

Вы можете присоединиться к нам на сайте accepttopenjdk.net/slack.html и перейти на канал #arm

Как бы то ни было, я могу воспроизвести это на своем Pi Zero-W.

@ sxa555 Попробуй написать

cat /proc/cpuinfo

И посмотрите, есть ли у вас такой же процессор, как у меня:

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

Да, Zero-W более или менее похож на оригинальную модель AI, но с добавленным адаптером Wi-Fi, поэтому все три строки идентичны тому, что вы опубликовали

@karianna @ sxa555 Кто-нибудь пробовал одноплатные компьютеры ARM64 бит с AdoptOpenJDK? Это сработало или нет?

@karianna @ sxa555 Кто-нибудь пробовал одноплатные компьютеры ARM64 бит с AdoptOpenJDK? Это сработало или нет?

Не уверен - наверное, стоит спросить на нашем канале ARM о Slack.

Привет,
Думаю, что проблемная штука могла быть включена флагом AssumeMP. Не могли бы вы попробовать запустить Java следующим образом:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

В качестве альтернативы, не могли бы вы попробовать запустить сборку JDK с https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Мы исправляем OpenJDK для работы на процессоре ARMv5 в наборе LEGO Mindstorms, и, похоже, пока он работает хорошо.
С уважением,
Якуб Ванек

@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 : ~ $ export PATH = $ JAVA_HOME / bin: $ PATH
pi @ raspberrypi : ~ $ java -версия
версия openjdk "10.0.2-accepttopenjdk" 17.07.2018
Среда выполнения OpenJDK (сборка 10.0.2-accepttopenjdk + 13)
Клиентская виртуальная машина OpenJDK (сборка 10.0.2-accepttopenjdk + 13, смешанный режим)
pi @ raspberrypi : ~ $ ls
Загрузки для рабочего стола Flaktstyrning.jar Изображения Общедоступные видео
Документы Шаблоны музыкальной программы FläktStyrning
pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Предупреждение клиентской виртуальной машины OpenJDK: опция AssumeMP устарела в версии 10.0 и, вероятно, будет удалена в следующем выпуске.
Исключение в потоке "main" java.lang.RuntimeException: невозможно открыть интерфейс направления GPIO для контакта [28]: в доступе отказано

в 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)
на се.спектракон.аппаратное обеспечение.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 pulse_seconds 36
Вперед. Счетчик: 2 pulse_seconds 36
Вперед. Счетчик: 3 pulse_seconds 36
Вперед. Счетчик: 4 pulse_seconds 36
Вперед. Счетчик: 5 pulse_seconds 36
Вперед. Счетчик: 6 pulse_seconds 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: опция AssumeMP устарела в версии 10.0 и, вероятно, будет удалена в следующем выпуске.
Исключение в потоке "main" java.lang.RuntimeException: невозможно открыть интерфейс направления GPIO для контакта [28]: в доступе отказано

в 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)
на се.спектракон.аппаратное обеспечение.raspberry.Raspberry.(Raspberry.java:48)
по адресу se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $

В любом случае! OpenJDK 10.0.2, похоже, работает на 32-битной ARM. Кто-нибудь знает, как я могу обойти команду sudo и все же получить права на использование контактов GPIO?

Привет, Даниэль, не могли бы вы показать результат

cat / proc / cpuinfo

на твоей доске? Мне любопытно, почему -AssumeMP, похоже, изменил ситуацию.

@JamesKingdon

pi @ raspberrypi : ~ $ cat / proc / cpuinfo
процессор: 0
название модели: ARMv6-совместимый процессор rev 7 (v6l)
BogoMIPS: 697,95
Особенности: fastmult vfp edsp с половинным пальцем java tls
Исполнитель ЦП: 0x41
Архитектура процессора: 7
Вариант процессора: 0x0
Часть процессора: 0xb76
Версия процессора: 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 и старше зависят от того, что никто не сломает оставшуюся поддерживающую инфраструктуру.
Кроме того, чтобы запустить java от имени root, попробуйте sudo $ (which java) ...

Закрытие как решенное - документ обрабатывается на нашем канале ARM в резерве

Была ли эта страница полезной?
0 / 5 - 0 рейтинги