Welcome to My World (www.dgmayor.com)

소프트웨어/자바 GUI & C# 등...

40. 리눅스 자바 시리얼 통신 시 포트 확인

dgmayor 2022. 4. 6. 18:10
728x90

윈도 상에서는 장치 관리자와 comport 를 사용하여, 자바로 시리얼 통신에 성공하였다.

 

그렇지만 계속 블로그 돌아다니고, 스택 오버 플로우를 돌아 다닌 다음에 방법을 알아내었다.

 

먼저 sudo apt-get install librxtx-java 로 자바 전용 rxtx 2.2 버전 라이브러리를 설치한다.

이후 이클립스에서 http://mfizz.com/oss/rxtx-for-java 에서 리눅스용 .dll 대신 .so 가 들어 있는 자바 전용 라이브러리를

lib 에 넣고, native 코드도 수정한다.

 

이후 기존 윈도우랑 똑같이 소스를 실행 하면....

포트가 없다는 소리가 나온다.

 

하지만 리눅스 상에서는 장치 관리자가 없다.

sysinfo인가 있다고 하는데 못 찾겠다.

comport도 없다. 그래서 포트를 찾는데 애를 엄청 먹었다.

하지만 블로그를 돌아다니고, 스택 오버 플로우를 돌아다니고, 리눅스 책을 파다 보니 조금 방법은 찾아내었는데....

 

일단, 포트를 꽂기 전, 후를  ls /dev/tty* 등으로 어떤 장치가 더 추가 되었는지 확인한다.

그리고 그걸 이클립스 소스에 com 대신 입력했더니.... 또 오류....

 

스택 오버 플로를 찾아 보니, 권한 설정 때문에 이클립스가 포트를 인식 하지 못하는 것이라 한다.

sudo nautilus로

usb 권한을 777로 바꿨더니.... 된다.

 

작동
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fedad7c1d9d, pid=13125, tid=13127
#
# JRE version: OpenJDK Runtime Environment Temurin-17.0.2+8 (17.0.2+8) (build 17.0.2+8)
# Java VM: OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (17.0.2+8, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# C  [librxtxSerial.so+0x6d9d]  read_byte_array+0x3d
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P %E" (or dumping to /home/s/바탕화면/eclipse-workspace/Test_Project/core.13125)
#
# An error report file with more information is saved as:
# /home/s/바탕화면/eclipse-workspace/Test_Project/hs_err_pid13125.log
#
# If you would like to submit a bug report, please visit:
#   https://github.com/adoptium/adoptium-support/issues
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

 

되나 싶었는데.... 다시 원점으로 돌아 왔다.

그래도 윈도 상에서 비트 바꾸니까 된 걸로 봐선 그래도

윈도 64 비트 버전에서 에러 떴던 거와 마찬가지로.... 조금씩 되가고는 있는 거 같다.

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

밑에는 예전에 적어 놨던 글이다..

 

참고사이트 https://chulkang.tistory.com

 

 - WINDOW 시리얼통신을 위한 RXTX 설치.

1.  해당 첨부파일을 다운로드 합니다. (window 64bit 용)

mfz-rxtx-2.2-20081207-win-x64.zip

-  3개파일 해당폴더로 복사합니다.

Copy RXTXcomm.jar ---> <JAVA_HOME>\jre\lib\ext
Copy rxtxSerial.dll ---> <JAVA_HOME>\jre\bin
Copy rxtxParallel.dll ---> <JAVA_HOME>\jre\bin

2. 설정하기 

이클립스에서 해당프로젝트 오른쪽클릭 

- properties - java build path - libraries tab

- add external jars 해당 jar파일 OPEN - OK

3. 예제 소스

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package graphTest;
import gnu.io.CommPortIdentifier;
 
 
import java.util.Enumeration;
 
public class ChartServlet {
 
 public static void main(String[] args) {
 
  try {
   Enumeration e = CommPortIdentifier.getPortIdentifiers();
 
   System.out.println("Enumeration get()............... "+ e.hasMoreElements());
 
   while (e.hasMoreElements()) {
    CommPortIdentifier first = (CommPortIdentifier) e.nextElement();
    System.out.println("COM name : " + first.getName());
   }
    
  } catch (Exception e) {
   e.printStackTrace();
  }
 
 }
 
}

4. 결과

Enumeration get()............... true
COM name : COM14

 

연결된 시리얼 포트를 검색하여 보여주는소스입니다.

 

아래 링크에서 다른 OS별 파일을 받아 설치해볼수 있습니다.

http://mfizz.com/oss/rxtx-for-java



출처: https://tony2012.tistory.com/2 [Useless]
 

 

그래서 다음과 같은 방법이나 다른 방법으로 포트 확인을 해야 하는데....
위 소스는 안 먹지만... 잘 응용 해봐야 할 것 같다.
 
또, 다른 참고 사이트 www1005.tistory.com
 
 
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

다행히 리눅스 재설치, 자바, 이클립스 재설치 및 설정 이후, 디바이스 잠금 해제 하고, 스택 오버 플로 뒤지다가 버전 바꾸니 해결...

2.2 pre 버전으로 보이는데... 오라클 등 공식 사이트가 아니라서 알아서 찾아야 하는데 보통 쉬운 일이 아니다.

728x90