Comment utiliser UDEV pour la détection et la gestion des appareils dans Linux

Comment utiliser UDEV pour la détection et la gestion des appareils dans Linux

Udev (Espace utilisateur / dev) est un sous-système Linux pour la détection et la gestion des périphériques dynamiques, depuis la version du noyau 2.6. C'est un remplacement de devfs et coup de pouce.

Il crée ou supprime dynamiquement des nœuds de périphérique (une interface à un pilote de périphérique qui apparaît dans un système de fichiers comme s'il s'agissait d'un fichier ordinaire, stocké sous le / dev répertoire) à l'heure du démarrage ou si vous ajoutez un périphérique ou supprimez un périphérique du système. Il propage ensuite des informations sur un appareil ou modifie son état à l'espace utilisateur.

Sa fonction consiste à 1) fournir les applications système avec des événements de périphérique, 2) gérer les autorisations des nœuds de périphérique et 3) peuvent créer des liens symboliques utiles dans le / dev Répertoire pour accéder aux appareils, ou même renommer les interfaces réseau.

L'un des pros de udev est-il qu'il peut utiliser des noms d'appareils persistants pour garantir une dénomination cohérente des appareils à travers les redémarrages, malgré leur ordre de découverte. Cette fonctionnalité est utile car le noyau attribue simplement des noms de périphériques imprévisibles en fonction de l'ordre de découverte.

Dans cet article, nous apprendrons à utiliser Udev pour la détection et la gestion des appareils sur les systèmes Linux. Notez que la plupart, sinon toutes les distributions Linux modernes traditionnelles sont livrées avec Udev Dans le cadre de l'installation par défaut.

Apprenez les bases de Udev dans Linux

Le udev démon, systemd-udevd (ou systemd-udevd.service) communique avec le noyau et reçoit un appareil uévants directement à partir de celui-ci chaque fois que vous ajoutez ou supprimez un périphérique du système, ou un appareil modifie son état.

Udev est basé sur les règles - ses règles sont flexibles et très puissantes. Chaque événement d'appareil reçu est égalé à l'ensemble des règles lues à partir de fichiers situés dans / lib / udev / règles.d et / run / udev / règles.d.

Vous pouvez écrire des fichiers de règles personnalisées dans le / etc / udev / règles.d/ répertoire (les fichiers doivent se terminer avec le .règles extension) Pour traiter un appareil. Notez que les fichiers de règles dans ce répertoire ont la priorité la plus élevée.

Pour créer un fichier de nœud de périphérique, udev doit identifier un appareil en utilisant certains attributs tels que le étiqueter, numéro de série, son numéro majeur et mineur utilisé, le numéro de dispositif de bus et bien plus encore. Ces informations sont exportées par le sysfs système de fichiers.

Chaque fois que vous connectez un périphérique au système, le noyau détecte et l'initialise, et un répertoire avec le nom de l'appareil est créé sous / sys / répertoire qui stocke les attributs de l'appareil.

Le fichier de configuration principal pour Udev est / etc / udev / udev.confli, Et pour contrôler le comportement d'exécution du démon Udev, vous pouvez utiliser le udevadm utilitaire.

Afficher le noyau reçu événements (uévants) et Événements Udev (que Udev envoie après le traitement des règles), exécutez udevadm avec la commande monitor. Ensuite, connectez un appareil à votre système et montez, à partir du terminal, comment l'événement de l'appareil est géré.

La capture d'écran suivante montre un extrait d'un AJOUTER Événement après avoir connecté un disque flash USB au système de test:

$ Udevadm Monitor 
Surveiller les événements des périphériques dans Linux

Pour trouver le nom attribué à votre disque USB, utilisez l'utilitaire LSBLK qui lit le sysfs système de fichiers et udev db Pour recueillir des informations sur les appareils traités.

 $ lsblk 
Liste des périphériques de blocs dans Linux

De la sortie de la commande précédente, le disque USB est nommé sdb1 (Le chemin absolu devrait être / dev / sdb1). Pour interroger les attributs de l'appareil à partir de la base de données UDEV, utilisez le commande d'informations.

