web-dev-qa-db-fra.com

Définir l'ordre des circuits des appareils

J'ai deux appareils distants. Un dongle USB MCE distant que je souhaite utiliser et un périphérique intégré sur ma carte satellite PCI-E que je n'utilise ni ne souhaite utiliser.

Au démarrage, lirc attribue à ces périphériques un /dev/lircX périphérique (où X est un nombre). Prenez cette sortie dmesg comme exemple:

[...] rc rc0: lirc_dev: driver ir-lirc-codec (saa716x) registered at minor = 0
[...] rc rc1: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 1

Ci-dessus, ma télécommande MCE est sous /dev/lirc1. Le problème est que la prochaine fois que je démarrerai, ce sera /dev/lirc0. Cela rend la configuration des applications beaucoup plus difficile.

Je veux une de ces choses:

  1. Pour définir mon appareil mceusb en tant que/dev/lirc0 pour toujours, ou,
  2. Obtenez le même résultat en désactivant le traitement lirc du saa716x dispositif. Notez qu'il s'agit d'un module d'appareil multifonctionnel qui gère également la vidéo pour la diffusion TV.
    Liste noire saa716x n'est pas une option.
  3. D'une manière ou d'une autre "remettre les choses en ordre" après le démarrage ... J'ai déjà examiné cela avant, mais je n'ai aucune idée de la façon de déterminer quel module /dev/lircX est, et encore moins les échanger.

Je suis ouvert à tout. Vous devriez pouvoir voir ce que je recherche.

1
Oli

7.3.3.6. L'ordre de dénomination des appareils change de façon aléatoire après le redémarrage

Cela est dû au fait qu'Udev, par sa conception, gère les uevents et charge les modules en parallèle, et donc dans un ordre imprévisible. Cela ne sera jamais "corrigé". Vous ne devez pas vous fier à la stabilité des noms des périphériques du noyau. Au lieu de cela, créez vos propres règles qui créent des liens symboliques avec des noms stables basés sur certains attributs stables de l'appareil, tels qu'un numéro de série ou la sortie de divers utilitaires * _id installés par Udev. Voir Section 7.4, "Gestion des périphériques" et Section 7.5, "Configuration générale du réseau" pour des exemples.

Source: Linux From Scratch: 7.3. Présentation de la gestion des périphériques et des modules


  1. Vérifier les attributs du nœud cible et de ses nœuds parents

    udevadm info -a /dev/lirc1
    
  2. Vérifiez les variables d'environnement du nœud cible (quelque chose de différent qui peut être utilisé pour la correspondance des règles)

    udevadm info /dev/lirc1
    
  3. Créer un nouveau fichier de règles UDEV

    Sudo nano /etc/udev/rules.d/99-lirc-symlinks.rules

    #2 or only setup link for usb device
    ACTION=="add", KERNEL=="lirc?", ATTRS{idVendor}=="1934", ATTRS{idProduct}=="5168", SYMLINK+="lirc90"
    

    lirc90 qui est loin d'être atteint de toute façon.

  4. Règles de rechargement

    Sudo udevadm control -R
    
  5. Déclenchez une demande d'événement, rebranchez le périphérique USB ou vous devrez peut-être redémarrer.

    Sudo udevadm trigger
    
  6. Configurez votre application pour utiliser /dev/lirc90

Remarques:

  • Il existe de nombreuses façons d'implémenter une règle pour le même appareil. Je peux donc en écrire un autre pour le dongle USB:

    ACTION=="add", KERNEL=="lirc?", DRIVERS="mceusb", SYMLINK+="lirc90"
    
  • KERNELS, SUBSYSTEMS, DRIVERS, ATTRS recherche le chemin de développement vers le haut pour une correspondance. voir man udev.

1
user.dz