неразбериха с устройствами

Подключение, настройка и другие проблемы, возникающие со спутниковыми железками

Модератор: Модераторы разделов

Altaxar
Сообщения: 6
ОС: UBUNTU

неразбериха с устройствами

Сообщение Altaxar »

На сервере установлен Ubuntu(так как под ним легче всего смог настроить драйвера dvb) и 10 dvb pci карточек(разных фирм и производителей) на борту, драйвера нашлись, все работает.
Также устройства определяюся в /dev/dvb/adapter0 и до /dev/dvb/adapter9.
Но при перезагрузке сервера устройства меняют номера, тоесть работала картачка под /dev/dvb/adapter0, а стала /dev/dvb/adapter1 и так далие.
У меня же идет афтозагрузка VLC с указаниями на устройства. Вот и получается, что после перезагрузки сервера множество трансляцый не работает, приходится находить какая картачка под каким номером заново.
Подскажите как можно решить данную проблему...
Я програмист на С++, так что и програмное решение подайдет.
Думаю пока над решением через определение идекса устройства и содавать список ID устрохства = N в /dev/dvb/adapterX.
Каким образом можно определить какой индекс у устройсва в /dev/dvb/adapterХ ?
P.S. извеняюсь если не в той ветке создал пост.
Спасибо сказали:

Аватара пользователя
Gloomy
Сообщения: 339
Статус: сочувствующий

Re: неразбериха с устройствами

Сообщение Gloomy »

Создать правило для udev, привязав имя файла устройства карточки либо к уникальному идентификатору, либо к полному пути в /sys. По этому поводу: man udev, man udevadm. Если абсолютно все карточки разные (нет ни одной пары одинаковых), можно просто в нужном порядке грузить модули ядра для каждой карточки.
Спасибо сказали:

156
Сообщения: 234
ОС: OPENSUSE ALTLINUX

Re: неразбериха с устройствами

Сообщение 156 »

Цитирую чужой топик, авторство не моё, но проверено, работает. Только в некоторых последних версиях дистрибутивов немного поменялась команда. Разбивать по строкам не стал, так как долго и имхо тут не важно, последний файл я разбил, там всего две строки. Привожу сдесь, так как данный вопрос в инете не освещён, а на серьёзных системах часто требуется работа нескольких dvb карт, и только линуес может это без проблем реализовать.

Столкнулся с проблемой тут недавно. Несколько DVB карт при перезагрузке менялись местами в произвольном порядке. Весьма неприятное явление, если у Вас каналы идут с разных спутников. Они отваливаются напрочь.

Перерыл кучу всего и только в одном месте смог найти внятное объяснение. Через udev нужно было “зафиксировать” эти карты на своих местах. Проблема была в том, что у меня 4 карты из 5 одного производителя, что влечет за собой невозможность привязки по производителю.

Из положения вышел привязкой по другому параметру. Итак, смотрим параметры карт:
# udevinfo -a -n /dev/dvb/adapter0/frontend0 Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/class/dvb/dvb0.frontend0': KERNEL=="dvb0.frontend0" SUBSYSTEM=="dvb" DRIVER=="" looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:02:00.0': KERNELS=="0000:02:00.0" SUBSYSTEMS=="pci" DRIVERS=="b2c2_flexcop_pci" ATTRS{vendor}=="0x13d0" ATTRS{device}=="0x2103" ATTRS{subsystem_vendor}=="0x13d0" ATTRS{subsystem_device}=="0x2103" ATTRS{class}=="0x028000" ATTRS{irq}=="21" ATTRS{local_cpus}=="00000000" ATTRS{local_cpulist}=="" ATTRS{modalias}=="pci:v000013D0d00002103sv000013D0sd00002103bc02sc80i00" ATTRS{numa_node}=="-1" ATTRS{enable}=="1" ATTRS{broken_parity_status}=="0" ATTRS{msi_bus}=="" looking at parent device '/devices/pci0000:00/0000:00:1e.0': KERNELS=="0000:00:1e.0" SUBSYSTEMS=="pci" DRIVERS=="" ATTRS{vendor}=="0x8086" ATTRS{device}=="0x244e" ATTRS{subsystem_vendor}=="0x0000" ATTRS{subsystem_device}=="0x0000" ATTRS{class}=="0x060400" ATTRS{irq}=="0" ATTRS{local_cpus}=="00000000" ATTRS{local_cpulist}=="" ATTRS{modalias}=="pci:v00008086d0000244Esv00000000sd00000000bc06sc04i00" ATTRS{numa_node}=="-1" ATTRS{enable}=="1" ATTRS{broken_parity_status}=="0" ATTRS{msi_bus}=="1" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""

Соответственно, для других карт смотрим тоже-самое. Дальше “прибиваем” карту к устройству в dev. Создаем файл /etc/udev/rules.d/10-local.rules с содержимым:
SUBSYSTEM=="dvb", KERNELS=="0000:02:00.0", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter0/%%s $${K#*.}'", NAME="%c", GROUP="video"
SUBSYSTEM=="dvb", KERNELS=="0000:02:02.0", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter1/%%s $${K#*.}'", NAME="%c", GROUP="video"

Это для двух DVB-карт. Если надо больше – значит добавляем больше строк. После перезагрузки карты не перемешаются, а останутся зафиксированными.
Спасибо сказали: