Aller à la recherche

UDEV : La gestion des péripheriques sous linux

Au branchement ou débranchement d'un périphérique, le kernel envoi un uevent à udev, qui va en fonction des arguments qui lui est fourni va aller chercher dans le dossier rules.d les informations correspondantes.

Petite introduction pour ce premier billet sur udev

Gestion des périphériques grâce à udev

Si udev trouve une règle qui s'applique aux informations de l'uevent, il :

  • applique les actions définies dans les règles
  • charge les modules éventuellement
  • crée les différents nœuds liens symboliques dans le dossier /dev

Un Uevent

l'uevent est l'événement provenant du kernel. Il est envoyé à chaque (dé)branchement d'un périphérique. Il contient :

  • les informations sur la nature du périphérique (ex : périphérique réseau, usb, block)
  • l'action effectuée : Branchée ou Débranchée
  • les attributs de ce périphérique (ex : marque, version, adresse mac, model...)

Configuration udev

La configuration d'udev se fait grâce au répertoire /etc/udev/. Celui-ci contient le fichier udev.conf qui est le fichier de configuration principale. Ainsi que le répertoire rules.d qui lui contient toutes les règles à appliquer suivant les événements udev.

Fichiers rules d'udev

Le nommage des fichiers se fait comme ceci : priorité_categorie.rules ex : 90-usb.rules. Les règles (une par ligne) contenues dans les fichiers sont organisées sur un système de clé/opérateur/valeur séparées par des virgules.

Exemple de fichier qui permet de définir le nom d'un périphérique réseau qui à une adresse mac précise. ACTION=="add", SUBSYSTEM=="net", DRIVERS="?*", ATTR{address}=="00:11:22:33:44:00", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Les clés principales :

  • ACTION : l'action à effectuer add, remove
  • KERNEL : définit le nom du périphérique d’après les fonctionnalités du kernel (ex eth*)
  • SUBSYSTEM : sous-système contenant le périphérique
  • DRIVER : pilote du périphérique
  • NAME : nom unique du nœud associé au périphérique
  • SYMLINK : nom alternative au périphérique (lien symbolique)
  • ATTR{nom} : attribut sysfs ( product , model , size , )
  • PROGRAM : permet l'appel d'un programme externe lors de l’interprétation de la règle
  • ENV{nom} : variable d'environnement (modification ou lecture)

Opérateurs :

Il existe plusieurs opérateurs

  • == égalité
  • != inégalité
  • = fixe la valeur
  • += concaténé à la fin
  • := affectation définitive et empêche toute modification futur

Afficher en temps réel les uvents envoyés par le kernel udevadm monitor --property

Au branchement d'une clé usb retourne

UDEV  [7255.056202] add      /devices/pci0000:00/0000:00:01.0/0000:03:00.0/usb2/2-3/2-3:1.0/host9/target9:0:0/9:0:0:0/block/sdh (block)
.ID_FS_TYPE_NEW=vfat
ACTION=add
DEVLINKS=/dev/disk/by-id/usb-Kingston_DataTraveler_G3_60A44C41388DFD712986245C-0:0 /dev/disk/by-path/pci-0000:03:00.0-usb-0:3:1.0-scsi-0:0:0:0 /dev/disk/by-label/PHOTOS /dev/disk/by-uuid/0465-7FA7
DEVNAME=/dev/sdh
DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:03:00.0/usb2/2-3/2-3:1.0/host9/target9:0:0/9:0:0:0/block/sdh
DEVTYPE=disk
ID_BUS=usb
ID_DRIVE_THUMB=1
ID_FS_LABEL=PHOTOS
ID_FS_LABEL_ENC=PHOTOS
ID_FS_TYPE=vfat
ID_FS_USAGE=filesystem
ID_FS_UUID=0465-7FA7
ID_FS_UUID_ENC=0465-7FA7
ID_FS_VERSION=FAT32
ID_INSTANCE=0:0
ID_MODEL=DataTraveler_G3
ID_MODEL_ENC=DataTraveler\x20G3\x20
ID_MODEL_ID=1643
ID_PATH=pci-0000:03:00.0-usb-0:3:1.0-scsi-0:0:0:0
ID_PATH_TAG=pci-0000_03_00_0-usb-0_3_1_0-scsi-0_0_0_0
ID_REVISION=1.00
ID_SERIAL=Kingston_DataTraveler_G3_60A44C41388DFD712986245C-0:0
ID_SERIAL_SHORT=60A44C41388DFD712986245C
ID_TYPE=disk
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=Kingston
ID_VENDOR_ENC=Kingston
ID_VENDOR_ID=0951
MAJOR=8
MINOR=112
SEQNUM=3481
SUBSYSTEM=block
TAGS=:systemd:
USEC_INITIALIZED=7255055818

Voilà pour une première partie concernant l'udev.

La discussion continue ailleurs

URL de rétrolien : https://www.binsp.net/?trackback/12

Fil des commentaires de ce billet

Page top