[Linux-bruxelles] Re: Configuration udev

Frederic Peters fpeters at entrouvert.com
Lun 10 Jan 20:58:15 CET 2005


Eric Freyens écrivait :

> > Que voudrais-tu faire?
> Je désire qu'il y aie un lien symbolique entre /dev/hdc et /dev/dvd.
> et un deuxième /dev/hdc vers /dev/cdrom.

/etc/udev/scripts/cdsymlinks.sh et /etc/udev/rules.d/cd-aliases.rules
devraient obtenir un résultat satisfaisant sans effort de ta part,
quelle version d'udev utilises-tu ?


"Courte" explication d'udev
===========================


Dans /etc/udev/rules.d/ tu as les règles qu'udev va appliquer; il
s'agit généralement de liens vers des fichiers dans /etc/udev/, pour
faciliter la maintenance.

Ces fichiers contiennent des lignes pouvant ressemblar à:

BUS="ide",  KERNEL="hd[a-z]",   SYSFS{removable}="1",
  PROGRAM="/etc/udev/scripts/cdsymlinks.sh %k",
  SYMLINK="%c{1} %c{2} %c{3} %c{4} %c{5} %c{6}"

Donc, ici, en présence d'un périphérique ide, dont le "nom noyau" est
hda, hdb... hdz, dont l'attribut "removable" vaut 1, le script
cdsymlinks.sh va être exécuté, en passant à celui-ci %k, c'est-à-dire
le "nom noyau".

Que fait cdsymlinks.sh ?  Il doit renvoyer le lien à créer, par
exemple, simple CD, tu peux appeler à la main cdsymlink.sh hdc et il
t'affichera "cdrom".  En fait, il peut même renvoyer plusieurs liens,
il suffit de les séparer par des espaces.  J'ai donc chez moi, sur mon
lecteur/graveur CD, lecteur DVD, "cdrom cdrw dvd" comme résultat.

Le résultat du script ?  On retourne à la règle udev, SYMLINK=, les
liens vont être créés, lesquels ?  Ceux spécifiés, ici %c{1} sera
remplacé par le premier "mot" du résultat, %c{2} par le second, etc.
Le résultat sera donc chez moi d'avoir /dev/cdrom, /dev/dvd et
/dev/cdrw pointant tout trois vers /dev/hdc.

Je reviens sur ce que j'écrivais, « l'attribut "removable" », d'où
vient celui-ci ?  de sysfs, que tu peux naviguer dans /sys/.  Pour
connaître toutes les infos dispo sur mon hdc, je peux faire:
  udevinfo -a -p /sys/block/hdc
  (ça sort deux pages de résultats, je ne copie/colle pas)

Comment trouver /sys/block/hdc ?  En connaissant /dev/hdc et en
exécutant "udevinfo -q path -n /dev/hdc" (qui donnera /block/hdc)

Il y a un article sur l'écriture de règles udev:
  http://www.reactivated.net/writing_udev_rules.html


Imaginons que la situation actuelle te déplaise, comment faire
simplement ce que tu veux ?

- supprimer les liens cd* dans /etc/udev/rules.d/
- y créer un fichier rules-d-eric.rules contenant:
BUS="ide", KERNEL="hdc", SYMLINK="cdrom"
BUS="ide", KERNEL="hdd", SYMLINK="dvd"

Et hop.  C'est même plus court qu'un script dégueu tapé dans
/etc/init.d/, ça va faire plaisir à Jérôme.


[je ne pensais pas faire un truc si long, s'il n'y a pas trop
d'erreurs, ça pourrait être copié/collé dans un article sur le site.]


        Frédéric






Plus d'informations sur la liste de diffusion Linux-bruxelles