Имеется программное обеспечение, которое работает с устройствами на последовательных портах (через файлы /dev/...). С COM-портами все очевидно (ttyu0 всегда ttyu0). Когда я подключаю одно USB-устройство, проблем особых тоже нет (ttyU0). Но большее количество USB-устройств вносит путаницу. Если при загрузке системы я могу кое-как контролировать порядок инициализации, то при подключении устройств "на живую" проблема остается, кто первый, тот и ttyU0 и т.д. Естественное решение, которое напрашивается - привязка к физическому порту. Но как это сделать? Что посоветуете?!
> Имеется программное обеспечение, которое работает с устройствами на последовательных
> портах (через файлы /dev/...). С COM-портами все очевидно (ttyu0 всегда ttyu0).
> Когда я подключаю одно USB-устройство, проблем особых тоже нет (ttyU0). Но
> большее количество USB-устройств вносит путаницу. Если при загрузке системы я могу
> кое-как контролировать порядок инициализации, то при подключении устройств "на живую"
> проблема остается, кто первый, тот и ttyU0 и т.д. Естественное решение,
> которое напрашивается - привязка к физическому порту. Но как это сделать?
> Что посоветуете?!Через udev привяжите vendorID:deviceID к создаваемому устройству(ttyu0), пример не приведу- уже не помню как делается- я так в свое время шнурок для сотового к конкретному имени устройства привязывал.
> Через udev привяжите vendorID:deviceID к создаваемому устройству(ttyu0), пример не приведу-
> уже не помню как делается- я так в свое время шнурок
> для сотового к конкретному имени устройства привязывал.Гмм... На сколько я понял, в FreeBSD udev-а нет... Или я не прав?
>> Через udev привяжите vendorID:deviceID к создаваемому устройству(ttyu0), пример не приведу-
>> уже не помню как делается- я так в свое время шнурок
>> для сотового к конкретному имени устройства привязывал.
> Гмм... На сколько я понял, в FreeBSD udev-а нет... Или я не
> прав?Оуч- да, вероятно нет.
не обратил внимания где тема размещена.
> Имеется программное обеспечение, которое работает с устройствами на последовательных
> портах (через файлы /dev/...). С COM-портами все очевидно (ttyu0 всегда ttyu0).
> Когда я подключаю одно USB-устройство, проблем особых тоже нет (ttyU0). Но
> большее количество USB-устройств вносит путаницу. Если при загрузке системы я могу
> кое-как контролировать порядок инициализации, то при подключении устройств "на живую"
> проблема остается, кто первый, тот и ttyU0 и т.д. Естественное решение,
> которое напрашивается - привязка к физическому порту. Но как это сделать?
> Что посоветуете?!Наваять в /etc/devd.conf создание симлинков на устройства примерно такого типа:
attach 100 {
# match "system" "USB";
device-name "tty[0-9]+";
match "vendor" "0x03a0";
match "product" "0x3v18";
action "ln -s /dev/$device-name /dev/cotik";
};И работать уже с этими симлинками.
Это естественно если vendor и product разные у устройств.
>[оверквотинг удален]
> attach 100 {
> # match "system" "USB";
> device-name "tty[0-9]+";
> match "vendor" "0x03a0";
> match "product" "0x3v18";
> action "ln -s /dev/$device-name
> /dev/cotik";
> };
> И работать уже с этими симлинками.
> Это естественно если vendor и product разные у устройств.Так уже попробовал, но уперся в то, что через attach виден только uplcom[0-9]; ttyU[0-9] виден через notify, но тогда нет информации ни о вендоре, ни о чем подобном...
Вопрос решен, хотя и не однозначно. Если кто-то предложит более правильный вариант, буду признателен. Так же спасибо всем, кто постил варианты решения - оба варианта (и линуксовый) дали нужное направление.Итак...
/etc/devd.conf
# When the ICPCON USB Converters appears...
attach 100 {
match "device-name" "uplcom[0-9]";
match "vendor" "0x067b";
match "product" "0x2303";
match "release" "0x0d01";
action "/root/uplcom2ttyU $device-name /dev/icpcon0";
};
detach 100 {
match "device-name" "ugen+";
match "vendor" "0x067b";
match "product" "0x2303";
match "release" "0x0d01";
action "rm /dev/icpcon0";
};/root/uplcom2ttyU
#!/bin/sh
# arg #1 - $device-name from devd.conf - uplcomX; arg #2 - new link to ttyUX - /dev/.....
ln -s $(echo /dev/$1 | sed 's/uplcom/ttyU/g') $2