udev
Le système udev
udev est un système dynamique qui fait que le répertoire /dev ne contient
que les noms des périphériques physiquement présents.
Les composants du système udev
Le démon udevd
Il est normalement démarré et arrêté par le script /etc/init.d/udev.
$ ps -e | grep udev
Le pseudo système de fichiers sysfs
Le système udev trouve les informations dont il a besoin dans
l'arborescence /sys
Les fichiers de configuration
se trouvent dans le répertoire /etc/udev. Le principal fichier de
configuration est /etc/udev/udev.conf.
contient la configuration de base du système udev.
contient des définitions de variables : variable=valeur.
Une variable peut ne pas être définie s'il existe une valeur par défaut.
Les fichiers de règles
définissent des règles qu'il faut appliquer à la création de certains fichiers
périphériques.
chaque ligne d'un fichier contient au moins un couple clé valeur
Il existe deux types de clés : les clés comparatives et les clés de définition.
Les clés comparatives expriment une condition et les clés de définition une
action.
Les opérateurs
Les clés comparatives utilisent les opérateurs :
== pour tester l'égalité.
!= pour tester la différence.
Les clés de définition utilisent les opérateurs :
= pour affecter une valeur à une clé. La clé est réinitialisée à la nouvelle valeur.
La(es)
ancienne(s) valeur(s) de la clé est(sont) remplacée(s).
+= pour ajouter une valeur à une clé. Une clé peut donc contenir une liste de
valeurs.
:= pour affecter une valeur à une clé mais aussi en interdire la modification par
des règles qui seraient exécutées après.
Quelques clés
ACTION Définit l'évènement.
DEVPATH Définit le chemin d'accès au périphérique dans sysfs..
ENV{Variable} La variable d'environnement Variable.
KERNEL Définit le nom du périphérique attribué par le noyau.
NAME Définit le nom du fichier périphérique à créer dans /dev.
SUBSYSTEM Définit le type de périphérique (ie. block, character,usb...)
DRIVER Définit le nom du pilote (« driver ») du périphérique.
PROGRAM Nom d'un programme externe à exécuter.
RUN Nom d'un progamme supplémentaire à exécuter.
SYMLINK Nom(s) des liens symboliques à créer pour ce périphérique.
OWNER, GROUP, MODE Le propriétaire, le groupe et les droits du périphérique.
L'utilisation des jokers dans les valeurs.
Il est possible d'utiliser les jokers bien connus du shell : *, ? et [] pour donner
un modèle de chaîne de caractères.
Exple:
$ more 85-hdparm.rules
ACTION=="add", SUBSYSTEM=="block", KERNEL=="[sh]d[a-z]",
\RUN+="/lib/udev/hdparm"
Dans la clause KERNEL=="[sh]d[a-z]" le membre de droite signifie sda à sdz
ou hda à hdz.
Dans la clause NAME=="?*" le membre de droite signifie au moins un
caractère.
Quelques variables prédéfinies utiles
dans les règles.
Ces varaibles sont exprimées sous la forme %k ou $variable.
%k, $kernel Le nom noyau du périphérqiue.
%n, $number Le numéro du périphérique, ainsi %n vaut 3 pour sda3.
$driver Le nom du pilote (« driver ») du périphérique.
%M Le majeur du périphérique.
%m Le mineur du périphérique.
%E{variable}, La valeur de la variable d’environnement « variable ».
$e{variable}
La commande udevadm
permet de contrôler et d'interroger le système udev
udevadm commande [options] [arguments]
La commande indique quelle action udevadm doit exécuter.
Certaines commandes ont des options et des arguments.
Les commandes sont :
udevadm info [options]
udevadm trigger [options]
udevadm settle [options]
udevadm control [options] instruction
udevadm monitor [options]
udevadm test [options] devpath
udevadm version
udevadm help
udevadm
Les options des commandes sont de la forme –option=valeur
L'exemple qui suit affiche toutes (« query=all ») les information du disque
sda (--name=sda »).
$ udevadm info –query=all --name=sda
surveiller les évènements reçus et traités par udev
#udevadm monitor
Créer ses propres règles
Les noms des fichiers de règle sont de la forme nn-description.rules. ils sont
parcourus et exécuter par udev dans l'ordre des préfixes numériques nn.
Ils se trouvent sous /etc/udev/rules.d/
Pour construire la règle, commençons par visualiser les attributs du
périphérique.
# udevadm info --query=all –name=sdb1 # ou udevadm info --query=all –
path=/block/sdb/sdb1
# cat 99-reglesutilisateurs.rules
ENV{ID_FS_LABEL}=="MA_CLE",SYMLINK+="macle",ENV{GENERATED}="1"
Pour tester
# udevadm test /block/sdb/sdb1