Коллеги,
к малине подключены два преобразователя интерфейса USB/RS-485, операционная система назначает им имена:
sergek@Home:~ $ ls -l /dev/*US*
crwxrwxrwx 1 root dialout 188, 0 фев 7 18:20 /dev/ttyUSB0
crwxrwxrwx 1 root dialout 188, 1 фев 7 18:20 /dev/ttyUSB1
При длительной работе операционная система иногда меняет эти имена (по какой причине, не знаю, но недопустимо часто - иногда два раза в сутки, иногда пару раз за неделю):
sergek@Home:~ $ ls -l /dev/*US*
crwxrwxrwx 1 root dialout 188, 2 фев 8 10:12 /dev/ttyUSB2
crwxrwxrwx 1 root dialout 188, 3 фев 8 10:12 /dev/ttyUSB3
Естественно, программа, подключенная к этим портам по именам ttyUSB0, ttyUSB1 перестает работать.
Чтобы программа использовала постоянные имена, сделал симлинки с помощью правил /etc/udev/rules.d/90-converters.rules:
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="0000", SYMLINK+="USR103", MODE="0777"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="USR101", MODE="0777"
Теперь ссылки на порты, с которыми работает моя программа, не меняются, даже если операционка изменила их имена:
lrwxrwxrwx 1 root root 7 фев 8 10:12 /dev/USR101 -> ttyUSB2
lrwxrwxrwx 1 root root 7 фев 8 10:12 /dev/USR103 -> ttyUSB3
lrwxrwxrwx 1 root root 7 фев 12 14:59 /dev/USR101 -> ttyUSB0
lrwxrwxrwx 1 root root 7 фев 16 19:46 /dev/USR103 -> ttyUSB2
Но подключение к физическим портам при смене их имен пропадает, программа все равно теряет соединение и перестает работать. Приходится ее перезапускать.
Подскажите, пожалуйста, есть ли способ восстановить подключение кроме переоткрытия порта в самой программе?