Ubuntu에서 udev를 이용한 장치 관리

udev는 Linux 서브시스템으로 장치 관리를 위해 사용한다.

udev는 udev rules를 이용해 설정이 가능한데, 이를 이용하면 사용자의 입맛에 맞게 장치의 이름 및 초기화 기능을 수행할 수 있다.

udev rules 파일은 /etc/udev/rules.d에 위치하면 된다. 파일 이름의 형식은 00-<udev_rule_name>.rules로 구성되는데, 앞의 두 숫자는 우선 순위를 나타내고 숫자가 낮을수록 먼저 실행된다.

룰 파일 내부에서는 라인별로 실행이 되며, 대략 내용을 살펴보면

KERNEL=="ttyUSB[0-9]*", MODE="0666", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{ID_USB_INTERFACE_NUM}=="01", SYMLINK+="ttyPIO"
KERNEL=="ttyUSB[0-9]*", MODE="0666", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{ID_USB_INTERFACE_NUM}=="00", SYMLINK+="ttyCHARGER"
KERNEL=="ttyUSB[0-9]*", MODE="0666", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="ttyHMI"
#KERNEL=="ttyUSB[0-9]*", MODE="0666", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="ttyCHARGER%E{ID_USB_INTERFACE_NUM}"

와 같다.

자세한 문법은 https://www.thegeekdiary.com/beginners-guide-to-udev-in-linux/를 참고하면 될듯.

팁.

USB 장치의 경우, idProduct, idVendor 등의 번호가 동일한 제품이 존재할 수 있는데, 이때는 ID_USB_INTERFACE_NUM를 사용하면, USB 허브 및 포트에 꼽힌 순서대로 인덱싱 번호를 얻을 수 있다. 이를 이용하면, 해당되는 장치에 대한 설정 가능

KERNEL=="ttyUSB[0-9]*", MODE="0666", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{ID_USB_INTERFACE_NUM}=="01", SYMLINK+="ttyPIO"

끝.