티스토리 뷰
목차
※ 이 포스트는 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}'
[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 서비스를 다시 구동하자.
[Linux Symbolic link] udev_restart
위의 그림처럼 stop/waiting 이후에 start/running 메시지가 확인된다면 udev가 정상적으로 다시 실행된 것이다.
다시 실행된 것이 확인된다면, 시스템의 /dev 폴더를 확인하자.
[Linux Symbolic link] ttyUSB
새로 추가한 심볼릭 링크인 ttyUSB-test가 ttyUSB0을 가리키고 있음이 확인된다.
해당 장치가 ttyUSB1, ttyUSB12 등으로 바뀌어도 사용하는데 아무런 지장이 없다. 리눅스 환경에서 USB 장치를 많이 사용한다면 이런 usb용 symbolic link는 꼭 생성해 사용하자.
개발자라면 만에 하나 존재할지 모를 예외 상황을 대비해서라도 Linux Symbolic Link 설정해 놓는 것이 좋다.