Имеется два полностью идентичных модема. Нужно их подключить, и знать какой порт какому модему принадлежит. Все-бы ничего, но периодически при перезагрузке порты меняются местами, в итоге модемы путаются, что приводит к очень нехорошим последствиям.Так вот, я пришел к выводу что нужно создать для каждого модема по статическому симлинку, и работать уже с ним.
Итак, я приступил к написанию правила, всего-то нужно:ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="vid", ATTRS{idProduct}=="pid", KERNEL=="ttyUSB*", SYMLINK+="modem"
Вроди все просто, да вот не совсем... Модемы то идентичные, по этому vid и pid у них одинаковые. Значит нужно искать другие отличия. Решил остановиться на серийнику - серийники разные, и в системе видны. Заменил пид/вид на "ATTRS{iSerial}==", и начал тестировать. Дернул модем раз, второй - не создается симлинк... Сделал "udevadm test /dev/ttyUSB0" - правило проходит.
Посидел, подумал, и родилась мысль - а серийник случайно определяется не после того, как сработал udev? Если это так, то как решить это, я даже не представляю. Если ошибаюсь, то, пожалуйста, подскажите где. Как заставить работать udev по серийнику?
Ну что-же, как всегда - как только написал, так сразу-же нашел решение. Оказалось что я в правиле накосячил.Этот вопрос решен, но появился новый - модемы с несколькими интерфейсами, по этому их нужно так сказать разделять. Для этого используется ATTRS{bInterfaceNumber}. Так вот, как только я добавляю в правило ATTRS{bInterfaceNumber}=="00" и ATTRS{bInterfaceNumber}=="01", как правило перестает работать.
Не актуально. Попытаюсь решить проблему по другому.