Temurin-build: arm32 dibangun di armv6 pi gagal dengan penyimpanan Atom (jlong) tidak didukung

Dibuat pada 6 Nov 2018  ·  25Komentar  ·  Sumber: adoptium/temurin-build

Halo!

Saya memiliki Eclipse di Ubuntu saya tempat saya menginstal OpenJDK 8 untuk menjalankan 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:~$ 

Di Eclipse saya menggunakan Linux 64 OpenJDK-10.0.2 + 13 sebagai compiler. Saya juga menggunakan arm32 OpenJDK-10.0.2 + 13 di 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>: ~ $

Saya menginstal OpenJDK-10.0.2 + 13 di Raspberry Pi B + v1.2 dengan menggunakan:

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

Ketika saya menjalankan program java saya, saya telah mengkompilasi dari Eclipse IDE. Saya mendapat kesalahan ini:

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

Anda dapat mengunduh JoystickStepperLCD.jar dari JoystickStepperLCD.zip di mana berada di:
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD

bug

Komentar yang paling membantu

Hai,
Saya pikir hal yang bermasalah mungkin diaktifkan bendera AssumeMP. Bisakah Anda mencoba menjalankan java seperti ini:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Atau, dapatkah Anda mencoba menjalankan build JDK dari https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Kami menambal OpenJDK agar berjalan pada prosesor ARMv5 dalam kit LEGO Mindstorms dan tampaknya berfungsi dengan baik sejauh ini.
Salam,
Jakub Vaněk

Semua 25 komentar

@Danielartensson Ohhhhhh ini masuk akal. Anda telah menyusun fitur dari runtime yang tidak didukung arm32v6. Saya pikir Anda perlu mengkompilasi program yang sama di Pi Anda dan melihat apa yang terjadi. Ini adalah kasus langka di mana WORA rusak.

@karianna Saya sudah mengkompilasi program saya dengan menggunakan Project-> Clean in Eclipse IDE. Saya tahu itu harus berdiri "Hanya kompilasi", tetapi dalam IDE ini, itu berdiri "Bersih". Alasan mengapa saya tidak dapat menjalankan aplikasi di komputer Ubuntu saya (64-bit), adalah karena Pi4J (pustaka yang disertakan pada aplikasi saya) tidak dapat berjalan di komputer lain yang bukan "Pi" -komputer seperti NanoPi, RaspberryPi , BananaPi, dan sebagainya.

Satu masalah lagi, Eclipse IDE pada Raspberry Pi akan memperlambat Raspberry Pi saya sehingga perlu waktu berjam-jam untuk dikompilasi. Itulah alasan mengapa saya melakukan compile di Ubuntu -> USB stick -> Raspberry Pi.

Mengompilasi kode Java pada Raspberry Pi, apa pun IDE yang saya miliki, membutuhkan waktu yang lama. Apakah tidak mungkin memperbaiki WORA pada OpenJDK 10.0.2 + 13?

Untuk menjalankan aplikasi ini. WiringPi HARUS diinstal pada Raspberry Pi.

sudo apt-get install wiringpi

WiringPi adalah C-library. Pi4J adalah perpustakaan Java yang dapat berkomunikasi dengan WiringPi melalui JNI.

@DanielMartensson Bisakah Anda mengkompilasi tanpa gerhana? misalnya pada baris Perintah menggunakan Ant / Maven et al?

@DanielMartensson Bisakah Anda mengkompilasi tanpa gerhana? misalnya pada baris Perintah menggunakan Ant / Maven et al?

Aku pikir begitu. Yah, saya punya banyak file jar yang disertakan dan saya tidak tahu bagaimana memasukkannya ketika saya melakukan perintah "javac" di terminal di Pi saya. Sudahkah anda mendownload paketnya?

Saya selalu menggunakan IDE saat saya mengkompilasi. Apakah Anda punya saran bagaimana mengkompilasi dengan jumlah toples yang disertakan?

@karianna Saya akan mencoba menyusun proyek hello world sederhana. Atau apakah saya perlu menggunakan pustaka yang sama seperti Pi4J?

IIRC di eclipse, Anda akan memiliki file bernama .project , yang mencantumkan semua dependensi Anda. Saya kemudian dapat memberi Anda contoh skrip untuk menjalankannya dari Command Line. Ini akan terlihat seperti:

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

