[Bases de Linux] - Explication détaillée du gestionnaire de périphériques Linux udev

1. Qu'est-ce que udev?

udev est le gestionnaire de périphériques de la série Linux Kernel 2.6. Sa fonction principale est de gérer les nœuds de périphériques sous le répertoire / dev. Il est également utilisé pour remplacer les fonctions de devfs et hotplug, ce qui signifie qu'il doit gérer le comportement du répertoire / dev et de tout l'espace utilisateur lors de l'ajout / suppression de matériel, y compris lors du chargement du firmware.

La dernière version d'udev dépend de la dernière version de l'interface uevent du noyau Linux 2.6.13 mis à niveau. Le système utilisant la nouvelle version d'udev ne peut pas être démarré sous la version 2.6.13, à moins que le paramètre noudev ne soit utilisé pour désactiver udev et que le / dev traditionnel soit utilisé pour la lecture de périphérique.

Deuxièmement, les avantages de l'utilisation d'udev

  1. Lorsqu'un périphérique est ajouté ou supprimé, le cadre du démon d'udev écoute l'uevent du noyau pour ajouter ou supprimer des fichiers de périphérique sous / dev, donc udev ne génère que des fichiers de périphérique pour les périphériques connectés, pas sous / dev Un grand nombre de fichiers de périphérique virtuel.
  2. Les utilisateurs Linux peuvent générer de manière flexible des noms de fichiers de périphériques avec une identification forte via des fichiers de règles personnalisés, et ne dépend pas de l'ordre dans lequel les périphériques sont insérés dans le système.
  3. udev peut définir les autorisations du fichier de périphérique et le propriétaire et le groupe du fichier de périphérique selon certaines conditions.

Trois, fichier de configuration udev

[inbi @ debian ~] #cat /etc/udev/udev.conf 
# La priorité initiale de syslog (3): "err", "info", "debug" ou son 
# équivalent numérique. Pour le débogage à l'exécution, l' 
état # interne des démons peut être modifié avec: "udevcontrol log_priority =". 
udev_log = "err"
  • udev_log: niveau de journalisation syslog, la valeur par défaut est err. S'il est changé en info ou debug, un long journal udev sera enregistré.
  • udev_root: répertoire dans lequel le périphérique généré par udev est stocké. La valeur par défaut est / dev /. Il est recommandé de ne pas modifier les paramètres, cette option n'est donc pas affichée par défaut.

Quatrièmement, les règles et les fichiers de règles d'udev

Le fichier de règles est la partie la plus importante d'udev et est stocké par défaut dans /etc/udev/rules.d/. Tous les fichiers de règles doivent porter le suffixe ".rules" et les fichiers de règles sont exécutés dans l'ordre de la première lettre ou du premier chiffre.

Dans le fichier de règles, à l'exception de la ligne (commentaire) commençant par "#", toutes les lignes non vides sont considérées comme une règle, mais une règle ne peut pas être étendue à plusieurs lignes. Les règles sont composées de plusieurs paires clé-valeur, séparées par des virgules. Les paires clé-valeur peuvent être divisées en paires clé-valeur conditionnelles correspondantes (ci-après dénommées "clés correspondantes") et en paires clé-valeur d'affectation (ci-après dénommées " Clé d'affectation "), une règle peut avoir plusieurs clés correspondantes et plusieurs clés d'affectation. La clé correspondante doit correspondre à toutes les conditions d'un attribut d'appareil. Lorsque l'attribut d'un appareil correspond à toutes les clés correspondantes de la règle, la règle est considérée comme effective, puis l'attribution de la règle est exécutée en fonction du contenu de la clé d'affectation. Voici une règle simple:

KERNEL == "sdb", NAME = "disque racine", MODE = "0660"

KERNEL est la clé correspondante, et NAME et MODE sont les clés d'assignation. La signification de cette règle est la suivante: s'il y a un périphérique dont le nom de périphérique du noyau est sdb, la condition prendra effet et l'affectation suivante sera exécutée: un fichier de périphérique nommé root_disk est généré sous / dev, et les autorisations de fichier de périphérique sont réglé sur 0660.

Tous les opérateurs de règles udev
== Comparez la clé et la valeur, si elles sont égales, la condition est satisfaite
! = Comparez les clés et les valeurs, si elles ne sont pas égales, la condition est satisfaite
= Attribuer une valeur à une clé
+ = Attribuer une valeur à une clé qui représente plusieurs entrées
: = Attribuer une valeur à une clé et rejeter toutes les modifications ultérieures de la clé
Clé de correspondance pour les règles udev
ACTION Comportement d'événement: ajouter (ajouter un appareil), supprimer (supprimer un appareil)
NOYAU Nom du périphérique du noyau, par exemple: sda, cdrom
DEVPATH Chemin Devpath de l'appareil
SOUS-SYSTÈME Le nom du sous-système de l'appareil, par exemple, le sous-système de sda ​​est block
BUS Le nom de bus du périphérique dans devpath, par exemple: usb
CHAUFFEUR Le nom du pilote de périphérique du périphérique dans devpath, par exemple: ide-cdrom
identifiant Le numéro d'identification de l'appareil dans devpath
SYSFS {nom de fichier} Le contenu du fichier de propriétés "filename" du périphérique sous le chemin devpath du périphérique. Par exemple: SYSFS {mode} == "ST936701SS" signifie: si le modèle de l'appareil est ST936701SS, l'appareil correspond à la clé correspondante. Dans une règle, vous pouvez définir jusqu'à cinq clés correspondantes SYSFS
ENV (clé) Variables d'environnement. Dans une règle, vous pouvez définir jusqu'à cinq clés correspondantes pour les variables d'environnement
PROGRAMME Appeler des commandes externes
RÉSULTAT

Le résultat de retour de la commande externe PROGRAM.

例 : PROGRAM == ”/ lib / udev / scsi_id -g -s $ devpath”, RESULT == ”35000c50000a7ef67 ″

Clé d'affectation des règles udev
NOM Le nom du fichier de périphérique généré sous / dev. Seule la première attribution au NOM d'un appareil prend effet, puis l'attribution au NAME de l'appareil par les règles de correspondance sera ignorée. S'il n'y a pas de règle pour attribuer une valeur au nom du périphérique, udev utilisera le nom du périphérique du noyau pour générer le fichier du périphérique.
SYMLINK Créez des liens symboliques pour les fichiers de périphériques sous / dev /. Comme udev ne peut générer qu'un seul fichier de périphérique pour un certain périphérique, il est recommandé d'utiliser des liens symboliques afin de ne pas écraser les fichiers générés par les règles udev par défaut du système.
PROPRIÉTAIRE Utilisateur par defaut
GROUPER Groupe d'utilisateurs par défaut
MODE Autorisations de l'appareil
ENV {clé} Importer une variable d'environnement
opérateur de substitution appelable udev
$ noyau,% k Le nom de périphérique du noyau du périphérique, par exemple: sda, cdrom
$ nombre,% n Le numéro de noyau de l'appareil, par exemple: le numéro de noyau de sda3 est 3
$ devpath,% p Chemin Devpath de l'appareil
$ id,% b Numéro d'identification de l'appareil dans devpath
$ sysfs {fichier},% s {fichier}

Le contenu du fichier dans le sysfs de l'appareil. En fait, il s'agit de la valeur d'attribut de l'appareil.

Par exemple: Par exemple: $ sysfs {size} indique la taille du périphérique (disque).

$ env {clé},% E {clé} La valeur d'une variable d'environnement
$ majeur,% M Numéro majeur de l'appareil
$ mineur,% m

Numéro mineur de l'appareil

$ résultat,% c PROGRAM 返回的结果。
$parent,%P 父设备的设备文件名
$root,%r

udev_root 的值,默认是 /dev/。

$tempnode,%N 临时设备名
%% 符号 % 本身
$$ 符号 $ 本身

devpath:是指一个设备在 sysfs 文件系统(/sys)下的相对路径,该路径包含了设备的属性文件。udev 里的多数命令都是针对 devpath 操作的。例如:sda 的 devpath 是 /block/sda,sda2 的 devpath 是 /block/sda/sda2。

五、udev 规则文件实例

KERNEL=="sd*", PROGRAM="/lib/udev/scsi_id -g -s %p",

RESULT=="35000C50000A7EF67", SYMLINK="%k_%c"

该规则的执行:如果有一个内核设备名称以 sd 开头,且 SCSI ID 为 35000c50000a7ef67,则为设备文件产生一个符号链接 “sda_35000c50000a7ef67”。

SUBSYSTEM=="net", SYSFS{address}=="00:1E:6E:00:36:F1", NAME="public_NIC"

如果存在设备的子系统为 net,并且地址(MAC address)为 “00:1E:6E:00:36:F1”,为该设备产生一个名为 public_NIC 的设备文件。

SUBSYSTEM=="block", SYSFS{size}=="71096640", SYMLINK="my_disk"

如果存在设备的子系统为 block,并且大小为 71096640(block),则为该设备的设备文件名产生一个名为 my_disk 为符号链接。

六、查询设备信息

查询 sysfs 文件系统

设备 sda 的 SYSFS{size} 可以通过 cat /sys/block/sda/size 得到;
SYSFS{model} 信息可以通过 cat /sys/block/sda/device/model 得到。

查询磁盘的 SCSI_ID

scsi_id -g -s /block/sda

参考文献:

http://zh.wikipedia.org/wiki/Udev

http://www.reactivated.net/writing_udev_rules.html

http://www.ibm.com/developerworks/cn/linux/l-cn-udev/index.html?ca=drs-cn-0304

Je suppose que tu aimes

Origine blog.csdn.net/u014674293/article/details/114934035
conseillé
Classement