본문 바로가기
C++ 200제/코딩 IT 정보

리눅스 심볼릭 링크 만들기: 우분투 ttyUSBx udev 재시작까지

by vicddory 2017. 3. 24.


※ 이 포스트는 Ubuntu 32비트 14.04에서 작업. Linux Symbolic Link 1개 만드는 예제


리눅스에서 심볼릭 링크를 만들어야 할 상황이 몇 가지 있는데, 이 포스트에서는 ttyUSBx에 대한 심볼릭 링크를 다룬다. 여러 대의 usb 장치를 사용하면 링크 번호가 변경된다.


재부팅 해도 변경되고, 꽂는 순서에 따라 변경되고, 장치를 뺏다 꽂아도 변경되고... 고정되지 않아 코드에서 수정을 몇 차례 해야 한다. 여간 까다롭게 신경 쓰이는 일이 아닐 수 없다. ttyUSBx의 심볼릭 링크를 사용하면 이런 문제점을 해결할 수 있다.

USB 정보 알아내기

심볼릭 링크를 만드는 데 필요한 정보는 3가지이다.


1. Vender ID

2. Product ID

3. Serial Number


위의 세 가지 정보는 아래 두 개의 명령어로 알아낼 수 있다.


1. lsusb

2. udevadm info -a /dev/ttyUSB0 | grep '{serial}'


심볼릭 링크 symbolic_lsusb[Linux Symbolic link] symbolic_lsusb


위에 보이는가?


lsusb로 얻어낸 0403은 Vender ID, 6001은 Product ID, 12345678은 Serial Number에 해당한다. 두 개의 명령어로 심볼릭 링크를 만들기 위한 사전 정보는 모두 수집한 셈이다.


참고로, 장치의 시리얼 넘버는 /dev/serial/by-id 에서도 확인할 수 있다. 외부 장치가 연결되어야만 by-id 폴더 하단에 그 장치의 정보가 생성된다. 당연하겠지만, 외부 장치가 연결되지 않으면 by-id 폴더는 텅 비게 된다. Linux Symbolic Link를 못 만든다.

rules 파일 생성

리눅스 udev에서 사용할 rules를 추가해 보자.


99-usb-serial.rules (다운로드 링크 - 99-usb-serial.rules [클릭])


ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="12345678", SYMLINK+="ttyUSB-test"


위의 내용처럼, ATTRS의 항목을 채우고 사용자가 원하는 이름의 LINK 이름을 지정하자. SYMLINK 항목은 사용자 정의 항목이라 누구든 원하는 대로 설정할 수 있다. 위와 같은 파일을 만들었다면, 아래 폴더에 추가하자.


/etc/udev/rules.d/99-usb-serial.rules


이 과정을 통해서 리눅스의 udev는 서비스를 시작할 때, Linux Symbolic Link rules를 불러오게 된다.


udev 재시작

새로운 rule이 추가되었으니, 이를 반영하기 위해 udev 서비스를 다시 구동하자.


sudo service udev restart


심볼릭 링크 udev_restart[Linux Symbolic link] udev_restart


위의 그림처럼 stop/waiting 이후에 start/running 메시지가 확인된다면 udev가 정상적으로 다시 실행된 것이다.


다시 실행된 것이 확인된다면, 시스템의 /dev 폴더를 확인하자.


심볼릭 링크 ttyUSB[Linux Symbolic link] ttyUSB


새로 추가한 심볼릭 링크인 ttyUSB-test가 ttyUSB0을 가리키고 있음이 확인된다.


해당 장치가 ttyUSB1, ttyUSB12 등으로 바뀌어도 사용하는데 아무런 지장이 없다. 리눅스 환경에서 USB 장치를 많이 사용한다면 이런 usb용 symbolic link는 꼭 생성해 사용하자.


개발자라면 만에 하나 존재할지 모를 예외 상황을 대비해서라도 Linux Symbolic Link 설정해 놓는 것이 좋다.


댓글