UDEV и двухголовые 'одинаковые' устройства., Kompik, 03-Июл-12, 12:34 [смотреть все]Здравствуй всезнающий ALL :) Имею систему Debian 2.6.32 и DVB карту с двумя или четырьмя тюнерами. Каждый тюнер нужно закрепить за конкретным номером.
Проблема в том, что для UDEV эти устройства абсолютно одинаковые, так как физически это одно PCI-e устройство. Теоретически, с помощью ENV можно было бы их пронумеровать по порядку. В интернете нашел небольшой пример на эту тему http://www.mythtv.org/wiki/Device_Filenames_and_udev#Example... # Create a symlinks for both tuners of Kworld device SUBSYSTEM=="dvb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="e399", ENV{kworld}!="two", ENV{kworld}="two", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter_kw1/%%s $${K#*.}'", SYMLINK+="%c" SUBSYSTEM=="dvb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="e399", ENV{kworld}=="two", ENV{kworld}="one", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter_kw2/%%s $${K#*.}'", SYMLINK+="%c" В целом данный пример работает, но я не хочу создавать симлинки. Я хочу иметь конкретное устройство под видом /dev/dvb/adapterX
Но строки типа нижеследующих, эффекта почему-то не имеют. SUBSYSTEM=="dvb", KERNELS=="0000:04:00.0", ENV{kworld}!="two", ENV{kworld}="one", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter1/%%s $${K#*.}'", NAME="%c", GROUP="video" SUBSYSTEM=="dvb", KERNELS=="0000:04:00.0", ENV{kworld}=="two", ENV{kworld}="one", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter2/%%s $${K#*.}'", NAME="%c", GROUP="video" Кто что думает по этому поводу? Как привязать карты?
|
- UDEV и двухголовые 'одинаковые' устройства., Дядя_Федор, 16:20 , 03-Июл-12 (1)
- UDEV и двухголовые 'одинаковые' устройства., Kompik, 18:50 , 03-Июл-12 (2)
Довольно необычное решение... Можете пояснить.. Это решение для трех двухголовых кард? Так как значение ENV{DEVPATH}=="*0000:05:00.0*" очень похоже на "адрес" карты в слоте ...P.S. Завтра попробую. > Была у нас подобная заморочка на двухголовых DVB-картах. Тоже воевали со знакомым. > :) > Вот Вам вариант, как проблема была решена (товарищем): > cat /etc/udev/rules.d/70-netap-dvb.rules > SUBSYSTEM=="dvb", ACTION=="add", ENV{DEVPATH}=="*0000:05:00.0*", NAME="dvb/adapter0$env{DVB_ADAPTER_NUM}/$env{DVB_DEVICE_TYPE}$env{DVB_DEVICE_NUM}" > SUBSYSTEM=="dvb", ACTION=="add", ENV{DEVPATH}=="*0000:04:00.0*", NAME="dvb/adapter1$env{DVB_ADAPTER_NUM}/$env{DVB_DEVICE_TYPE}$env{DVB_DEVICE_NUM}" > SUBSYSTEM=="dvb", ACTION=="add", ENV{DEVPATH}=="*0000:06:00.0*", NAME="dvb/adapter2$env{DVB_ADAPTER_NUM}/$env{DVB_DEVICE_TYPE}$env{DVB_DEVICE_NUM}"
- UDEV и двухголовые 'одинаковые' устройства., Дядя_Федор, 15:05 , 04-Июл-12 (3)
- UDEV и двухголовые 'одинаковые' устройства., ragus, 15:51 , 04-Июл-12 (4)
- UDEV и двухголовые 'одинаковые' устройства., Kompik, 16:47 , 04-Июл-12 (5)
>[оверквотинг удален] >> Можете пояснить.. >> Это решение для трех двухголовых кард? >> Так как значение ENV{DEVPATH}=="*0000:05:00.0*" очень похоже на "адрес" карты в слоте ... > да, верно. это для трех нетаповских карт, у которых две головы. по > идее, будет работать и на других двухголовых. > В linux имена устройств зависят от порядка их инициализации. В данном варианте > мы создаём свои отдельные имена. > поскольку карточки никто не переставляет местами, такое решение работает. более извращённые > варианты - завязываться на serial number продуктов или же на mac-адреса. > но в данном случае это не надо.Я попробовал в лоб ваше предложение, но к сожалению то ли он не заработало, то ли не мой случай. Сейчас у меня следующий набор карт: 1 PCI-e 1x - TBS6928 2 PCI-e 16x - NVIDIA 6800 3 PCI-e 1x - TBS 6984 (с 4 тюнерами) 4 PCI-e 1x - TBS 6280 (с 2 тюнерами) 5. PCI - SkyStar HD2 6. PCI - SkyStar HD2 7. PCI - SkyStar HD2 Соответственно все те что одноголовые, без проблем расставляются по местам. Главное не забыть закоментировать строчку в /lib/udev/rules.d/50-udev-default.rules "KERNEL=="dvb" ....." А вот с двух головыми наблюдается небольшая чехарда. Ваш пример, как я понимаю отлавливает адрес на PCI шине и привязывает его к номеру устройства. А вот работы с двух головостью я не нахожу. Если у вас три двух головые карты, то в системе получается шесть адаптеров. Если первая карта претендует на adapter0, вторая на adapter1 и третья на adapter2, то какие номера получают вторые головы этих адаптеров? И еще вопрос, какие свои имена вы создаете? adapter0-2? P.S. Сегодня выработал более менее устойчивые правила на базе MAJOR и MINOR. Но было бы интересно понять ваши, так как в лоб они у меня не работают :(
- UDEV и двухголовые 'одинаковые' устройства., ragus, 16:53 , 04-Июл-12 (6)
- UDEV и двухголовые 'одинаковые' устройства., Kompik, 16:59 , 04-Июл-12 (7)
>[оверквотинг удален] > drwxr-xr-x 2 root root 140 2012-06-30 03:05 adapter2 > drwxr-xr-x 2 root root 140 2012-06-30 03:05 adapter24 > drwxr-xr-x 2 root root 140 2012-06-30 03:05 adapter25 > drwxr-xr-x 2 root root 140 2012-06-30 03:05 adapter3 > drwxr-xr-x 2 root root 140 2012-06-30 03:05 adapter4 > drwxr-xr-x 2 root root 140 2012-06-30 03:05 adapter5 > drwxr-xr-x 2 root root 120 2012-06-30 03:05 adapter6 > drwxr-xr-x 2 root root 120 2012-06-30 03:05 adapter7 > drwxr-xr-x 2 root root 120 2012-06-30 03:05 adapter8 > соотв-но, обращаться надо к adapter02, adapter03 итд.Все, понял вашу логику. Если я правильно все понял, то по сути, для меня, это те же SYMLINK... Кстати, а остальные адаптеры, это что за карты?
|