The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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. Но было бы интересно понять ваши, так как в лоб они у меня не работают :(




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру