Gérer les périphériques système avec udev Device Manager

Aperçu de la façon dont le gestionnaire d'appareils udev découvre le matériel, gère les noeuds de l'appareil et s'intègre à systemd sur Oracle Linux.

Le gestionnaire de périphériques udev s'exécute en tant que service systemd pour fournir aux logiciels un accès prévisible et géré aux périphériques système exposés par le noyau. En général, udev gère les autorisations des noeuds de périphérique, crée des liens symboliques dans le répertoire /dev/ pour rendre les noms de périphérique plus prévisibles et plus faciles à identifier, ou renomme les interfaces réseau.

Le gestionnaire de périphériques udev crée ou supprime dynamiquement des fichiers de noeud de périphérique lors du démarrage. Lors de la création d'un noeud de périphérique, udev lit le répertoire /sys du périphérique pour les attributs tels que l'étiquette, le numéro de série et le numéro de périphérique de bus.

udev peut utiliser des noms de périphérique persistants pour garantir un nom cohérent des périphériques lors des redémarrages, quel que soit leur ordre de découverte. Les noms de périphériques persistants sont particulièrement importants lors de l'utilisation de périphériques de stockage externes.

udev gère également les événements de pilote de périphérique déclenchés par le noyau et utilise les règles définies dans sa configuration pour déclencher des actions particulières. Par exemple, si un périphérique de stockage USB est connecté au système, le noyau avertit udev et udev avertit le gestionnaire approprié afin que le périphérique puisse être monté. De plus, si un câble réseau est connecté à une carte d'interface réseau, le noyau avertit udev du changement d'état et udev avertit NetworkManager afin que l'action appropriée puisse avoir lieu pour se connecter au réseau.

Le fichier de configuration pour udev est /etc/udev/udev.conf, dans lequel vous pouvez définir la priorité de journalisation udev_log, qui peut être réglée à err, info et debug. La valeur par défaut est err. La configuration supplémentaire des règles utilisées par udev est gérée dans des fichiers de règles individuels dans /etc/udev/rules.d/.

Pour plus d'informations, consultez la page de manuel udev(7).

udev est un composant de systemd. Pour plus d'informations, consultez les guides système spécifiques à la version.

Pour plus d'informations sur les concepts systemd utilisés par udev dans toutes les versions d'Oracle Linux, voir Gestion du système avec systemd.

Pour plus d'informations sur les systèmes de fichiers virtuels du noyau et les modules de pilote de périphérique, utilisez les ressources propres à la version suivante.

Pour plus d'informations sur les systèmes de fichiers virtuels du noyau et les modules de pilote de périphérique dans toutes les versions d'Oracle Linux, voir Gestion des noyaux et du démarrage du système sur Oracle Linux.

À propos des fichiers de périphérique

Explique comment Oracle Linux représente le matériel en tant que fichiers de périphérique, y compris les blocs, les caractères et les pseudo-appareils.

Le répertoire /dev contient des fichiers de périphérique ou des noeuds de périphérique qui permettent d'accéder à des périphériques tels que des disques durs, à des ressources sur des périphériques tels que des partitions de disque et à des pseudo périphériques tels qu'un générateur de nombres aléatoires.

Le répertoire /dev comporte plusieurs hiérarchies de sous-répertoire, chacune contenant des fichiers de périphérique liés à un certain type de périphérique. Toutefois, le contenu de ces sous-répertoires est implémenté en tant que liens symboliques vers les fichiers correspondants dans /dev. Ainsi, les fichiers sont accessibles via le fichier lié dans /dev ou le fichier correspondant dans le sous-répertoire.

L'utilisation de la commande ls -l /dev liste les fichiers, dont certains sont marqués comme étant de type b (pour bloc) ou de type c (pour caractère). Ces dispositifs ont une paire de numéros associés qui identifient le dispositif au système.

