udev для назначения известных символических ссылок для идентичных последовательных устройств USB

У меня есть два (и, возможно, в будущем, больше) последовательные USB-устройства, которые идентичны (вплоть до серийного номера, к сожалению) – они на самом деле являются шахтерами BTC. В настоящее время они заканчиваются как ttyUSBX где X – 0, 1 или 2, так как есть еще одно несвязанное USB-устройство (также не нужно беспокоиться).

Я хотел бы написать правило udev, которое будет назначать им предсказуемые имена в /dev , например /dev/miner0 где нуль является инкрементирующим целым числом. Меня не волнует, какая из них заканчивается, но мне нужно, чтобы они находились в пределах предсказуемого диапазона, который не изменится.

В настоящее время у меня есть:

 SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="miner%n" 

Это довольно близко, так как я в конечном итоге с именами, как я хочу. Единственная проблема заключается в том, что шахтеры и третье устройство иногда могут появляться в произвольном порядке, я мог бы получить два из miner0 , miner1 и miner2 , но я никогда не знаю, какие два (без ручного поиска). Если я добавлю больше неинтернетных последовательных устройств (что возможно), это усугубит проблему.

Я нашел ссылку на %e которая выглядела так, как будто она сделала именно то, что я хотел, но она больше не существует .

Как я могу назвать эти устройства предсказуемыми именами? Я бы предпочел не привязывать их к их местоположению на шине USB, если это возможно.


Дополнительная информация / справочная информация

Стоит отметить, что я не беспокоился о том, что такое имена, просто они известны и остаются неизменными, даже если / когда устройство подключается к другому USB-разъему. Я просто забуду всю вещь udev и использую записи в /dev/serial/by-id , но поскольку у них одинаковый серийный номер, есть только один из них!

Также стоит упомянуть, что причина для этого заключается в том, что в программном обеспечении для горного дела должен быть указан список устройств для зондирования и поиска. Я могу просто заставить его делать все (в основном он просто находит всех действительных шахтеров в диапазоне ttyUSB* ), но это раздражает не-miner-устройство. Поэтому мне нужны имена известных шахтеров заранее, поэтому я могу настроить его, чтобы использовать только те. К сожалению, он не примет подстановочный знак (так что просто говорить об использовании /dev/miner* похоже, не может быть и речи), следовательно, эта проблема.

2 Solutions collect form web for “udev для назначения известных символических ссылок для идентичных последовательных устройств USB”

Это непроверено в сочетании:

Добавьте правило udev в IMPORT{program}="/usr/local/sbin/unique-num /run/miner-counter 0 MINER_NUM" для ваших шахтеров.

Тогда вы можете использовать простой сценарий оболочки, что-то вроде этой несколько проверенной программы:

 #!/bin/sh if [ $# -ne 3 ]; then echo "Usage: $0 data-file initial var-name" >&2 exit 1 fi datfile="$1" lockfile="$1.lck" initial=$2 key="$3" ( flock -x 9 num=$initial if [ -e "$datfile" ]; then read -r num < "$datfile" fi next=`expr $num + 1`; echo $next > "$datfile" echo "$key=$num" ) 9> "$lockfile" 

Затем вы можете использовать эту переменную окружения udev, чтобы назвать своих шахтеров.

Вопрос уже имеет принятый ответ, но я решил поделиться своим вариантом решения, предоставленного derobert .

Мои требования были несколько разными – в дополнение к предоставлению «инкрементных» номеров индексов новым устройствам – я хотел восстановить индексы, которые были оставлены устройствами, которые были удалены из системы.

Правило udev для настройки переменной окружения будет выглядеть примерно так:

 IMPORT{program}="/usr/local/sbin/unique-num /dev miner MINER_NUM" 

В моем решении я не использую файл для отслеживания индекса, я просто перебираю существующую символическую ссылку и нахожу первый доступный индекс:

/usr/local/sbin/unique-num :

 #!/bin/bash if [ $# -ne 3 ]; then echo "Usage: $0 location prefix var-name" >&2 exit 1 fi location="$1" prefix="$2" key="$3" needindex=1 index=0 while [ $needindex -eq 1 ] do if [ ! -e $location/$prefix$index ]; then needindex=0 echo "$key=$index" else (( index++ )) fi done 

Это, конечно же, распечатает var-name с первым доступным индексом, например, если эта символьная ссылка уже существует:

 miner0 miner1 miner2 

и затем miner1 отсоединяется от системы – мы остаемся с:

 miner0 miner2 

Запуск скрипта вернется:

 MINER_NUM=1 

… так как это теперь первый доступный индекс .

  • Проблема с Pernicious USB-stick stall. Возврат исправления обходного пути?
  • Как читать lsusb?
  • Запустите правило udev для флэш-накопителя USB, когда компьютер запущен с вставленным устройством
  • USB-устройства не распознаются, когда ноутбук работает от аккумулятора
  • Зачем нам нужен драйвер usbkbd, когда есть usbhid?
  • Беспроводная сеть
  • формат usb linux
  • Ядро распознает USB-устройство, но затем я не могу найти его в / sys или / dev
  • Клавиши-модификаторы не могут быть сопоставлены с обычными клавишами на клавиатуре USB с udev
  • Как сбросить USB-трафик?
  • Постоянно отключать неисправные порты USB в Linux
  • Interesting Posts

    Не удалось удалить libglib2.0-0 из Software Center

    Что произойдет, если случайно переместить мягкую ссылку, а затем «/»?

    Аудит Linux: скажите мне, какие IP-адреса были установлены

    Как создать скрипт bash до тех пор, пока не будет установлен pendrive?

    Префикс каждого аргумента с -o в BASH

    Копирование содержимого удаленного файла в локальный буфер обмена через PuTTY

    Что может быть причиной задержки между запуском passwd и возможностью входа с этим паролем?

    Как я могу использовать tee и logger -t "some tag:"?

    Проверка совместимости основных загрузок и старых систем GNU / Linux

    Есть ли команда, чтобы посмотреть, есть ли тепловой отсек в моем ноутбуке?

    Какова цель оболочки uucico на HP-UX, Solaris и, возможно, других Unix-разновидностях?

    Почему элемент массива, построенный с помощью `readarray`, получает фиктивный` \ n`, когда он заключен в двойные кавычки?

    Большая проблема: rpm empty db, установка V3 RSA / SHA1 Подпись, клавиша BAD, ошибка YumRepo

    рыба: Неизвестная команда "abbr"

    Нужна команда для отображения эха «успех»

    Linux и Unix - лучшая ОС в мире.