Solução sem regras do Udev
Existe uma chance de que o video4linux já forneça nomes de dispositivos estáveis. Você pode querer verificar os diretórios /dev/v4l/by-id/
e /dev/v4l/by-path/
para isso. Conecte seus dispositivos a diferentes portas USB e compare os nomes de dispositivos criados para garantir que eles sejam realmente estáveis.
Solução com regras do Udev
Caso contrário, depende se seus dois dispositivos aparentemente idênticos têm pelo menos um número de série diferente, que é acessível pelo udev. Você pode descobrir isso usando o número "Bus" e "Device" corretos da sua saída lsusb
no seguinte comando:
udevadm info --attribute-walk /dev/bus/usb/003/005
Se houver algum tipo de saída como o seguinte no primeiro bloco de pares de chave / valor e o serial for diferente entre os dois dispositivos, você poderá usá-lo em suas regras do udev:
ATTR {serial} == "68974689267119892"
Suas regras do udev podem ser assim:
SUBSYSTEM=="usb", ATTR{serial}=="68974689267119892", ATTR{idVendor}=="1871", ATTR{idProduct}=="0101", NAME="video10"
SUBSYSTEM=="usb", ATTR{serial}=="12345698798725654", ATTR{idVendor}=="1871", ATTR{idProduct}=="0101", NAME="video11"
SUBSYSTEM=="usb", ATTR{idVendor}=="046d", ATTR{idProduct}=="0807", NAME="video12"
Se houver um número não serial (ou similar), só vejo a seguinte possibilidade: você teria que garantir que seus dispositivos permanecessem sempre conectados nas mesmas portas USB. Nesse caso, você poderia usar regras como estas:
SUBSYSTEM=="usb", KERNEL=="2-3", ATTR{idVendor}=="1871", ATTR{idProduct}=="0101", NAME="video10"
SUBSYSTEM=="usb", KERNEL=="2-4", ATTR{idVendor}=="1871", ATTR{idProduct}=="0101", NAME="video11"
SUBSYSTEM=="usb", KERNEL=="2-2", ATTR{idVendor}=="046d", ATTR{idProduct}=="0807", NAME="video12"
Você teria que descobrir quais KERNEL
IDs usar novamente executando o comando udevadm
mencionado acima e procurando pelo par% chave / valor KERNEL
.
Notas secundárias
Pode ser melhor / melhor apenas criar novos links simbólicos em vez de novos nomes de dispositivos, e talvez até mesmo agrupá-los em um diretório comum:
SUBSYSTEM=="usb", KERNEL=="2-3", ATTR{idVendor}=="1871", ATTR{idProduct}=="0101", SYMLINK+="foo/video10"
A regra anterior, por exemplo, criaria um link simbólico de dispositivo em /dev/foo/video10
.
Eu provavelmente também nomearia simplesmente o arquivo de regras name-video-devices.rules
, ou seja, deixando o número inicial fora. Provavelmente não importa quando as regras são executadas, portanto, não é necessário usar uma prioridade (bastante alta) de 25.