udev parece não estar funcionando corretamente para forçar o dispositivo usb a fixar a localização

3

Eu criei uma regra do udev para forçar meus dispositivos USB em pastas fixas em /dev/ (um, é uma webcam em /dev/video1 e o outro é um framegrabber em /dev/video0 ) Eu preciso fazer isso porque, por padrão, eu conecto webcam após o framegrabber no meu computador (até aí tudo bem) mas se eu reinicialize o sistema (enquanto eles ainda estiverem conectados) a webcam será atribuída a /dev/video0 e o framegrabber a /dev/video1 , o que levará à falha dos aplicativos que tentam usá-los como recursos de gravação (pipeline gstreamer, neste caso )

Eu coloco o 25-video-devices.rules em /etc/udev/rules.d/ e recarrego as regras do udev, até mesmo reinicio o serviço do udev, mas depois de reiniciar o sistema, o resultado ainda é o mesmo ...

SUBSYSTEMS=="usb", ATTRS{idVendor}=="5555", ATTRS{idProduct}=="3500", NAME:="video0", OPTIONS:="link_priority=100"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", NAME:="video1"

Parece que a regra do udev não funciona corretamente ou estou fazendo algo errado ou faltando alguma coisa?

Você pode me ajudar com isso?

p.s: recebi os IDs do fornecedor e do produto usando lsusb

    
por Sina Sh 09.01.2016 / 14:05

1 resposta

3

De man 7 udev (destacando por mim):

  

O kernel geralmente atribui nomes de dispositivos imprevisíveis baseados na ordem de descoberta. […] O nome de um nó de dispositivo não pode ser alterado pelo udev, apenas links simbólicos adicionais podem ser criados.

Em outras palavras, acho que você não poderá usar /dev/video0 ou /dev/video1 de forma confiável. Em vez disso, você deve criar e usar links simbólicos estáveis. Algo como o seguinte pode funcionar em vez disso:

KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="5555", ATTRS{idProduct}=="3500", SYMLINK+="myframegrabber"
KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", SYMLINK+="mywebcam"

Você usaria /dev/mywebcam e /dev/myframegrabber em seus aplicativos.

A propósito, como mencionado recentemente em uma resposta semelhante :

  

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.

    
por Chriki 09.01.2016 / 17:58