Assign static /dev identifiers to USB devices

This tutorial shows you how to always assign the same alias to a particular /dev device, such as a mote.

Problem description

Linux creates a special file when you connect USB devices. Those file are in the form /dev/ttyUSB0 for the first one you plug in, /dev/ttyUSB1 for the second, etc.

Those name are created dynamically and depends on the order devices are plugged in.

It is sometimes useful to assign static names to those devices, e.g. to always reflash the right mote.

udev allows you to assign alias on certain devices depending on some of their properties.

 

First let's find the serial number of each USB devices:

$ udevadm info --attribute-walk -n /dev/ttyUSB5 | grep serial
SUBSYSTEMS=="usb-serial"
ATTRS{serial}=="AK004SL3"
ATTRS{serial}=="0000:00:14.0"

Repeat this step for all your devices, changing /dev/ttyUSB to yours.

Once you have the mapping between the aliases you want to apply and the serial number of devices you can put them in a udev rules file like this one :

$ cat /etc/udev/rules.d/10-local.rules 
ACTION=="add", ATTRS{serial}=="A9040YRU", SYMLINK+="sniffer"
ACTION=="add", ATTRS{serial}=="AK004SL3", SYMLINK+="dr"
ACTION=="add", ATTRS{serial}=="AK004SL6", SYMLINK+="6n"

You can also see which device an alias points to by doing:

$ ls -all /dev/sniffer
lrwxrwxrwx 1 root root 7 août 30 14:17 /dev/sniffer -> ttyUSB3

Related