11.7. Création de liens symboliques personnalisés vers les périphériques

11.7.1. Liens symboliques pour le CD-ROM

Certains logiciels que vous pourriez vouloir installer plus tard (comme des lecteurs multimédias) s'attendent à ce que les liens symboliques /dev/cdrom et /dev/dvd existent et pointent vers le lecteur CD-ROM ou DVD-ROM. De plus, il peut être pratique de mettre des références à ces liens symboliques dans /etc/fstab. Pour chacun de vos périphériques CD-ROM, trouvez le répertoire correspondant sous /sys (cela peut être par exemple /sys/block/hdd) et lancez une commande ressemblant à ce qui suit :

udevadm test /sys/block/hdd

Regardez les lignes contenant la sortie des divers programmes *_id.

Il y a deux approches pour créer des liens symboliques. La première consiste à utiliser le nom de modèle et le numéro de série, la seconde est basée sur l'emplacement du périphérique sur le bus. Si vous allez utiliser la première approche, créez un fichier qui ressemble à ce qui suit :

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Liens symboliques pour le lecteur CD-ROM personnalisés
SUBSYSTEM=="block", ENV{ID_MODEL}=="SAMSUNG_CD-ROM_SC-148F", \
    ENV{ID_REVISION}=="PS05", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_MODEL}=="PHILIPS_CDD5301", \
    ENV{ID_SERIAL}=="5VO1306DM00190", SYMLINK+="cdrom1 dvd"

EOF
[Remarque]

Remarque

Bien que les exemples de ce livre fonctionnent correctement, gardez à l'esprit qu'Eudev ne reconnaît pas les antislash pour poursuivre une ligne. Si vous modifiez des règles Eudev avec un éditeur, prenez garde à laisser chaque règle sur une ligne physique.

De cette façon, les liens symboliques resteront bons même si vous déplacez les périphériques dans des positions différentes sur le bus IDE mais le lien symbolique /dev/cdrom ne sera pas créé si vous remplacez le vieux SAMSUNG CD-ROM par un nouveau lecteur.

La clé SUBSYSTEM=="block" est nécessaire afin d'éviter une correspondance entre les périphériques génériques SCSI. Sans cela, avec des lecteurs de CD-ROM SCSI, les liens symboliques pointeront tantôt vers les bons périphériques /dev/srX, tantôt vers /dev/sgX, ce qui est faux.

La seconde approche donne :

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Liens symboliques pour le lecteur CD-ROM personnalisés
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-0:1", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-1:1", SYMLINK+="cdrom1 dvd"

EOF

De cette façon, les liens symboliques demeureront corrects même si vous remplacez des lecteurs par des modèles différents mais que vous placez sur les anciennes positions sur le bus IDE. La clé ENV{ID_TYPE}=="cd" s'assure que le lien symbolique disparaisse si vous mettez quelque chose d'autre qu'un lecteur de CD-ROM dans une telle position sur le bus.

Bien entendu, il est possible de mélanger les deux approches.

11.7.2. Gestion des périphériques dupliqués

Comme expliqué dans le Section 11.6, « Gestion des périphériques et modules sur un système CLFS », l'ordre dans lequel les périphériques ayant la même fonction apparaissent dans /dev est essentiellement aléatoire. Par exemple si vous avez une webcam en USB et un tunner TV, parfois /dev/video0 renvoie à la webcam, et /dev/video1 renvoie au tuner, et parfois après un redémarrage l'ordre s'inverse. Pour toutes les classes de matériel sauf les cartes son et les cartes réseau, ceci peut être corrigé en créant des règles eudev pour des liens symboliques constants personnalisés. Le cas des cartes réseau est traité séparément dans la Networking Configuration et vous pouvez trouver la configuration des cartes son dans CBLFS.

Pour chacun des périphériques susceptibles d'avoir ce problème (même si le problème n'apparaît pas dans votre distribution Linux actuelle), trouvez le répertoire correspondant sous /sys/class ou /sys/block. Pour les périphériques vidéo, cela peut être /sys/class/video4linux/videoX. Calculez les attributs qui identifient de façon unique un périphérique (normalement basé sur l'ID du fabricant et du produit et/ou les numéros de série) :

udevadm info -a -p /sys/class/video4linux/video0

Puis, écrivez des règles qui créent les liens symboliques, comme :

cat >/etc/udev/rules.d/83-duplicate_devs.rules << EOF

# Liens symboliques constants pour webcam  et tuner
KERNEL=="video*", SYSFS{idProduct}=="1910", SYSFS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", SYSFS{device}=="0x036f", SYSFS{vendor}=="0x109e", \
    SYMLINK+="tvtuner"

EOF

Il en résulte que les périphériques /dev/video0 et /dev/video1 renvoient encore de manière aléatoire au tuner et à la webcam (et donc ne devrait jamais être utilisé directement), mais il y a des liens smboliques /dev/tvtuner et /dev/webcam qui pointent toujours vers le bon périphérique.

Vous pouvez trouver plus d'informations sur l'écriture de règles Eudev dans /usr/share/doc/udev/writing_udev_rules/index.html.