[Hardware] Много USB - RS232
Pavel Vainerman
VPashka на nm.ru
Вт Сен 12 01:22:14 MSD 2006
6 сентября 2006 15:23, A.Kitouwaykin написал:
> Добрый день. Есть проблема.
> Есть ли возможность установить однозначное соответствие
> между шнурком и номером устройства /dev/ttyUSBx? Где то мелькало,
> что в ядрах 2.6...
Здесь можно смотреть через /sys/bus/usb-serial/xxx
в этом каталоге формируются записи о каждом устройстве.
В своё время (путём проб и ошибок) был написан код программы сопоставляющий
"номер" разъёма с устройством:
Проходили по списку каталогов в каталоге "/sys/bus/usb-serial/"
и "дешефровывали" их название следующим образом:
(target - это текущая считанная запись)
void read_list(char target, ...)
{
char tmp[100]; char pci[100];
char dev[20]; char num1[20];
char usb[20]; char usb1[20];
// обнуляем
bzero(tmp,sizeof(tmp));
bzero(pci,sizeof(pci));
bzero(dev,sizeof(dev));
bzero(num1,sizeof(num1));
bzero(usb,sizeof(usb));
bzero(usb1,sizeof(usb1));
int num_ctrl(0); // номер контроллера
int num_con(0); // номер разъёма
// пример строки
// ../../../devices/pci0000:00/0000:00:02.0/usb2/2-3/2-3:1.0/ttyUSB0
int res =
sscanf(target,"%[./]devices/%[^/]/%[^/]/%[^/]/%d-%d/%[^/]/%[^/]",
&tmp,&pci,&num1,&usb,&num_con,&num_ctrl,&usb1,&dev);
if( res != 0 )
{
...
Соответственно device будет "/dev/" + dev...
...
}
...
}
Конечно всё это можно и на баше написать, нам надо было на "c"...
В общем случае каждый внешний usb-разъём всегда идентифицируется
одинаково (это номер контроллера и номер канала), но файл устройства с которым
он связывается при каждом "втыкании" может быть разным.
P.S. Я конечно не очень разбираюсь в правилах наименований в sysfs, но
это работало...
P.P.S. Надеюсь если что, старшие товарищи меня поправят...
--
Павел Вайнерман
Eternity Software Team
http://www.etersoft.ru
Подробная информация о списке рассылки Hardware