ls -l /dev
total 0
crw-r--r--. 1 root root     10, 235 Aug 20 08:36 autofs
drwxr-xr-x. 2 root root         240 Sep 20 07:37 block
drwxr-xr-x. 2 root root         100 Aug 20 08:36 bsg
drwxr-xr-x. 3 root root          60 Nov  4  2019 bus
lrwxrwxrwx. 1 root root           3 Aug 20 08:36 cdrom -> sr0
drwxr-xr-x. 2 root root        2720 Sep 20 07:37 char
crw-------. 1 root root      5,   1 Aug 20 08:36 console
lrwxrwxrwx. 1 root root          11 Aug 20 08:36 core -> /proc/kcore
drwxr-xr-x. 3 root root          60 Nov  4  2019 cpu
crw-------. 1 root root     10,  62 Aug 20 08:36 cpu_dma_latency
drwxr-xr-x. 7 root root         140 Aug 20 08:36 disk
brw-rw----. 1 root disk    253,   0 Aug 20 08:36 dm-0
brw-rw----. 1 root disk    253,   1 Aug 20 08:36 dm-1
brw-rw----. 1 root disk    253,   2 Aug 20 08:36 dm-2
lrwxrwxrwx. 1 root root          13 Aug 20 08:36 fd -> /proc/self/fd
crw-rw-rw-. 1 root root      1,   7 Aug 20 08:36 full
crw-rw-rw-. 1 root root     10, 229 Aug 20 08:36 fuse
crw-------. 1 root root     10, 228 Aug 20 08:36 hpet
drwxr-xr-x. 2 root root           0 Aug 20 08:36 hugepages
crw-------. 1 root root     10, 183 Aug 20 08:36 hwrng
lrwxrwxrwx. 1 root root          12 Aug 20 08:36 initctl -> /run/initctl
drwxr-xr-x. 3 root root         220 Aug 20 08:36 input
crw-r--r--. 1 root root      1,  11 Aug 20 08:36 kmsg
lrwxrwxrwx. 1 root root          28 Aug 20 08:36 log -> /run/systemd/journal/dev-log
brw-rw----. 1 root disk      7,   0 Sep 23 01:28 loop0
crw-rw----. 1 root disk     10, 237 Sep 20 07:37 loop-control
drwxr-xr-x. 2 root root         120 Aug 20 08:36 mapper
crw-------. 1 root root     10, 227 Aug 20 08:36 mcelog
crw-r-----. 1 root kmem      1,   1 Aug 20 08:36 mem
crw-------. 1 root root     10,  59 Aug 20 08:36 memory_bandwidth
drwxrwxrwt. 2 root root          40 Nov  4  2019 mqueue
drwxr-xr-x. 2 root root          60 Aug 20 08:36 net
crw-------. 1 root root     10,  61 Aug 20 08:36 network_latency
crw-------. 1 root root     10,  60 Aug 20 08:36 network_throughput
crw-rw-rw-. 1 root root      1,   3 Aug 20 08:36 null
crw-------. 1 root root     10, 144 Aug 20 08:36 nvram
drwxr-xr-x. 2 root root         100 Aug 20 08:36 ol_ca-virtdoc-oltest1
crw-r-----. 1 root kmem      1,   4 Aug 20 08:36 port
crw-------. 1 root root    108,   0 Aug 20 08:36 ppp
crw-rw-rw-. 1 root tty       5,   2 Oct  7 08:10 ptmx
drwxr-xr-x. 2 root root           0 Aug 20 08:36 pts
crw-rw-rw-. 1 root root      1,   8 Aug 20 08:36 random
drwxr-xr-x. 2 root root          60 Nov  4  2019 raw
lrwxrwxrwx. 1 root root           4 Aug 20 08:36 rtc -> rtc0
crw-------. 1 root root    251,   0 Aug 20 08:36 rtc0
brw-rw----. 1 root disk      8,   0 Aug 20 08:36 sda
brw-rw----. 1 root disk      8,   1 Aug 20 08:36 sda1
brw-rw----. 1 root disk      8,   2 Aug 20 08:36 sda2
brw-rw----. 1 root disk      8,  16 Aug 20 08:36 sdb
brw-rw----. 1 root disk      8,  17 Aug 20 08:36 sdb1
crw-rw----. 1 root cdrom    21,   0 Aug 20 08:36 sg0 

