Temurin-build: arm32 يبني على armv6 pi فشل مع Atomic store (jlong) غير مدعوم

تم إنشاؤها على ٦ نوفمبر ٢٠١٨  ·  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

عندما أقوم بتشغيل برنامج جافا الخاص بي ، قمت بترجمة من 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

bug

التعليق الأكثر فائدة

أهلا،
أعتقد أنه قد يتم تمكين علامة AssumeMP. هل يمكنك محاولة تشغيل جافا مثل هذا:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

بدلاً من ذلك ، هل يمكنك محاولة تشغيل إصدار JDK من https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ؟ نحن نقوم بترقية OpenJDK للتشغيل على معالج ARMv5 في مجموعة LEGO Mindstorms ويبدو أنه يعمل بشكل جيد حتى الآن.
يعتبر،
جاكوب فانك

ال 25 كومينتر

DanielMartensson Ohhhhhh هذا منطقي. لقد جمعت ميزة من وقت تشغيل لا يدعمها arm32v6. أعتقد أنك بحاجة إلى تجميع نفس البرنامج على Pi الخاص بك ومعرفة ما سيحدث. هذه حالة نادرة حيث يتم كسر WORA.

karianna لقد قمت بالفعل بتجميع البرنامج الخاص بي باستخدام Project-> Clean in Eclipse IDE. أعلم أن هذا يجب أن يكون "تجميع فقط" ، ولكن في IDE هذا ، يقف "نظيف". السبب في عدم تمكني من تشغيل التطبيق على كمبيوتر Ubuntu الخاص بي (64 بت) ، لأنه لا يمكن تشغيل Pi4J (مكتبة مضمنة في تطبيقي) على أجهزة كمبيوتر أخرى ليست كمبيوتر "Pi" مثل NanoPi و RaspberryPi ، BananaPi وهلم جرا.

مشكلة واحدة أخرى ، Eclipse IDE على Raspberry Pi سوف يبطئ Raspberry Pi الخاص بي بشكل كبير بحيث يستغرق تجميعه ساعات. هذا هو السبب في أنني أقوم بالتجميع على Ubuntu -> USB stick -> 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 هل يمكنك التجميع بدون كسوف؟ على سبيل المثال في سطر الأوامر باستخدام Ant / Maven et al؟

DanielMartensson هل يمكنك التجميع بدون كسوف؟ على سبيل المثال في سطر الأوامر باستخدام Ant / Maven et al؟

أنا اعتقد ذلك. حسنًا ، لقد تم تضمين الكثير من ملفات jar ولا أعرف كيفية تضمينها عندما أقوم بتنفيذ أمر "javac" في الجهاز الطرفي في Pi. هل قمت بتنزيل الحزمة؟

أنا دائما أستخدم IDE عندما أقوم بالتجميع. هل لديك أي اقتراح حول كيفية التجميع مع هذا القدر من البرطمانات المضمنة؟

karianna سأحاول تجميع مشروع عالم مرحبًا بسيطًا. أم أحتاج إلى استخدام نفس المكتبات مثل Pi4J؟

IIRC في حالة الكسوف ، سيكون لديك ملف يسمى .project ، والذي يسرد جميع تبعياتك. يمكنني بعد ذلك أن أعطيك نموذجًا نصيًا لتشغيله من سطر الأوامر. سيبدو مثل:

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

تضمين التغريدة

ماذا لو كان لدي عدة فصول؟ في مجلدات مختلفة أيضا.

javac -cp "المسار إلى كل ملفات JAR" YourClass.java MySecondClass.java AnotherClass.java .... class.java

؟

karianna هل يمكنك ترجمة هذا ثم تحميله حتى أتمكن من تشغيله باستخدام ValidOpenJDK 10.0.2 + 13؟

https://ufile.io/99cdb

يجب أن يكون ملف جرة قابل للتنفيذ.

ليس لدي النظام الأساسي المناسب لتجميع هذا على. ولكن من سطر الأوامر على Pi ، يمكنك تشغيل:

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

تضمين التغريدة

لا يمكن حتى الترجمة بسبب نفس الرسالة أعلاه "Atomic store (jlong) غير مدعوم في هذا النظام الأساسي".
باستخدام OpenJDK 8 ، يمكنني ترجمة ملفات. مع اعتماد OpenJDK 10.0.2 من شكل ARM32 ، لن يعمل.

حسنًا - دعني أحاول العثور على خبير ARM.

يمكنك الانضمام إلينا على appropenjdk.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 هو تقريبًا نفس النموذج الأصلي الذي تعتقده منظمة العفو الدولية ولكن مع إضافة محول wifi بحيث تكون جميع الخطوط الثلاثة متطابقة مع ما قمت بنشره

karianna @ sxa555 هل قام أي شخص بتجربة أجهزة الكمبيوتر ذات اللوحة الواحدة ARM64 بت مع تبنّي OpenJDK؟ عملت أم لا؟

