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}"