Périphériques de traitement par blocs

Les périphériques de type bloc permettent d'accéder de manière aléatoire aux données, de rechercher des données dans les médias et, généralement, de mettre les données en mémoire tampon pendant l'écriture ou la lecture des données. Les disques durs, les lecteurs de CD-ROM, la mémoire flash et d'autres périphériques de mémoire adressables sont des exemples de périphériques de traitement par blocs.

Appareils de caractères

Les périphériques de type caractère permettent la diffusion en continu de données vers ou depuis un périphérique. Les données ne sont généralement pas mises en mémoire tampon et l'accès aléatoire aux données sur un périphérique n'est pas accordé. Le noyau écrit des données ou les lit à partir d'un périphérique de caractères de 1 octet à la fois. Les claviers, les souris, les terminaux, les pseudo-terminaux et les lecteurs de bande sont des exemples de périphériques de caractères. tty0 et tty1 sont des fichiers de périphériques de caractères qui correspondent à des périphériques de terminal afin que les utilisateurs puissent se connecter à partir de terminaux série ou d'émulateurs de terminal.

Périphériques pseudo-terminaux

Les périphériques secondaires pseudo-terminaux émulent des périphériques terminaux réels afin qu'ils puissent interagir avec le logiciel. Par exemple, un utilisateur peut se connecter à un périphérique terminal tel que /dev/tty1, qui utilise ensuite le périphérique primaire pseudo-terminal, /dev/pts/ptmx, pour interagir avec un périphérique pseudo-terminal sous-jacent. Les fichiers de périphériques de type caractère pour les périphériques secondaires et primaires pseudo-terminaux se trouvent dans le répertoire /dev/pts, comme illustré dans l'exemple suivant :

ls -l /dev/pts
total 0
crw--w----. 1 guest tty  136, 0 Mar 17 10:11 0
crw--w----. 1 guest tty  136, 1 Mar 17 10:53 1
crw--w----. 1 guest tty  136, 2 Mar 17 10:11 2
c---------. 1 root  root   5, 2 Mar 17 08:16 ptmx

Certaines entrées d'appareil, telles que stdin pour l'entrée standard, sont liées symboliquement au moyen du sous-répertoire self du système de fichiers proc. Le fichier de périphérique pseudo-terminal vers lequel ils pointent dépend du contexte du processus.

ls -l /proc/self/fd/[012]
lrwx------. 1 root root 64 Oct  7 08:23 /proc/self/fd/0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct  7 08:23 /proc/self/fd/1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct  7 08:23 /proc/self/fd/2 -> /dev/pts/0

null, random, urandom et zero Character Devices

Les périphériques de type caractère, tels que null, random, urandom et zero, sont des exemples de pseudo-appareils qui fournissent l'accès à des fonctionnalités virtuelles implémentées dans un logiciel plutôt qu'au matériel physique.

/dev/null est un puits de données. Les données que vous écrivez dans /dev/null disparaissent effectivement, mais l'opération d'écriture réussit. La lecture à partir de /dev/null retourne EOF (fin de fichier).

/dev/zero est une source de données d'un nombre illimité de 0 octet de valeur.

/dev/random et /dev/urandom sont des sources de données de flux d'octets pseudo-aléatoires. Pour maintenir une sortie à entropie élevée, /dev/random bloque si son pool d'entropie ne contient pas suffisamment de bits de bruit. /dev/urandom ne bloque pas et, par conséquent, l'entropie de sa sortie peut ne pas être aussi élevée que celle de /dev/random. Toutefois, ni /dev/random ni /dev/urandom ne sont considérés comme suffisamment aléatoires aux fins d'une cryptographie sécurisée telle qu'un chiffrement de qualité militaire.

Vous pouvez connaître la taille du groupe d'entropies et la valeur d'entropie pour /dev/random à partir des fichiers virtuels sous /proc/sys/kernel/random :

cat /proc/sys/kernel/random/poolsize
4096
cat /proc/sys/kernel/random/entropy_avail
3467

Pour plus d'informations, consultez les pages de manuel null(4), pts(4) et random(4).