Привязка ttyUSBx для OSCAM

Автор: | 13.02.2015

udevПривет. Эта заметка по большей части является продолжением предыдущей о Установке OSCAM в Linux.
Как известно oscam обращается к локальным кардридерам через /dev/ttyUSBx где х-какая-либо цифра начиная с нуля. ttyUSB0, ttyUSB1, и так далее. Все бы ничего, но как правило после перезагрузки номера кардридеров меняются и получается каша, ничего не работатет. Решение проблемы — в привязке конкретного USB-устройства к конкретному ttyUSB. Вернее, даже не так. Решение в отвязке от имен ttyUSBx и привязке к каким нибуть постоянным и понятным символьным именам для удобочитаемости. Например /dev/reader_1, /dev/reader_ntv и так далее. Погуглив на тему udev стало понятно что проще всего привязать phoenix-ридеры к определенным симлинкам по серийному номеру. А теперь составляем себе план.))
1. Нумеруем свои ридеры произвольным способом. Бумажками, наклейками, маркером, etc.
2. Определяем серийный номер каждого из ридеров и записываем себе на бумашку.
3. Составляем файл правил правил нумераций наших девайсиков в /etc/udev/rules.d/
План есть. Курим и приступаем к реализации.)

Кардридеры пронумеровали и записали на бумажке список. Теперь вычисляем серийники ридеров путем подключения их по одному. Для поиска серийника используем утилиту udevadm. Поехали.

Команда: udevadm info --query=property --name=ttyUSB0

[code]# udevadm info —query=property —name=ttyUSB0
DEVLINKS=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AD0223LU-if00-port0 /dev/serial/by-path/pci-0000:00:1d.0-usb-0:1.1:1.0-port0
DEVNAME=/dev/ttyUSB0
DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0/ttyUSB0/tty/ttyUSB0
ID_BUS=usb
ID_MODEL=FT232R_USB_UART
ID_MODEL_ENC=FT232R\x20USB\x20UART
ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC
ID_MODEL_ID=6001
ID_PATH=pci-0000:00:1d.0-usb-0:1.1:1.0
ID_PATH_TAG=pci-0000_00_1d_0-usb-0_1_1_1_0
ID_REVISION=0600
ID_SERIAL=FTDI_FT232R_USB_UART_AD0223LU
ID_SERIAL_SHORT=AD0223LU
ID_TYPE=generic
ID_USB_DRIVER=ftdi_sio
ID_USB_INTERFACES=:ffffff:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=FTDI
ID_VENDOR_ENC=FTDI
ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
ID_VENDOR_ID=0403
MAJOR=188
MINOR=0
SUBSYSTEM=tty
USEC_INITIALIZED=9757069977[/code]

В списке видим ID_SERIAL_SHORT=AD0223LU. Именно по этому свойству ID_SERIAL_SHORT и значению серийников мы и будем идентифицировать наши кардридеры. Нормально. Записали и поехали дальше.
Такую операцию проделываем со всеми ридерами по очереди.
Когда список готов, переходим к созданию файла правил для менеджера устройств udev.
Создаем пустрой файл в /etc/udev/rules.d/

[code]nano /etc/udev/rules.d/phoenix.rules[/code]

Требования к файлу:
1. Имя файла может быть произвольное, единственное условие — расширение должно быть обязательно .rules. Иначе udev при старте проигнорирует ваш набор правил.
2. Правила можно располагать в одну строку разделяя запятыми пары ключ=»значение».

Более подробно обо всех атрибутах использующихся в правилах можно почитать тут

Итак. Пишем первое правило для ридера:
SUBSYSTEMS=="tty", ENV{ID_VENDOR}=="FTDI", ENV{ID_SERIAL_SHORT}=="AD0223LU", SYMLINK+="reader_1"
где:
SUBSYSTEM — подсистема которой соответствует устройство. В нашем случае — tty
ENV{ID_VENDOR} — Свойство устройства как оно видно при выводе команды udevadm info. В нашем случае «FTDI».
ENV{ID_SERIAL_SHORT} — Свойство устройства. Сокращенный серийный номер.
SYMLINK — Симлинк. Имя файла как оно будет видно в директории /dev/

Этим правилом мы говорим udev что мы хотим чтобы при обнаружении устройства tty с именем производителя «FTDI» и серийным номером «AD0223LU» в каталоге /dev был создан симлинк с именем reader_1.

При этом нам уже неважно какое имя в текущий момент будет иметь устройство ttyUSB0, ttyUSB5 и т.д. В в oscam.server мы будем обращаться к устройству по симлинку /dev/reader_1/.
Каждой отдельной строкой в файле добавляем все нужные нам ридеры. Сохраняем файл и делаем рестарт udev.

[code]# service udev restart
udev stop/waiting
udev start/running, process 31096
#[/code]
Теперь достаточно отключить свои устройства, подключить заново и посмотреть сработал ли наш файл правил.
[code]# ls /dev/ | grep reader
reader_1
reader_2
#[/code]

Порядок. в принципе задача решена. Теперь можно перезагружать сервер, подключать ридеры к различным USB-портам или хабам, но определенный ридер с определенным серийным номером всегда будеть иметь тот симлинк который прописан в правилах.

Удачной настройки. Пока.)

Привязка ttyUSBx для OSCAM: 2 комментария

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *