web-dev-qa-db-fra.com

Comment puis-je forcer les périphériques USB à conserver le même fichier de périphérique même après leur crash et leur réinitialisation?

J'ai 3 webcams USB et 3 Arduino branchés sur le même ordinateur. Au démarrage, ils sont étiquetés /dev/videoN (N va de 0 à 2) et /dev/ttyACMN (N va de 0 à 2). Jusqu'ici tout va bien.

Le problème vient d’un problème sur l’un des périphériques (c’est-à-dire qu’Arduino, son IDE ou le programme de capture vidéo se bloque). Ensuite, un nouveau fichier de périphérique est attribué au périphérique (comme /dev/video3 ou /dev/ttyACM3). J'aimerais plutôt conserver le même fichier de périphérique.

Brancher et débrancher l’appareil n’aide pas; de même que la fermeture de tous les programmes qui devraient interagir avec elle. Si le problème se produit une seconde fois, un autre fichier de périphérique est créé avec un nombre encore plus élevé.

C'est comme si un descripteur de l'ancien fichier de périphérique flottait quelque part et empêchait la réutilisation du même fichier de périphérique. Cependant, le fichier de périphérique d'origine lui-même (par exemple, /dev/ttyACM0) n'existe plus ou du moins n'apparaît pas dans une liste de répertoires.

La seule façon pour laquelle j'ai résolu de résoudre ce problème est de redémarrer. Au lieu de redémarrer, existe-t-il un moyen de purger toute référence persistante au fichier de périphérique d'origine afin qu'il puisse être réutilisé? Ou, pour forcer une purge totale de tous les périphériques USB et renuméroter à partir de zéro?

2
cxrodgers

Je l'ai compris. Fondamentalement, lorsque le nom de périphérique n'est pas réutilisé, cela signifie qu'un processus utilise toujours l'ancien nom de périphérique. Je pensais que je fermais tout, mais certains processus étaient toujours en cours même après avoir fermé toutes les fenêtres visibles.

Voici comment trouver le processus utilisant le nom de périphérique:

lsof | grep /dev/ttyACM0

Ensuite, une fois le processus arrêté et le cycle redémarré, le nom du périphérique est réutilisé à volonté.

1
cxrodgers

Vous pouvez éviter beaucoup de maux de tête lorsque vous devez tuer un processus à chaque fois en écrivant des règles udev pour ajouter des liens symboliques à ces périphériques.

Ainsi, chaque fois que le périphérique disparaîtra, le lien symbolique mourra avec. Ensuite, si vous reconnectez votre périphérique, il crée un nouveau nœud avec un numéro incrémenté, par exemple: /dev/ttyACM1. Cependant, le lien est créé dans le même chemin.

Voir Comment faire la distinction entre des adaptateurs USB/série identiques?

0
user.dz