$ udevadm info / dev / sdb1 
Attributs du périphérique de requête de UDEV DB dans Linux

Comment travailler avec les règles Udev dans Linux

Dans cette section, nous discuterons brièvement de la façon d'écrire udev règles. Une règle comprend une liste séparée par des virgules d'une ou plusieurs paires de valeurs clés. Les règles vous permettent de renommer un nœud de périphérique à partir du nom par défaut, de modifier les autorisations et la propriété d'un nœud de périphérique, de déclencher l'exécution d'un programme ou d'un script lorsqu'un nœud de périphérique est créé ou supprimé, entre autres.

Nous rédigerons une règle simple pour lancer un script lorsqu'un périphérique USB sera ajouté et lorsqu'il est supprimé du système en cours d'exécution.

Commençons par créer les deux scripts:

$ sudo vim / bin / device_added.shot 

Ajouter les lignes suivantes dans le Device_added.shot scénario.

#!/ Bin / Bash Echo "Appareil USB ajouté à $ (date)" >> / TMP / SCRIPTS.enregistrer 

Ouvrez le deuxième script.

$ sudo vim / bin / device_remeoved.shot 

Puis ajoutez les lignes suivantes à Device_ReMoved.shot scénario.

#!/ bin / bash echo "périphérique USB supprimé à $ (date)" >> / tmp / scripts.enregistrer 

Enregistrer les fichiers, fermer et rendre les deux scripts exécutables.

$ sudo chmod + x / bin / device_added.sh $ sudo chmod + x / bin / device_removed.shot 

Ensuite, créons une règle pour déclencher l'exécution des scripts ci-dessus, appelés / etc / udev / règles.D / 80-test.règles.

$ vim / etc / udev / règles.D / 80-test.règles 

Ajoutez ces deux règles suivantes.

Sous-système == "USB", action == "add", env devype == "usb_device", run + = "/ bin / device_added.sh "sous-système ==" usb ", action ==" supprimer ", env devype ==" usb_device ", run + =" / bin / device_removed.sh " 

où:

  • "==": est un opérateur à comparer pour l'égalité.
  • "+ =": est un opérateur pour ajouter la valeur à une clé qui contient une liste des entrées.
  • Sous-système: correspond au sous-système de l'appareil événement.
  • ACTION: correspond au nom de l'action de l'événement.
  • Env devype: correspond à la valeur de la propriété d'un appareil, type de périphérique dans ce cas.
  • COURIR: Spécifie un programme ou un script à exécuter dans le cadre de la gestion des événements.

Enregistrez le fichier et fermez-le. Puis comme racine, dites systemd-udevd Pour recharger les fichiers de règles (cela recharge également d'autres bases de données telles que l'index du module du noyau), en exécutant.

$ sudo udevadm Contrôle - Reload 

Connectez maintenant un lecteur USB dans votre machine et vérifiez si le Device_added.shot Le script a été exécuté. Tout d'abord le fichier scripts.enregistrer devrait être créé sous / tmp.

$ ls -l / tmp / scripts.enregistrer 
Vérifiez le journal des scripts après avoir ajouté USB

Ensuite, le fichier doit avoir une entrée telle que «Périphérique USB supprimé à date_time», Comme indiqué dans la capture d'écran.

$ cat / tmp / scripts.enregistrer 
Vérifiez le journal des scripts après avoir retiré l'USB

Pour plus d'informations sur la façon d'écrire les règles UDEV et de gérer UDEV, consultez le udev et udevadm Entrées manuelles respectivement, en fonctionnant:

$ man udev $ man udevadm 
Résumé

Udev est un gestionnaire de périphériques remarquable qui fournit un moyen dynamique de configurer les nœuds d'appareil dans le / dev annuaire. Il garantit que les appareils sont configurés dès qu'ils sont branchés et découverts. Il propage des informations sur un appareil traité ou modifie son état, dans l'espace utilisateur.

Si vous avez des questions ou des pensées à partager sur ce sujet, utilisez le formulaire de rétroaction.