์๋ ํ์ธ์!
Eclipse IDE๋ฅผ ์คํํ๊ธฐ ์ํด OpenJDK 8์ ์ค์น ํ Ubuntu์ 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:~$
Eclipse์์๋ Linux 64 OpenJDK-10.0.2 + 13์ ์ปดํ์ผ๋ฌ๋ก ์ฌ์ฉํฉ๋๋ค. ๋ํ Raspberry Pi B + v1.2์์ arm32 OpenJDK-10.0.2 + 13์ ์ฌ์ฉํฉ๋๋ค.
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>: ~ $
๋ค์์ ์ฌ์ฉํ์ฌ Raspberry Pi B + v1.2์ OpenJDK-10.0.2 + 13์ ์ค์นํ์ต๋๋ค.
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.zip์์ JoystickStepperLCD.jar๋ฅผ ๋ค์ด๋ก๋ ํ ์ ์์ต๋๋ค.
https://github.com/DanielMartensson/Embedded-Systems/tree/master/JoystickStepperLCD
@DanielMartensson Ohhhhhh ์ด๊ฑด ๋ง์ด ๋๋ค์. arm32v6์์ ์ง์ํ์ง ์๋ ๊ธฐ๋ฅ์ ๋ฐํ์์์ ์ปดํ์ผํ์ต๋๋ค. Pi์์ ๋์ผํ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ๊ณ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ํ์ธํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ WORA๊ฐ ๊ณ ์ฅ๋ ๋๋ฌธ ๊ฒฝ์ฐ์ ๋๋ค.
@karianna Eclipse IDE์์
ํ ๊ฐ์ง ๋, Raspberry Pi์ Eclipse IDE๋ ๋ด Raspberry Pi์ ์๋๋ฅผ ๋๋ฌด ๋๋ฆฌ๊ฒํ์ฌ ์ปดํ์ผํ๋ ๋ฐ ๋ช ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๊ทธ๊ฒ์ด ๋ด๊ฐ Ubuntu-> USB ์คํฑ-> Raspberry Pi์์ ์ปดํ์ผํ๋ ์ด์ ์ ๋๋ค.
๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ IDE์ ๊ด๊ณ์์ด Raspberry Pi์์ Java ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐ๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. OpenJDK 10.0.2 + 13์์ WORA๋ฅผ ์์ ํ ์ ์์ต๋๊น?
์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํฉ๋๋ค. WiringPi๋ Raspberry Pi์ ์ค์นํด์ผํฉ๋๋ค.
sudo apt-get install wiringpi
WiringPi๋ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Pi4J๋ JNI๋ฅผ ํตํด WiringPi์ ํต์ ํ ์์๋ Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
@DanielMartensson ์ดํด๋ฆฝ์ค์์ด ์ปดํ์ผ ํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด Ant / Maven ๋ฑ์ ์ฌ์ฉํ๋ ๋ช ๋ น ์ค์์?
@DanielMartensson ์ดํด๋ฆฝ์ค์์ด ์ปดํ์ผ ํ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด Ant / Maven ๋ฑ์ ์ฌ์ฉํ๋ ๋ช ๋ น ์ค์์?
๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํด. ์, ๋ง์ jar ํ์ผ์ด ํฌํจ๋์ด ์๊ณ Pi์ ํฐ๋ฏธ๋์์ "javac"๋ช ๋ น์ ์ํ ํ ๋ ํ์ผ์ ํฌํจํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ์ จ์ต๋๊น?
์ปดํ์ผ ํ ๋ ํญ์ IDE๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํฌํจ ๋ ๊ทธ ์์ ํญ์๋ฆฌ๋ก ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์์ด ์์ต๋๊น?
@karianna ๊ฐ๋จํ hello world ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผ ํด ๋ณด๊ฒ ์ต๋๋ค. ์๋๋ฉด Pi4J์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๊น?
Eclipse์ 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 ์ด๊ฒ์ ์ปดํ์ผ ํ ๋ค์ ์ ๋ก๋ํ์ฌ AdoptOpenJDK 10.0.2 + 13์ผ๋ก ์คํํ ์ ์์ต๋๊น?
์คํ ๊ฐ๋ฅํ jar ํ์ผ์ด์ด์ผํฉ๋๋ค.
์ด๊ฒ์ ์ปดํ์ผ ํ ์ ์ ํ ํ๋ซํผ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ Pi์ ๋ช ๋ น ์ค์์ ๋ค์์ ์คํํ ์ ์์ต๋๋ค.
find . -name "*.java" > sources.txt
javac -cp Jars/pi4j-core.jar @sources.txt
๋ฟก๋ฟก
"์ด ํ๋ซํผ์์ ์ง์๋์ง ์๋ ์์ ์ ์ฅ์ (jlong)"์์ ๋์ผํ ๋ฉ์์ง๋ก ์ธํด ์ปดํ์ผ ํ ์ ์์ต๋๋ค.
OpenJDK 8๋ก ์ปดํ์ผ ํ ์ ์์ต๋๋ค. AdoptOpenJDK 10.0.2 ์์ ARM32์์๋ ์๋ํ์ง ์์ต๋๋ค.
์ข์ต๋๋ค. ARM ์ ๋ฌธ๊ฐ๋ฅผ ์ฐพ์ ๋ณด๊ฒ ์ต๋๋ค.
adaptopenjdk.net/slack.html์์ ์ฐ๋ฆฌ์ ํจ๊ปํ๊ณ #arm ์ฑ๋๋ก ์ด๋ํ ์ ์์ต๋๋ค.
๋ด Pi Zero-W์์ ๋ณต์ ํ ์์๋ ๊ฐ์น๊ฐ์๋ ์ผ
@ sxa555 ์ฐ๊ธฐ ์๋
cat /proc/cpuinfo
์ ์ ๊ฐ์ CPU๊ฐ ์๋์ง ํ์ธํ์ญ์์ค.
processor : 0
model_name : ARMv6-compatible processor rev 7 (v6l)
Hardware : BCM2835
์, Zero-W๋ AI๊ฐ ์๊ฐํ๋ ์๋ ๋ชจ๋ธ๊ณผ ๋ค์ ๋์ผํ์ง๋ง Wi-Fi ์ด๋ํฐ๊ฐ ์ถ๊ฐ๋์ด ์ธ ์ค์ด ๋ชจ๋ ๊ฒ์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
@karianna @ sxa555 AdoptOpenJDK๋ก ARM64 ๋นํธ ์ฑ๊ธ ๋ณด๋ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํด ๋ณธ ์ฌ๋์ด ์์ต๋๊น? ํจ๊ณผ๊ฐ ์์๋์?
@karianna @ sxa555 AdoptOpenJDK๋ก ARM64 ๋นํธ ์ฑ๊ธ ๋ณด๋ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํด ๋ณธ ์ฌ๋์ด ์์ต๋๊น? ํจ๊ณผ๊ฐ ์์๋์?
์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ARM ์ฑ๋์์ ์ฌ๋์ ๋ํด ๋ฌผ์ด๋ณผ ๊ฐ์น๊ฐ์์ ๊ฒ์ ๋๋ค.
์๋
ํ์ธ์,
๋ฌธ์ ๋ AssumeMP ํ๋๊ทธ๊ฐ ํ์ฑํ๋์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด Java๋ฅผ ์คํ ํด ์ฃผ์๊ฒ ์ต๋๊น?
java -XX:-AssumeMP -jar JoystickStepperLCD.jar
๋๋ https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ์์ JDK ๋น๋๋ฅผ ์คํ ํด ๋ณผ ์ ์์ต๋๊น? LEGO Mindstorms ํคํธ์ ARMv5 ํ๋ก์ธ์์์ ์คํ๋๋๋ก OpenJDK๋ฅผ ํจ์นํ๊ณ ์์ผ๋ฉฐ ์ง๊ธ๊น์ง ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌธ์ ์ธ์ฌ,
์ผ ์ฟ ๋ธ ๋ฐ๋ฅ
ํธ์ ๋ด์ ๊ฐ๊ธฐ
์๋ํ์ต๋๋ค! GPIO ํ์ ์ ์ดํ๋ ค๋ฉด sudo๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. 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 -version
openjdk ๋ฒ์ "10.0.2-adoptopenjdk"2018-07-17
OpenJDK ๋ฐํ์ ํ๊ฒฝ (๋น๋ 10.0.2-adoptopenjdk + 13)
OpenJDK ํด๋ผ์ด์ธํธ VM (๋น๋ 10.0.2-adoptopenjdk + 13, ํผํฉ ๋ชจ๋)
pi @ raspberrypi : ~ $ ls
๋ฐํ ํ๋ฉด ๋ค์ด๋ก๋ Flaktstyrning.jar ์ฌ์ง ๊ณต๊ฐ ๋์์
๋ฌธ์ FlรคktStyrning ์์ ํ๋ก๊ทธ๋จ ํ ํ๋ฆฟ
pi @ raspberrypi : ~ $ java -XX : -AssumeMP -jar Flaktstyrning.jar
OpenJDK ํด๋ผ์ด์ธํธ VM ๊ฒฝ๊ณ : Option AssumeMP๋ ๋ฒ์ 10.0์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ํฅํ ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ ๋ ๊ฒ์ ๋๋ค.
์ค๋ ๋ "main"์ ์์ธ java.lang.RuntimeException : ํ [28]์ ๋ํ GPIO ๋ฐฉํฅ ์ธํฐํ์ด์ค๋ฅผ ์ด ์ ์์ต๋๋ค. ๊ถํ์ด ๊ฑฐ๋ถ๋์์ต๋๋ค.com.pi4j.wiringpi.GpioUtil.export (Native Method)์์
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)
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 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
^ ์ถํํฉ๋๋ค!
๋๊ธฐ ๋๋ ์ฌ์ค์ . ์นด์ดํธ : 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 ํด๋ผ์ด์ธํธ VM ๊ฒฝ๊ณ : Option AssumeMP๋ ๋ฒ์ 10.0์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ํฅํ ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ ๋ ๊ฒ์ ๋๋ค.
์ค๋ ๋ "main"์ ์์ธ java.lang.RuntimeException : ํ [28]์ ๋ํ GPIO ๋ฐฉํฅ ์ธํฐํ์ด์ค๋ฅผ ์ด ์ ์์ : ๊ถํ์ด ๊ฑฐ๋ถ๋์์ต๋๋ค.com.pi4j.wiringpi.GpioUtil.export (Native Method)์์
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)
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 ํ์ ์ฌ์ฉํ ๊ถํ์ด ์์ต๋๊น?
์๋ ํ์ธ์ Daniel, ์ถ๋ ฅ์ ๋ณด์ฌ์ค ์ ์์ต๋๊น?
๊ณ ์์ด / proc / cpuinfo
๋ณด๋์? ์ -AssumeMP๊ฐ ์ฐจ์ด๋ฅผ ๋ง๋ ๊ฒ ๊ฐ์์ง ๊ถ๊ธํฉ๋๋ค.
์๋ ํ์ธ์.
pi @ raspberrypi : ~ $ ๊ณ ์์ด / proc / cpuinfo
ํ๋ก์ธ์ : 0
๋ชจ๋ธ๋ช : ARMv6 ํธํ ํ๋ก์ธ์ rev 7 (v6l)
BogoMIPS : 697.95
ํน์ง : ์ ๋ฐ ์์ง fastmult vfp edsp java tls
CPU ๊ตฌํ ์ : 0x41
CPU ์ํคํ ์ฒ : 7
CPU ๋ณํ : 0x0
CPU ๋ถ๋ถ : 0xb76
CPU ๊ฐ์ : 7ํ๋์จ์ด : BCM2835
๊ฐ์ : 0010
์ผ๋ จ ๋ฒํธ : 00000000b486e11c
pi @ raspberrypi : ~ $
์ค ๊ทธ๋. ์ ๋ง์ต๋๋ค :)
์, ์ ์ ์ด ๊ต์ฐจํ์ต๋๋ค. ์ด๋ค ์ด์ ๋ก ์ฌ์ฉํ๊ณ ์๋ Pi 2๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ์ฝ์ด๋ฅผ ๊ธฐ๋ํ์ต๋๋ค.
์๋ ํ์ธ์.
-XX : -AssumeMP๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํด์ผํ๋ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ด ๋ฌด์์ธ์ง ์๊ณ ์์ต๋๊น?
์ค๋ผํด์ ์์ฒด ์ฉ๋๋ก AdoptOpenJDK๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๊น? ๋ด ๋ง์ OpenJDK 8์ ARM์ ์ง์ํ๋ Oracle์ ๋ง์ง๋ง ๋ฒ์ ์ ๋๋ค.
OpenJDK 12ea๋ ๋ค์ค ํ๋ก์ธ์ ์์คํ
์ ์ฆ์ ๊ฐ์งํ๋ฏ๋ก ์๋ง๋ ์ต์์ ์๋ฃจ์
์ผ ๊ฒ์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฝ๋์์ AssumeMP๋ฅผ ๋นํ์ฑํํ๋ ์์ค ํจ์น๊ฐ ์์ต๋๋ค.
https://github.com/ev3dev-lang-java/openjdk-ev3/blob/2f9d939e984d93ad391e5ab8dfdbca4099258b65/scripts/jdk10.patch#L181
AFAIK ARMv6 ๋ฐ ์ด์ ๋ฒ์ ์ ์๋ฌด๋ ๋๋จธ์ง ์ง์ ์ธํ๋ผ๋ฅผ ์ค๋จํ์ง ์์ต๋๋ค.
๋ํ Java๋ฅผ ๋ฃจํธ๋ก ์คํํ๋ ค๋ฉด sudo $ (which java) ...
์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋จ์ ๋ฐ๋ผ ์ข ๋ฃ-์ฌ๋์ ARM ์ฑ๋์์ ๋ฌธ์๊ฐ ์์ ์ค์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์,
๋ฌธ์ ๋ AssumeMP ํ๋๊ทธ๊ฐ ํ์ฑํ๋์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด Java๋ฅผ ์คํ ํด ์ฃผ์๊ฒ ์ต๋๊น?
๋๋ https://ci.adoptopenjdk.net/view/ev3dev/job/openjdk11_build_ev3_linux/ ์์ JDK ๋น๋๋ฅผ ์คํ ํด ๋ณผ ์ ์์ต๋๊น? LEGO Mindstorms ํคํธ์ ARMv5 ํ๋ก์ธ์์์ ์คํ๋๋๋ก OpenJDK๋ฅผ ํจ์นํ๊ณ ์์ผ๋ฉฐ ์ง๊ธ๊น์ง ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌธ์ ์ธ์ฌ,
์ผ ์ฟ ๋ธ ๋ฐ๋ฅ