Jetson & Ubuntu

[ubuntu] 장치 이름 링크 생성하기 (udev rules)

mle21 2022. 7. 20. 06:00
반응형

일반적으로 리눅스 PC에 usb 장치를 연결하면 ttyUSB0, ttyUSB1 등으로 이름이 순차적으로 할당된다.

 

그래서 USB를 연결하는 순서에 따라 해당 USB 장치의 이름이 매번 변한다. 물론 USB 장치를 다 뺀 후 매번 동일한 순서대로 USB를 연결하면 개별 USB의 장치 이름이 안 바뀔 수도 있다.

 

여하튼 이때문에 특정 장치(ttyUSB0)와 통신하는 코드를 짜면 USB 연결하는 순서에 따라서 장치 이름이 다른 것으로(ttyUSB1) 바뀔 수 있어 정상 동작하지 않는 경우가 생긴다.

 

이와 같은 상황을 방지하기 위하여 USB 장치의 특성(idVendor, idProduct)을 확인하여 해당 특성을 가진 장치가 연결되면 내가 원하는 유니크한 장치 이름(ex. myUSB)으로 고정되도록 링크를 생성하여 사용한다.


1-1. usb 장치 특성 확인하기(idVendor, idProduct)

lsusb
# 로지텍 마우스 동글을 연결했을경우 아래 참조
# Bus 001 Device 003: ID 046d:c534 Logitech, Inc. ~~~ 생략
# ID 046d:c534에서 앞부분이 idVendor(회사id) 뒷부분이 idProduct(제품id)

@ 만약 usb를 2개 연결했는데 2개가 idVendor, idProduct가 같은 경우 1-2 참조

 

1-2. usb 장치 특성 확인하기(serial...)

udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1
# 실행 시 ATTRS{serial}=="0001"와 같이 serial 번호 확인 가능
# 저가 장치의 경우 동일 제조사, 제품일 경우 대부분 serial 번호가 같음

@ 만약 usb를 2개 연결했는데 idVendor, idProduct, serial까지 모두 같다면 글 제일 하단 내용 참조

 

2. rules 문서 작성(99-test-serial-comm.rules)

cd /etc/udev/rules.d
sudo touch 99-test-serial-comm.rules
# 일단 99-test-serial-comm.rules 파일 생성
# 파일 이름은 해당 폴더를 확인해보고 네이밍 형식 따름

sudo nano 99-test-serial-comm.rules

# 파일에 아래 내용 입력 및 저장
SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0043", MODE:="0666", SYMLINK+="myUSB"

# SUBSYSTEM, idVendor, idProduct가 "tty", "2341", "0043"인
# 장치가 연결되면 장치 이름을 myUSB로 인식함(링크 생성)

 

3. udevadm 규칙 적용

sudo udevadm control --reload-rules
sudo udevadm trigger

반응형

@@ usb 장치 2개가 serial, idVendor, idProduct가 다 같아서 상기 방법으로 안되는 경우가 있다. 그래서 필자는 pc의 usb 포트 위치를 추가 구속조건으로 주었고 항상 해당 usb 장치를 동일한 usb포트에 연결하는 방법으로 해당 문제를 해결하였다. 더 좋은 방법이 있는지는 모르겠다.

udevadm info -a -n /dev/ttyUSB0
# 상기 명령을 실행하면 엄청 많은 내용이 표시된다. 내용을 찬찬히 보다보면
# KERNELS=="1-2" 같은 내용을 볼수 있다. 1-2가 usb 포트 위치라고 생각하면 된다.

SUBSYSTEM=="tty", KERNELS=="1-2", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", SYMLINK+="myUSB"

 

728x90