Linux

[linux] usb 장치 이름 고정하기 (/etc/udev/rules.d)

thxxyj 2022. 10. 1. 18:51
728x90

1. vendor ID / product ID 가져오기: lsusb

root@test-server:/etc/udev/rules.d# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 097: ID 04e8:6860 Samsung Electronics Co., Ltd Galaxy A5 (MTP)
Bus 001 Device 092: ID 18d1:0002 Google Inc. Android 1.0
Bus 001 Device 052: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

 

2. serial 고유값 가져오기: udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1   

root@test-server:/etc/udev/rules.d# udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1
    ATTRS{serial}=="A506M3DA"

 

3. /etc/udev/rules.d에 새로운 rules 파일 생성해서 디바이스 이름을 원하는 이름으로 고정하기

ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A506M3DA", SYMLINK+="tty_test001"

* 파일명 기준으로 오름차순으로 실행 되므로 기본 rules 파일 보다 먼저 실행되길 원하면,   앞에 작은 숫자로 이름 붙이기 (ex. 10-xxxxx.rules /  나중에 실행되어도 상관없으면 99-xxxxx.rules)

 

 

4.  ATTRS{serial},  ATTRS{idVendor},  ATTRS{idProduct}가 같은 device가 여러개 있는 경우, ENV{ID_USB_INTERFACE_NUM}의 번호로 구분하여 고정할 수 있다.

 

* Ubuntu 22.04 에서 ENV{ID_USB_INTERFACE_NUM}=="00" 만 추가했을 때 rule 적용이 되지 않아서SUBSYSTEMS=="usb",  ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}" 를 적용하고자 하는 디바이스 앞에 추가함

KERNEL=="ttyUSB[0-9]*", MODE="0777" SUBSYSTEMS=="usb",  ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}"

ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea71",ATTRS{serial}=="xxxxxx", ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="tty_test002"

https://stackoverflow.com/questions/19174482/udev-rule-with-binterfacenumber-doesnt-work

 

규칙 업데이트 후에 /dev/ttyUSB* 권한을 777로 유지하려면, KERNEL=="ttyUSB[0-9]*", MODE="0777" rule을 추가한다. (해당 rule이 없는 경우 규칙 업데이트(udevadm trigger --action=add) 이후 /dev/ttyUSB* 권한이 crw-rw----로 변경됨)

 

 

5. 지정한 규칙 업데이트 하기

sudo udevadm control --reload-rules && sudo udevadm trigger --action=add

  • udev reload: udev rule reload하기
  • udev trigger: udev rule 적용하기 (옵션 --action=add, --action=change)

 

 

* tty 권한 관련

Ubuntu에서 시리얼 통신이나 기타 USB 디바이스를 이용할 경우, 기본 권한 및 퍼미션이 슈퍼 유저만 사용 가능하도록 설정되어있다. 따라서 매번 sudo 명령을 이용해 사용자 프로그램을 실행하거나, sudo chmod 명령으로 일반 사용자도 읽고 쓸 수 있도록 설정해줘야 한다. 사용자 계정을 dialout, tty 그룹에 추가해 준다.

$ sudo usermod -a -G dialout $USER
$ sudo usermod -a -G tty $USER

https://ahnbk.com/?p=1370

 

참고

https://chhanz.github.io/linux/2022/09/19/udev-rule/

https://his-story.tistory.com/205 

http://daplus.net/unix-%EC%9E%AC%EB%B6%80%ED%8C%85%ED%95%98%EC%A7%80-%EC%95%8A%EA%B3%A0-udev-%EA%B7%9C%EC%B9%99%EC%9D%84-%EB%8B%A4%EC%8B%9C%EB%A1%9C%EB%93%9C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80-%EB%AC%B4/

 

728x90