@rumahguguk

Bagaimana jika saya memiliki banyak kelas? Di folder yang berbeda juga.

javac -cp "Jalur ke semua JAR Anda" YourClass.java MySecondClass.java AnotherClass.java .... class.java

?

@karianna Dapatkah Anda mengkompilasi dan kemudian mengunggahnya sehingga saya dapat menjalankannya dengan AdoptOpenJDK 10.0.2 + 13?

https://ufile.io/99cdb

Ini harus berupa file jar yang dapat dieksekusi.

Saya tidak memiliki platform yang sesuai untuk mengkompilasi ini. Tetapi dari baris perintah Anda di Pi, Anda dapat menjalankan:

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

@rumahguguk

Bahkan tidak dapat mengkompilasi karena pesan yang sama di atas "Penyimpanan atom (jlong) tidak didukung dalam platform ini".
Dengan OpenJDK 8, saya dapat mengkompilasi. Dengan AdoptOpenJDK 10.0.2 bentuk ARM32, itu tidak akan berfungsi.

Oke - izinkan saya mencoba mencari pakar ARM.

Anda dapat bergabung dengan kami di adoptopenjdk.net/slack.html dan masuk ke saluran #arm

Untuk apa nilainya, saya dapat mereplikasi ini di Pi Zero-W saya

@ sxa555 Cobalah untuk menulis

cat /proc/cpuinfo

Dan lihat apakah Anda memiliki CPU yang sama seperti saya:

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

Ya Zero-W kurang lebih sama dengan model asli yang menurut AI tetapi dengan adaptor wifi ditambahkan sehingga ketiga baris identik dengan apa yang Anda posting

@ karianna @ sxa555 Adakah yang pernah mencoba komputer singleboard ARM64 bits dengan AdoptOpenJDK? Itu berhasil atau tidak?

@ karianna @ sxa555 Adakah yang pernah mencoba komputer singleboard ARM64 bits dengan AdoptOpenJDK? Itu berhasil atau tidak?

Saya tidak yakin - mungkin layak ditanyakan di saluran ARM kami jika kendor.

Hai,
Saya pikir hal yang bermasalah mungkin diaktifkan bendera AssumeMP. Bisakah Anda mencoba menjalankan java seperti ini:

java -XX:-AssumeMP -jar JoystickStepperLCD.jar

Atau, dapatkah Anda mencoba menjalankan build JDK dari https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ? Kami menambal OpenJDK agar berjalan pada prosesor ARMv5 dalam kit LEGO Mindstorms dan tampaknya berfungsi dengan baik sejauh ini.
Salam,
Jakub Vaněk

@karianna @ sxa555 @JakubVanek

Berhasil! Saya perlu menggunakan sudo untuk mengontrol pin GPIO. Saya sudah menginstal OpenJDK 8, tetapi saya hanya mengubah JAVA_HOME menjadi AdoptOpenJDK sebagai gantinya.

pi @ raspberrypi : ~ $ export JAVA_HOME = "/ home / pi / Program / jdk-10.0.2 + 13"
pi @ raspberrypi : ~ $ ekspor PATH = $ JAVA_HOME / bin: $ PATH
pi @ raspberrypi : ~ $ java -version
openjdk versi "10.0.2-adoptopenjdk" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2-adoptopenjdk + 13)
OpenJDK Client VM (build 10.0.2-adoptopenjdk + 13, mode campuran)
pi @ raspberrypi : ~ $ ls
Unduhan Desktop Gambar Flaktstyrning.jar Video Publik
Dokumen Template Program Musik FläktStyrning
pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Peringatan VM Klien OpenJDK: Option AssumeMP tidak digunakan lagi dalam versi 10.0 dan kemungkinan besar akan dihapus pada rilis mendatang.
Pengecualian di utas "main" java.lang.RuntimeException: Tidak dapat membuka antarmuka arah GPIO untuk pin [28]: Izin ditolak

