Os nomes atribuídos ao kernel são sempre atribuídos na ordem em que os dispositivos são detectados e você não pode alterá-los. (Não mais, de qualquer forma - essa função foi removida devido a várias condições de corrida causadas pelas regras de "nome persistente").
Mas você pode dizer ao udev para criar symlinks com os nomes que você escolher. De fato, nos sistemas modernos, você deve já ter links simbólicos em /dev/serial
com o nome do caminho do dispositivo e de seu ID exclusivo; por exemplo:
-
/dev/serial/by-path/pci-0000:00:1a.0-usb-0:1.2:1.0
→ttyUSB0
-
/dev/serial/by-id/usb-Motorola_Inc._Motorola_Phone__C350_-if00
→ttyACM0
-
/dev/disk/by-id/ata-ST9640320AS_5WX1ZH91-part1
→sda1
-
/dev/disk/by-partlabel/Arch
→sda3
-
/dev/input/by-id/usb-PIXART_USB_OPTICAL_MOUSE-mouse
→mouse1
E assim por diante. Basta executar tree /dev
ou ls -lR /dev
para encontrar seu dispositivo.
Você também pode executar udevadm info /dev/ttyUSB0
e todos os links simbólicos para esse dispositivo serão listados como S: ...
linhas.
Se isso não for suficiente, você pode escrever suas próprias regras do udev. Primeiro execute udevadm info /dev/ttyUSB0
e escolha qualquer propriedade de identificação (como ID_PATH
para a porta USB). É uma boa ideia incluir sempre o subsistema também.
Em seguida, abra (ou crie) um arquivo em /etc/udev/rules.d/
(nomeado, por exemplo, serial-symlinks.rules
) e coloque a regra do udev lá.
Por exemplo, se a saída para ttyUSB0
for:
$ udevadm info /dev/ttyUSB0
. . .
E: ID_PATH=pci-0000:00:1d.0-usb-0:1.2:1.0
. . .
E: SUBSYSTEM=tty
. . .
... você pode escrever esta regra:
SUBSYSTEM=="tty", ENV{ID_PATH}=="pci-0000:00:1d.0-usb-0:1.2:1.0", SYMLINK+="tty-xbee"
... e o udev sempre irá linkar /dev/tty-xbee
para qualquer dispositivo tty conectado à porta USB # 2.
(Nota: Não use os mesmos nomes para links simbólicos como o kernel usa para nós de dispositivos. Usar SYMLINK+="ttyUSB0"
irá causar coisas ruins acontecerão.)