Как назначить пользовательское имя последовательному порту USB CDC?

Я использую USB-модем с моей платой Linux, и Kernel создает 4 виртуальных (CDC-ACM) последовательных порта при подключении модема. и имя последовательного порта asr как ttyUSB0 - ttyUSB3. Но эти присвоенные имена не всегда одинаковы. Если я уже подключил некоторые другие устройства USB CDC, то Kernel назначает другой набор имен, например ttyUSB4-ttyUSB7. Такое поведение влияет на мою программу, мне приходится каждый раз менять номера портов.

Так есть ли способ назначить пользовательские имена для портов USB CDC модема, на основе идентификатора устройства модема?

1 ответ

Решение

Вы можете использовать правило udev: найдите производителя и идентификатор продукта вашего устройства (вы можете получить его с помощью lsusb команда) затем создайте файл /etc/udev/rules.d./99-serial.rulesс правилом (замените idVendor, idProduct и NAME соответственно):

SUBSYSTEM=="tty", ATTRS{idVendor}=="O123", ATTRS{idProduct}=="0123", NAME="chooseSomeName"

Отключите и снова подключите устройство. Теперь он должен быть доступен через /dev/chooseSomeName

Согласно https://wiki.ubuntuusers.de/udev/, метод Эмилиена обесценивается (по крайней мере, в версии Ubuntu ≥ 13.10):

Die Vergabe von eigenen Namen mit NAME= ist nur für Netzwerkschnittstellen eth* sinnvoll. Bis Ubuntu 13.04 имеет значение zwar auch andere Geräte noch umbenannt werden, dies führt aber zu Inkonsistenzen mit dem Kernel. Daher unterstützt Ubuntu ab 13.10 nur noch das das Umbenennen von eth*-Geräten.

неряшливый перевод:

Выделение собственных имен с помощью NAME= разумно только для сетевых интерфейсов eth*. До Ubuntu 13.04 также можно переименовывать другие устройства, но это приводит к несогласованности с ядром. По этой причине Ubuntu 13.10 и более поздние версии позволяют переименовывать только eth *-устройства [с использованием тега NAME=].

Вместо этого используйте команду SYMLINK, например

SUBSYSTEM=="tty", ATTRS{idVendor}=="O123", ATTRS{idProduct}=="0123", SYMLINK="chooseSomeName"

который создаст символическую ссылку на устройство (также в папке /dev/).

Другие вопросы по тегам