Назначенные ядром имена всегда назначаются в порядке обнаружения устройств, и вы не можете их изменить. (Во всяком случае, больше - эта функция была удалена из-за различных условий гонки, вызванных правилами "постоянного имени".)
Но вы можете сказать udev создавать символические ссылки с любыми именами, которые вы выберете. Фактически, в современных системах у вас уже должны быть символические ссылки в /dev/serial
названные как по пути к устройству, так и по его уникальному идентификатору; например:
/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
И так далее. Просто запустите tree /dev
или ls -lR /dev
чтобы найти ваше устройство.
Вы также можете запустить udevadm info /dev/ttyUSB0
и все символические ссылки на это устройство будут перечислены в виде строк S: ...
Если этого недостаточно, вы можете написать свои собственные правила udev. Сначала запустите udevadm info /dev/ttyUSB0
и выберите любое идентифицирующее свойство (например, ID_PATH
для порта USB). Хорошая идея всегда включать подсистему.
Затем откройте (или создайте) файл в /etc/udev/rules.d/
(названный, например, serial-symlinks.rules
) и поместите туда правило udev.
Например, если вывод для ttyUSB0
:
$ udevadm info /dev/ttyUSB0
. . .
E: ID_PATH=pci-0000:00:1d.0-usb-0:1.2:1.0
. . .
E: SUBSYSTEM=tty
. . .
... вы можете написать это правило:
SUBSYSTEM=="tty", ENV{ID_PATH}=="pci-0000:00:1d.0-usb-0:1.2:1.0", SYMLINK+="tty-xbee"
... и udev всегда будет использовать символическую ссылку /dev/tty-xbee
для любого устройства tty, подключенного к USB-порту №2.
(Примечание: не используйте те же имена для символических ссылок, которые ядро использует для узлов устройств. Использование SYMLINK+="ttyUSB0"
приведет к плохим вещам.)