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://chhanz.github.io/linux/2022/09/19/udev-rule/
https://his-story.tistory.com/205
'Linux' 카테고리의 다른 글
[linux] ADB server didn't ACK 해결방법 (0) | 2022.10.11 |
---|---|
[linux] /dev/ttyUSB0 을 volume으로 인식할때 (0) | 2022.10.01 |
[linux] 리눅스 시간 변경하기 (0) | 2022.10.01 |
[linux] dmesg read kernel buffer failed (0) | 2022.10.01 |
[linux] python2 , pip2 install 하는 법 (0) | 2022.10.01 |