Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Sorties de root > Udev à la rescousse !

Udev à la rescousse !

Vos périphériques USB sous contrôle

vendredi 13 juillet 2012, par Laurent Ba.

1- Executer un script

Voici un petit "Tip" sur Udev qui m’a bien rendu service,
pour avoir une confirmation visuel que mes 8 périphériques soient
bien chargés par le pilote sur la Raspberry Pi et éviter ainsi, que tout bugue par la suite.

Udev est une solution simple et efficace en espace utilisateur. Il suffit de créer une petite règle qui exécute un programme quand un périphérique est branché ou débranché.

Exemple

En premier pour écrire un règle qui concerne le périphérique "/dev/ttyACMO" il va nous falloir des attributs

$ udevadm info -an /dev/ttyACM0
listing...
looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/tty/ttyACM0':
    KERNEL=="ttyACM0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0':
    KERNELS=="1-1.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="cdc_acm"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{bInterfaceClass}=="02"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bInterfaceProtocol}=="01"
listing...

Par défaut mon système utilise déjà 2 règles

$ ls /etc/udev/rules.d/
10-vchiq.rules 91-local.rules

Je vais en créer une troisième :

$ touch /etc/udev/rules.d/20-my_cdc_acm.rules

Et l’éditer comme ceci :

#/etc/udev/rules.d/20-my_cdc_acm.rules
ACTION=="add", SUBSYSTEMS=="usb", DRIVERS=="cdc_acm", RUN+="/usr/bin/driver_cdc_acm 2&>>/dev/null"
ACTION=="remove", SUBSYSTEMS=="usb", RUN+="/usr/bin/driver_cdc_acm 2&>>/dev/null"

J’ai pas besoin des logs, mais je trouve que c’est mieux pour l’exemple :)
vous remarquerez que je ne me suis pas embêté pour les attributs non plus et que j’ai placé mon script dans /usr/bin/.

Note : il est aussi possible de lancer un script avant le chargement du périphérique.

2- Ajouter des liens symboliques

Un autre "tip" sympa,
pour trouver son Arduino plus facilement, quand on en a marre de passer son temps à chercher son numéro avant de charger le code.
C’est simple il suffit de lui donner un joli nom.

Voici un exemple de règle pompé sans vergogne sur le site d’Arduino :

SUBSYSTEMS=="usb", ATTRS{product}=="FT232R USB UART", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="arduino arduino_$attr{serial}"
SUBSYSTEMS=="usb", ATTRS{product}=="ARDUINO NANO",    ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="arduino arduino_nano_$attr{serial}"

Vos commentaires

  • Le 15 juillet 2012 à 16:04, par Julien H. En réponse à : Udev à la rescousse !

    Merci pour cet article, cependant je ne comprends pas ce qui doit être modifié comme fichiers. Pouvez-vous préciser dans quels fichiers vous insérez ces lignes ?

    • Le 15 juillet 2012 à 17:42, par Laurent Ba. En réponse à : Udev à la rescousse !

      Bonjour, en fait il ne faut pas modifier un fichier, mais en créer un. Ce fichier sera notre règle udev. l’extension doit être (*.rules). Les fichiers sont pris en compte selon leurs ordres lexical, souvent ça n’a pas d’importance, mais c’est pour ca que par convention le nom commence par 10-... , 50-... , 30-... ,11-... etc.
      le répertoire qui contient les règles est /etc/udev/rule.d/.

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.