Como posso forçar os dispositivos USB a manter o mesmo arquivo de dispositivo mesmo depois de travar e serem redefinidos?

2

Eu tenho 3 webcams USB e 3 Arduino's conectados no mesmo computador. Na inicialização, eles são rotulados como /dev/videoN (N vai de 0 a 2) e /dev/ttyACMN (N vai de 0 a 2). Até agora tudo bem.

O problema é quando algo dá errado com um dos dispositivos (isto é, o Arduino, seu IDE ou o programa de captura de vídeo trava). Em seguida, o dispositivo recebe um novo arquivo de dispositivo (como /dev/video3 ou /dev/ttyACM3 ). Gostaria de manter o mesmo arquivo de dispositivo.

Conectar e desconectar o dispositivo não ajuda; nem fechar todos os programas que deveriam interagir com ele. Se o problema ocorrer uma segunda vez, então outro arquivo de dispositivo será criado com um número ainda maior.

É como se um identificador para o arquivo de dispositivo antigo estivesse flutuando em algum lugar e impedindo que o mesmo arquivo de dispositivo fosse reutilizado. No entanto, o próprio arquivo de dispositivo original (digamos, /dev/ttyACM0 ) não existe mais ou, pelo menos, não aparece em uma listagem de diretórios.

A única maneira que resolvi resolver esse problema é reinicializar. Em vez de reinicializar, existe uma maneira de limpar quaisquer referências remanescentes ao arquivo de dispositivo original para que ele possa ser reutilizado? Ou, para forçar uma limpeza total de todos os dispositivos USB e renumerar a partir do zero?

    
por cxrodgers 05.03.2015 / 23:16

2 respostas

1

Eu percebi isso. Basicamente, quando o nome do dispositivo não é reutilizado, isso significa que algum processo ainda está usando o nome do dispositivo antigo. Eu pensei que estava fechando tudo, mas ainda havia alguns processos em execução mesmo depois de fechar todas as janelas visíveis.

Veja como encontrar o processo que está usando o nome do dispositivo:

lsof | grep /dev/ttyACM0

Então, depois que eu matar esse processo e desligar o dispositivo, o nome do dispositivo será reutilizado conforme desejado.

    
por cxrodgers 19.03.2015 / 00:35
0

Você pode evitar muita dor de cabeça quando precisar matar um processo toda vez, escrevendo udev regras para adicionar links simbólicos para esses dispositivos.

Assim, sempre que o dispositivo desaparecer, o link simbólico morrerá com ele. Então, se você reconectar seu dispositivo, ele criará um novo nó com o número incrementado ex: /dev/ttyACM1 . No entanto, o link é criado no mesmo caminho.

Veja Como distinguir entre USB idêntica -para-serial?

    
por user.dz 05.06.2015 / 02:21