Сортирка имен USB устройств (143 USB устройства)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

nordonsimf
Сообщения: 2

Сортирка имен USB устройств

Сообщение nordonsimf »

Добрый день, можете помочь

Дистрибутив Debian

Есть проблема с правильной выдачей имен устройств в линуксе ttyACM[X]. В наличии странная штука под название Симбанк,по сути это хаб модемов, подключаемых к компьютеру через USB Устройства при каждой следующей загрузке хаотично перемешиваются и их распорядок не соответствует слотам на самом устройстве. Необходимо чтобы независимо от места подключения (юсб порт) устройство получало свое уникальное имя.

Пример: Вот так определил в этот раз их линукс.

Код: Выделить всё

[   12.663250] cdc_acm 1-3.4.1:1.0: ttyACM4: USB ACM device
[   12.663481] cdc_acm 1-3.4.1:1.2: ttyACM5: USB ACM device
[   12.663721] cdc_acm 1-3.4.1:1.4: ttyACM6: USB ACM device
[   12.663972] cdc_acm 1-3.4.1:1.6: ttyACM7: USB ACM device
[   12.665871] cdc_acm 1-3.4.2:1.0: ttyACM12: USB ACM device
[   12.666100] cdc_acm 1-3.4.2:1.2: ttyACM13: USB ACM device
[   12.666349] cdc_acm 1-3.4.2:1.4: ttyACM14: USB ACM device
[   12.666597] cdc_acm 1-3.4.2:1.6: ttyACM15: USB ACM device
[   12.670888] cdc_acm 1-3.4.3:1.0: ttyACM32: USB ACM device
[   12.671109] cdc_acm 1-3.4.3:1.2: ttyACM33: USB ACM device
[   12.671354] cdc_acm 1-3.4.3:1.4: ttyACM34: USB ACM device
[   12.671601] cdc_acm 1-3.4.3:1.6: ttyACM35: USB ACM device
[   12.679536] cdc_acm 1-3.4.4:1.0: ttyACM60: USB ACM device
[   12.679752] cdc_acm 1-3.4.4:1.2: ttyACM61: USB ACM device
[   12.680952] cdc_acm 1-3.4.4:1.4: ttyACM62: USB ACM device
[   12.681276] cdc_acm 1-3.4.4:1.6: ttyACM63: USB ACM device

Вот так хотелось бы, причем в любом юсб хабе в любом порту

Код: Выделить всё

1-3.4.1:1.0: ttyACM0: USB ACM device
1-3.4.1:1.2: ttyACM1: USB ACM device
1-3.4.1:1.4: ttyACM2: USB ACM device
1-3.4.1:1.6: ttyACM3: USB ACM device
1-3.4.2:1.0: ttyACM4: USB ACM device
1-3.4.2:1.2: ttyACM5: USB ACM device
1-3.4.2:1.4: ttyACM6: USB ACM device
1-3.4.2:1.6: ttyACM7: USB ACM device
1-3.4.3:1.0: ttyACM8: USB ACM device
1-3.4.3:1.2: ttyACM9: USB ACM device
1-3.4.3:1.4: ttyACM10: USB ACM device
1-3.4.3:1.6: ttyACM11: USB ACM device
1-3.4.4:1.0: ttyACM12: USB ACM device
1-3.4.4:1.2: ttyACM13: USB ACM device
1-3.4.4:1.4: ttyACM14: USB ACM device
1-3.4.4:1.6: ttyACM15: USB ACM device

По данным из первой таблицы ясно, что нумерация после ttyACM даётся относительно сортировки в первом столбце цифр, как сделать чтобы нумерация давалась исходя из сортировки во втором ?
Уже понятно что копать надо в сторону udev, но как создать универсальное правило?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21432
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сортирка имен USB устройств

Сообщение Bizdelnick »

Вопрос решается по-другому, поскольку нумерация зависит исключительно от порядка инициализации устройств, а не от того, как они подключены. Ориентироваться лучше на информацию, которую сообщает о себе само устройство, поскольку она не меняется при перезагрузках и отключении/подключении. Если устройства идентичны, то отличаются они только серийным номером. Соответственно можно сделать симлинк, включающий в своё имя серийный номер. Правило для этого должно быть примерно такое:

Код: Выделить всё

KERNEL=="ttyACM*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="<VID>", ATTRS{idProduct}=="<PID>", SYMLINK+="modem-$attr{serial}"
Вместо <VID> и <PID>, понятное дело, надо подставить реальные VID и PID.
P. S. Правило не проверял, работоспособности не обещаю. Рассматривайте его как отправную точку, а не конечное решение.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX

Re: Сортирка имен USB устройств

Сообщение Olej »

nordonsimf писал(а):
08.06.2016 22:16
Есть проблема с правильной выдачей имен устройств в линуксе ttyACM[X]. В наличии странная штука под название Симбанк,по сути это хаб модемов, подключаемых к компьютеру через USB Устройства при каждой следующей загрузке хаотично перемешиваются и их распорядок не соответствует слотам на самом устройстве. Необходимо чтобы независимо от места подключения (юсб порт) устройство получало свое уникальное имя.

Уже понятно что копать надо в сторону udev, но как создать универсальное правило?

Как вам уже подсказали, дело не в "сортировке", а в порядке инициализации ваших устройств.
Они что, действительно инициализируеются в хаотическом порядке, наперегонки - кто быстрее инициализируется?
Тогда это какая-то недоработка в архитектуре вашего проекта, оборудования.
Но начните с того, что посмотрите программный код модуля ядра вашего устройства (cdc_acm, как я понимаю - это самый старый модуль поддержки USB-модемов из 3-х существующих) - разобраться что там...
Дальше можете писать правила UDEV (как подсказали) - это должно помочь... (если ваши имена ttyACM* создаёт UDEV, а не сам модуль cdc_acm ... в чём я, вообще то, сомневаюсь - модуль очень старый).
А можете в своей специальной программе ловить широковещательные сообщения ядра по сокету netlink (что и делает UDEV) и на них реагировать.

Одним словом, задача у вас не так и простая...
А никакая сортировка вам не поможет ... в каком контексте и для кого вы хотите "сортировать"?

P.S. Ваша ситуация похожа на подсистему ZAPTEL/DAHDI, которая стала уже стандартом de facto в софт-телефонных свичах (Asterisk, FreeSWITCH, YATE, ...) - там они для синхронных каналов E1/T1/J1 вынуждены создавать такой же пул последовательных имён.
Только ваши разработчики оказались глупее :laugh:
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Сортирка имен USB устройств

Сообщение s.xbatob »

Так вроде бы всё уже сделано, даже в Дебиане.
Загляните в /dev/serial/by-*
Спасибо сказали: