Автор Тема: Как закрепить имя /dev/video0 за конкретным девайсом?  (Прочитано 6053 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Vena

  • Собеседник
  • ****
  • Сообщений: 375
    • Просмотр профиля
По аналогии с решением по сетевым адаптерам (Изменение именования сетевых адаптеров в Debian) нужно сделать жесткое закрепление файла подключения за конкретным девайсом на шине PCI, а именно имеется, например, четырёхчиповый видеозахват. Всё настроено и работает. Стоит добавить еще плату видео захвата, всё разлетается, а именно файлы устройств после загрузки соответствуют уже другому девайсу.
Нашел решение типа такого (http://karapuzz.blogspot.com/2009/12/blog-post.html). Рекомендуется править файл udev. Команда
udevadm info -a -p $(udevadm info -q path -n /dev/video0)выдаёт много инфы, однозначных значений не могу выявить, а именно ATTRS{vendor} и ATTRS{device} несколько для каждого video*
Udevadm info 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 '/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/0000:03:0d.0/video4linux/video1':
    KERNEL=="video1"
    SUBSYSTEM=="video4linux"
    DRIVER==""
    ATTR{name}=="saa7130[1] video (Philips EUROP"
    ATTR{index}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/0000:03:0d.0':
    KERNELS=="0000:03:0d.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="saa7134"
    ATTRS{vendor}=="0x1131"
    ATTRS{device}=="0x7130"
    ATTRS{subsystem_vendor}=="0x1131"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{class}=="0x048000"
    ATTRS{irq}=="23"
    ATTRS{local_cpus}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{modalias}=="pci:v00001131d00007130sv00001131sd00000000bc04sc80i00"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

  looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0':
    KERNELS=="0000:02:0a.0"
    SUBSYSTEMS=="pci"
    DRIVERS==""
    ATTRS{vendor}=="0x3388"
    ATTRS{device}=="0x0021"
    ATTRS{subsystem_vendor}=="0x0000"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{class}=="0x060400"
    ATTRS{irq}=="0"
    ATTRS{local_cpus}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{modalias}=="pci:v00003388d00000021sv00000000sd00000000bc06sc04i00"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}=="1"

  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}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{modalias}=="pci:v00008086d0000244Esv00000000sd00000000bc06sc04i00"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}=="1"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

для video0 :
Udevadm info 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 '/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/0000:03:0c.0/video4linux/video0':
    KERNEL=="video0"
    SUBSYSTEM=="video4linux"
    DRIVER==""
    ATTR{name}=="saa7130[0] video (Philips EUROP"
    ATTR{index}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/0000:03:0c.0':
    KERNELS=="0000:03:0c.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="saa7134"
    ATTRS{vendor}=="0x1131"
    ATTRS{device}=="0x7130"
    ATTRS{subsystem_vendor}=="0xffff"
    ATTRS{subsystem_device}=="0xffff"
    ATTRS{class}=="0x048000"
    ATTRS{irq}=="22"
    ATTRS{local_cpus}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{modalias}=="pci:v00001131d00007130sv0000FFFFsd0000FFFFbc04sc80i00"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

  looking at parent device '/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0':
    KERNELS=="0000:02:0a.0"
    SUBSYSTEMS=="pci"
    DRIVERS==""
    ATTRS{vendor}=="0x3388"
    ATTRS{device}=="0x0021"
    ATTRS{subsystem_vendor}=="0x0000"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{class}=="0x060400"
    ATTRS{irq}=="0"
    ATTRS{local_cpus}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{modalias}=="pci:v00003388d00000021sv00000000sd00000000bc06sc04i00"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}=="1"

  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}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{modalias}=="pci:v00008086d0000244Esv00000000sd00000000bc06sc04i00"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}=="1"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

В общем не ясно каким из ATTRS{vendor} и ATTRS{device} воспользоваться? Там вообще значения для разных video одинаковы :( Или как вообще решить озвученную проблему?
« Последнее редактирование: Вторник, 15 Ноября, 2011, 11:25:25 от vovka »

vovka

  • Global Moderator
  • Про
  • *****
  • Сообщений: 787
    • Просмотр профиля
    • www.nixzeya.ru.net
Re: Как закрепить имя /dev/video0 за конкретным девайсом?
« Ответ #1 : Вторник, 15 Ноября, 2011, 12:01:52 »
Предполагаю, если девайсы одинаковы, то проблем не должно быть - на каждое устройство ядро загрузит свой экземпляр драйверов (модулей). Есть прикладная программа как-то различает устройства - максимум, проблема будет в перескакиваниях видеовходов с 1-го на 5-й и наоборот.
 
Что касается именований, здесь примерно описан процесс:
http://www.mythtv.org/wiki/Device_Filenames_and_udev

Для условий udev вероятнее всего можно взять и другие параметры нежели ATTRS{vendor} и ATTRS{device}.

Цитировать
В общем не ясно каким из ATTRS{vendor} и ATTRS{device} воспользоваться?
Это наверно нужно методом тыка изучить.
*nix - свобода мысли, свобода творчества!