karianna @ sxa555 هل قام أي شخص بتجربة أجهزة الكمبيوتر ذات اللوحة الواحدة ARM64 بت مع تبنّي OpenJDK؟ عملت أم لا؟

لست متأكدًا - ربما يستحق السؤال على قناة ARM الخاصة بنا على Slack.

أهلا،
أعتقد أنه قد يتم تمكين علامة AssumeMP. هل يمكنك محاولة تشغيل جافا مثل هذا:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

بدلاً من ذلك ، هل يمكنك محاولة تشغيل إصدار JDK من https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ؟ نحن نقوم بترقية OpenJDK للتشغيل على معالج ARMv5 في مجموعة LEGO Mindstorms ويبدو أنه يعمل بشكل جيد حتى الآن.
يعتبر،
جاكوب فانك

karianna @ sxa555JakubVanek

انها عملت! أحتاج إلى استخدام sudo للتحكم في دبابيس GPIO. لقد قمت بتثبيت OpenJDK 8 ، لكنني قمت فقط بتغيير JAVA_HOME لتبني OpenJDK بدلاً من ذلك.

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 "10.0.2-appropenjdk" 2018-07-17
بيئة وقت تشغيل OpenJDK (الإصدار 10.0.2-تبنوا +13)
OpenJDK Client VM (الإصدار 10.0.2-appropenjdk + 13 ، الوضع المختلط)
pi @ raspberrypi : ~ $ ls
تنزيلات سطح المكتب Flaktstyrning.jar الصور مقاطع الفيديو العامة
المستندات قوالب برنامج الموسيقى FläktStyrning
pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
تحذير OpenJDK Client VM: تم إهمال Option 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.(اكتب L293.java:30)
في se.spektrakon.hardware.raspberry. Raspberry.(Raspberry.java:48)
في se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
إيقاف أو إعادة تعيين. العدد: 0 نبضة_ثانية 0
إلى الأمام. العدد: 1 نبضة_ثانية 36
إلى الأمام. العدد: 2 نبضة_ثانية 36
إلى الأمام. العدد: 3 نبضات_ثانية 36
إلى الأمام. العدد: 4 نبضات_ثانية 36
إلى الأمام. العدد: 5 نبضات_ثانية 36
إلى الأمام. العدد: 6 نبضات_ثانية 36
إيقاف أو إعادة تعيين. العدد: 0 نبضة_ثانية 0
إيقاف أو إعادة تعيين. العدد: 0 نبضة_ثانية 0
^ سينتيد!
إيقاف أو إعادة تعيين. العدد: 0 نبضة_ثانية 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 Client VM: تم إهمال Option 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.(اكتب L293.java:30)
في se.spektrakon.hardware.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

على لوحك؟ أشعر بالفضول لماذا - يبدو أن AumeMP قد أحدثت فرقًا.

تضمين التغريدة

pi @ raspberrypi : ~ $ cat / proc / cpuinfo
المعالج: 0
اسم الموديل: معالج متوافق مع ARMv6 rev 7 (v6l)
بوجومبس: 697.95
الميزات: نصف الإبهام fastmult vfp edsp java tls
منفذ وحدة المعالجة المركزية: 0x41
بنية وحدة المعالجة المركزية: 7
متغير وحدة المعالجة المركزية: 0 × 0
جزء وحدة المعالجة المركزية: 0xb76
مراجعة وحدة المعالجة المركزية: 7

الأجهزة: BCM2835
المراجعة: 0010
الرقم التسلسلي: 00000000b486e11c
pi @ raspberrypi : ~ $

حسنا. حسنًا ، هذا يناسبك إذن :)
آه ، لقد تم تقاطع أسلاكي ، لسبب ما اعتقدت أنه Pi 2 الذي كنت تستخدمه ، لذلك كنت أتوقع تعدد النواة.

تضمين التغريدة

هل تعرف ما هو الحل للمشكلة لماذا أحتاج إلى استخدام -XX: -AssumeMP لجعلها تعمل؟

هل ستستخدم Oracle AcceptOpenJDK لأغراضها الخاصة؟ أعني ، OpenJDK 8 هو الإصدار الأخير من Oracle الذي يدعم ARM.

يكتشف OpenJDK 12ea الأنظمة متعددة المعالجات أثناء التنقل ، لذلك ربما يكون هذا هو الحل الأفضل. بخلاف ذلك ، لدينا مصدر تصحيح يعمل على تعطيل AssumeMP في الكود:
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
تعتمد AFAIK ARMv6 والأقدم على أنه لا أحد يكسر البنية التحتية الداعمة المتبقية.
أيضًا ، لتشغيل java كجذر ، جرب sudo $ (الذي java) ...

إغلاق هذا كما تم حله - يتم العمل على مستند على قناة ARM الخاصة بنا في فترة الركود

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات