udev/fr

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Udev and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

Not to be confused with eudev.

udev (user /dev) est le gestionnaire de périphériques pour le noyau de Linux. Il gère les nœuds de périphériques dans /dev et prend en charge toutes les actions dans l'espace utilisateur lors de l'ajout ou de la suppression de périphériques. Les lecteurs de cet article devraient également lire eudev, une dérivation de udev.

Qu'est-ce que udev?

Le répertoire /dev

La plupart des utilisateurs de Linux savent que /dev/sda1 est un moyen rapide de référencer la première partition du premier disque dur détecté par le noyau. C'est facile, non ?

Mais considérez des périphériques connectables à chaud comme USB, IEEE1394, ou les périphériques PCI commutables à chaud, etc. Quel est le premier périphérique ? Et pour combien de temps ? Comment les autres périphériques seront-ils nommés quand le premier disparaîtra ? Comment cela affectera-t-il les opérations en cours ? Cela serait-t-il amusant si une tâche d'impression est tout à coup déplacée d'une toute nouvelle imprimante laser vers une quasi-moribonde imprimante à matrice parce que quelqu’un aura tiré sur le cordon d'alimentation de l'imprimante laser qui était justement la première imprimante ?

Arrive le gestionnaire de périphériques. Un gestionnaire de périphériques moderne (cela inclut udev et eudev) doit:

  • Fonctionner dans l'espace utilisateur;
  • Créer et supprimer des fichiers de périphérique de manière dynamique;
  • Assurer un nommage cohérent;
  • Fournir une API dans l'espace utilisateur.

À chaque fois qu'une modification de la structure des périphériques se produit, le noyau génère un événement uevent qui est intercepté par le gestionnaire de périphériques. Le gestionnaire de périphériques suit alors les règles déclarées dans les répertoires /etc/udev/rules.d, /run/udev/rules.d et /lib/udev/rules.d. En se basant sur l'information contenue dans l'événement, il trouve la ou les règles dont il a besoin pour déclencher et accomplir les actions requises. Ces actions peuvent être de créer ou de supprimer des fichiers de périphérique, mais elles peuvent aussi déclencher le chargement de micro-logiciels particuliers dans la mémoire du noyau.

Installation

Important
Avant faire une mise à jour, consulter le guide de mise à jour de udev (Anglais) pour plus d'information afin d'éviter de se retrouver avec un système qui ne démarre plus.

Noyau

udev nécessite les options suivantes dans le noyau :

KERNEL
General setup  --->
    [*] Configure standard kernel features (expert users)  --->
        [ ] Enable deprecated sysfs features to support old userspace tools
        [*] Enable signalfd() system call
Enable the block layer  --->
    [*] Block layer SG support v4
Networking support  --->
    Networking options  --->
        <*> Unix domain sockets
Device Drivers  --->
    Generic Driver Options  --->
        ()  path to uevent helper
        [*] Maintain a devtmpfs filesystem to mount at /dev
    < > ATA/ATAPI/MFM/RLL support (DEPRECATED)  --->
File systems  --->
    [*] Inotify support for userspace
    Pseudo filesystems --->
        [*] /proc file system support
        [*] sysfs file system support

Options de la variable USE

Portage connaît l'option globale de la variable USE udev pour activer la prise en charge de udev dans les autres paquets. Activer cette option de la variable USE (par défaut dans tous les profiles Linux) provoquera l'installation du paquet sys-fs/udev automatiquement.

FILE /etc/portage/make.conf
USE="udev"

USE flags for sys-fs/udev Linux dynamic and persistent device naming support (aka userspace devfs)

acl Add support for Access Control Lists
kmod Enable kernel module loading/unloading support using sys-apps/kmod
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
static-libs Build static versions of dynamic libraries as well

Emerge

Après avoir défini les options de la variable USE, mettre à jour le système pour que les changements prennent effet :

root #emerge --ask --changed-use --deep @world

Configuration

Service

Pour démarrer udev au démarrage de la machine, l'ajouter au niveau d'exécution sysinit. Pour cela, exécuter la commande suivant en tant que root :

root #rc-update add udev sysinit

Conserver le nommage traditionnel de 'eth0'

Les noms d'interfaces eth0, wlan0, etc. donnés par le noyau peuvent être modifiés au démarrage (see dmesg) par la règle udev /lib/udev/rules.d/80-net-name-slot.rules.

Pour garder les noms classiques, cette règle peut être remplacée par un fichier vide du même nom dans le dossier /etc/udev/rules.d :

root #touch /etc/udev/rules.d/80-net-name-slot.rules

Configuration avancée

Règles

udev fournit un jeu de règles qui correspondent aux valeurs exportées des uevents (événements provoqués par le noyau) et aux propriétés du périphérique découvert. Possiblement, une règle ayant une correspondance nommera et créera un nœud de périphérique et exécutera des programmes configurés pour installer et configurer le périphérique.

Les définitions des règles sont stockées à deux emplacements :

  1. /lib/udev/rules.d/ - Les règles dans ce répertoire sont installées par certains paquets, elles ne doivent en général pas être modifiées par les utilisateurs;
  2. /etc/udev/rules.d/ - Ce répertoire est pour les règles définies par les utilisateurs. Chaque nouvelle règle doit être ajoutée dans ce répertoire;;

Dans ces répertoires, de multiples fichiers de règles (avec le suffix .rules) sont lus dans l'ordre alphabétique. Dans ces fichiers, udev trouvera des expressions qui peuvent correspondre à un événement uevent avec l'état correspondant (est-ce que l’événement correspond à un ajout ou une suppression de périphérique) et la commande à exécuter.

La mise en correspondance de l'événement se base sur des informations telles que :

  • Le SOUS-SYSTÈME de l'uevent (pour quel type de périphérique l'événement est-il provoqué);
  • L'ACTION qui a lieu (ajout, changement, ou retrait);
  • Un ou plusieurs attributs (via ATTR ou ATTRS), tels que la classe du périphérique, le vendeur ou tout autre information du périphérique;
  • Le nom fournit par le noyau (via KERNEL) tel que sd* (pour les disques SCSI/ATA) ou input* (pour les périphériques d'entrée comme les souris et les claviers);
  • Un ou plusieurs paramètres d'environnement (via ENV), utilisés pour envoyer des informations partagées par de multiples règles

En se basant sur ces informations, la règle peut alors décider si :

  1. Quelques informations doivent être partagées avec des événements ultérieurs (à travers des variables d'environnement)
  2. Des liens doivent être créés dans /dev
  3. Des commandes doivent être exécutées

udev accomplit cela pour toutes les règles qui correspondent (il ne cesse donc pas après la première correspondance) pour permettre une approche flexible de la gestion des périphériques.

Noms de périphérique persistants

Le noyau détecte les périphériques de manière asynchrone, udev reflète le système de fichiers sysfs et donc les périphériques sont nommés et numérotés selon leur ordre de détection. Ainsi par défaut, udev ne fournit pas de noms persistants. Néanmoins, il existe un mécanisme pour quelques classes de périphériques pour assurer cette fonctionnalité :

  • Udev crée, pour les périphériques de stockage, des liens symboliques additionnels en se basant sur l'ID du périphérique, son étiquette, UUID et son chemin. Voir le répertoire /dev/disk/by-*. Ainsi, au lieu d'utiliser, par exemple, le fichier de périphérique /dev/sda, utiliser le fichier /dev/disk/by-label/SOME_LABEL.
  • C'est la même chose pour les périphériques d'entrée dans le répertoire /dev/input.
  • En utilisant des règles personnalisées, l'utilisateur peut créer son propre fichier de périphérique.

Utilisation

Quelques commandes utiles :

  • Affiche tous les messages concernant un fichier de périphérique donné :
root #udevadm info --query=all --name=/dev/DEVICE_FILE
  • Surveiller les activités de udev :
root #udevadm monitor
  • Assigner un nom persistant à un périphérique Ethernet :
FILE /etc/udev/rules.d/ethernet.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="01:23:45:67:89:ab", NAME="eth6789ab"

Se reporter à la page de manuel de udevadm pour plus d'information.

Dépannage

Journaliser les messages de surveillance

Pour journaliser tous les messages quand la commande udevadm monitor est exécutée, modifier le fichier de configuration suivant :

FILE /etc/conf.d/udev
udev_monitor="YES"

Cela créera le nouveau journal situé à /run/udev/udevmonitor.log.

Mode de débogage

Activer le mode de debogage pour obtenir plus de messages journalisés :

FILE /etc/conf.d/udev
udev_debug="YES"

Définir la priorité de journalisation :

FILE /etc/udev/udev.conf
udev_log="debug"

Cela créera le nouveau journal /run/udev/udevdebug.log mais aucun message n'y sera écrit. Les version les plus récentes de udev écrirons leurs messages dans dmesg.

Fichiers de périphériques manquants /dev/null et /dev/console

Quelques version de udev ont besoin des fichiers /dev/null et /dev/console pour fonctionner correctement, mais ne peuvent pas les créer elles-même. Pour créer ces fichiers manuellement pour udev, exécuter la commande suivant en tant que root :

root #mkdir test
root #mount --bind / test
root #cd test/dev
root #mknod -m 660 console c 5 1
root #mknod -m 660 null c 1 3
root #cd ../..
root #umount test
root #rmdir test

NIC (Carte interface réseau) assignée eth0, mais a été déplacée en eth1

Ceux qui ont des cartes à deux interfaces réseau sur leur carte mère peuvent se retrouver dans une situation où ifconfig peut ne montrer ni eth0 ni eth1. dmesg peut montrer la carte interface réseau détectée comme eth0, et ensuite déplacée en eth1. Exécuter la commande ifconfig -a montrerar aussi la carte réseau en tant que eth1. Ceci est dû au fait que les noms assignés par le noyau ont été utilisés en premier lieu. Les utilisateurs doivent écrire leurs propres règles comme /etc/udev/rules.d/70-my-network.rules pour utiliser des noms libres comme lan0 ou wireless0, ou utiliser les noms d'interfaces prédictibles (qui ont été activés par défaut depuis la version 197 de udev).

Pensez aussi à retirer les anciens fichiers des versions antérieures de udev :

root #rm /etc/udev/rules.d/70-persistent-net.rules /etc/systemd/network/99-default.link

Assurez-vous également de ne pas mettre net.ifnames=0 sur la ligne de commande du noyau. Ce paramètre désactiverait complètement la fonctionnalité de noms d'interfaces prévisibles de udev.

Voir aussi

Ressources externes

Bug 575718 - Request for council decision regarding virtual/udev default provider - Default virtual/udev provider changed to sys-fs/eudev