di com.pi4j.wiringpi.GpioUtil.export (Metode Asli)
di com.pi4j.io.gpio.WiringPiGpioProviderBase.export (WiringPiGpioProviderBase.java:108)
di com.pi4j.io.gpio.impl.GpioPinImpl.export (GpioPinImpl.java:158)
di com.pi4j.io.gpio.impl.GpioControllerImpl.provisionPin (GpioControllerImpl.java:566)
di com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:718)
di com.pi4j.io.gpio.impl.GpioControllerImpl.provisionDigitalOutputPin (GpioControllerImpl.java:730)
di se.spektrakon.hardware.L293.WriteL293.(WriteL293.java:30)
di se.spektrakon.hardware.raspberry.Raspberry.(Raspberry.java:48)
di se.spektrakon.hardware.Main.main (Main.java:11)
pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
MATI atau setel ulang. Hitung: 0 pulsa_detik 0
Meneruskan. Hitung: 1 pulsa_detik 36
Meneruskan. Hitung: 2 detak_detik36
Meneruskan. Hitung: 3 detak_detik36
Meneruskan. Hitung: 4 detak_detik 36
Meneruskan. Hitung: 5 detak_detik36
Meneruskan. Hitung: 6 detak_detik36
MATI atau setel ulang. Hitung: 0 pulsa_detik 0
MATI atau setel ulang. Hitung: 0 pulsa_detik 0
^ Senang!
MATI atau setel ulang. Hitung: 0 pulsa_detik 0
pi @ raspberrypi : ~ $

Ketika saya menghapus OpenJDK 8 saya tidak dapat menemukan perintah java ketika saya menjalankan:

pi @ raspberrypi : ~ $ sudo java -XX: -AssumeMP -jar Flaktstyrning.jar
sudo java: perintah tidak ditemukan
pi @ raspberrypi : ~ $

Jika saya tidak menggunakan perintah sudo, saya mendapatkan yang sama seperti di atas:

pi @ raspberrypi : ~ $ java -XX: -AssumeMP -jar Flaktstyrning.jar
Peringatan VM Klien OpenJDK: Option AssumeMP tidak digunakan lagi dalam versi 10.0 dan kemungkinan besar akan dihapus pada rilis mendatang.
Pengecualian di utas "main" java.lang.RuntimeException: Tidak dapat membuka antarmuka arah GPIO untuk pin [28]: Izin ditolak

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

Bagaimanapun! OpenJDK 10.0.2 tampaknya bekerja pada ARM 32-bit. Adakah yang tahu bagaimana saya dapat melewati perintah sudo dan masih mendapat hak untuk menggunakan pin GPIO?

Hai Daniel, dapatkah Anda menunjukkan hasil dari

cat / proc / cpuinfo

di papan Anda? Saya ingin tahu mengapa -AssumeMP tampaknya membuat perbedaan.

@Kartun_anak

pi @ raspberrypi : ~ $ cat / proc / cpuinfo
prosesor: 0
nama model: prosesor yang kompatibel dengan ARMv6 rev 7 (v6l)
BogoMIPS: 697,95
Fitur: setengah jempol fastmult vfp edsp java tls
Pelaksana CPU: 0x41
Arsitektur CPU: 7
Varian CPU: 0x0
Bagian CPU: 0xb76
Revisi CPU: 7

Perangkat keras: BCM2835
Revisi: 0010
Serial: 00000000b486e11c
pi @ raspberrypi : ~ $

Oh oke. Nah itu cocok :)
Ah, saya menyilangkan kabel saya, untuk beberapa alasan saya pikir itu adalah Pi 2 yang Anda gunakan, jadi saya mengharapkan multi-core.

@Kartun_anak

Tahukah Anda apa solusi untuk masalah mengapa saya perlu menggunakan -XX: -AssumeMP agar berfungsi?

Akankah Oracle menggunakan AdoptOpenJDK untuk tujuannya sendiri? Maksud saya, OpenJDK 8 adalah versi terakhir dari Oracle yang mendukung ARM.

OpenJDK 12ea mendeteksi sistem multiprosesor dengan cepat, jadi itu mungkin solusi terbaik. Jika tidak, kami memiliki tambalan sumber yang menonaktifkan AssumeMP dalam kode:
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
AFAIK ARMv6 dan yang lebih lama bergantung pada tidak ada yang merusak infrastruktur pendukung yang tersisa.
Juga, untuk menjalankan java sebagai root, coba sudo $ (java yang mana) ...

Menutup ini sebagai diselesaikan - dokumen sedang dikerjakan di saluran ARM kami dengan lamban

Apakah halaman ini membantu?
0 / 5 - 0 peringkat