next up previous contents Next: Attribution et modifications des Up: devfs Previous: devfs   Table des matières  

19.7.1 Fonctionnement général de devfs.

devfs signifie Device File System (ou système de fichier de périphériques). Ce système de gestion de périphériques a été conçu pour éviter les inconvénients associés au répertoire /dev. En effet, la gestion des droits sur les fichiers de /dev est complexe puisqu'à côté des périphériques de votre système, il existe bien d'autres fichiers de périphériques prévus mais non-utilisés. En outre, quand un programme interagit avec un fichier de périphérique, la partition / est automatiquement montée en lecture/écriture alors que souvent le montage en lecture seul suffit. Finalement, /dev ne peut être placé sur une partition séparée car mount nécessite /dev pour monter les partitions.

devfs a été incorporé au noyau LINUX pour corriger ces problèmes. Avec devfs, vous ne devez plus vous préoccuper des paires ``majeur/mineur''. Elles sont encore supportées pour des raisons de compatibilité avec le schéma existant, sans être nécessaires toutefois. Pour utiliser devfs, les options:

[*]/dev file system support 
[*]  Automatically mount at boot


doivent être sélectionnées dans le noyau (ces options se trouvent dans la section File Systems - Pseudo filesystems). Voir la section 43.11 pour la sélection des options et la compilation du noyau.

devfs utilise des sous-répertoires pour améliorer la lisibilité du répertoire /dev. Ainsi, les périphériques IDE sont logés dans le sous-répertoire /dev/ide/. Les périphériques SCSI se retrouvent dans /dev/scsi/. Tous les deux présentent la même structure de sous-répertoires à un niveau encore plus bas.

Les disques SCSI et IDE sont contrôlés par un adaptateur host (hôte) se trouvant sur la carte mère ou sur une carte séparée. Comme il peut y avoir différents canaux (appelés bus), il peut y avoir plusieurs IDs sur chaque canal, permettant d'identifier un disque de manière univoque. Cet identifiant est appelé la cible (ou target en anglais). Pour les périphériques SCSI, il peut y avoir divers LUN (Logic Unit Number ou encore numéro d'unité logique).

Donc, en considérant /dev/hda1, la structure du répertoire /dev/ide se présente de la manière suivante pour ce périphérique:

/dev/ide/host0/bus0/target0/lun0/part1 


L'arborescence de /dev devrait ressembler à:

cdroms cpu discs floppy
ide input loop misc
netlink printers pts pty
scsi sg shm sound
sr usb vc vcc


Pour assurer une compatibilité avec le système simple vu à la section 19.6, le démon devfsd établit des liens symboliques entre les ``anciens'' noms et les nouvelles dénominations de fichiers. Par exemple, on a pour /dev/hda1:

lr-xr-xr-x 1 root root 33 oct 29 20:51 /dev/hda1 -> ide/host0/bus0/target0/lun0/part1  


Le fichier de configuration de devfs est /etc/devfsd.conf. Il ressemble à ceci:

# Sample /etc/devfsd.conf configuration file.  
# Richard Gooch <rgooch@atnf.csiro.au> 3-JUL-2000  
#  
# The Gentoo Linux Team - http://www.gentoo.org/  
# - Many fixes, etc  
#  
# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/devfsd.conf,v 1.16 2003/05/18 21:51:34 azarah Exp $

# Enable full compatibility mode for old device names. You may comment these # out if you don't use the old device names. Make sure you know what you're # doing!  
 
REGISTER .* MKOLDCOMPAT  
UNREGISTER .* RMOLDCOMPAT 
 
# You may comment out the above and uncomment the following if you've  
# configured your system to use the original "new" devfs names or the really # new names  
#REGISTER vc/.* MKOLDCOMPAT  
#UNREGISTER vc/.* RMOLDCOMPAT  
#REGISTER pty/.* MKOLDCOMPAT  
#UNREGISTER pty/.* RMOLDCOMPAT  
#REGISTER misc MKOLDCOMPAT  
#UNREGISTER misc RMOLDCOMPAT 
 
# You may comment these out if you don't use the original "new" names REGISTER .* MKNEWCOMPAT UNREGISTER .* RMNEWCOMPAT 
 
# Enable module autoloading. You may comment this out if you don't use # autoloading  
LOOKUP .* MODLOAD 
 
# Uncomment the following if you want to set the group to "tty" for the

# pseudo-tty devices. This is necessary so that mesg(1) can later be used to # enable/disable talk requests and wall(1) messages.  
REGISTER ^pty/s.* PERMISSIONS -1.tty 0600  
REGISTER ^pts/.* PERMISSIONS -1.tty 0600 
# Uncomment this if you want permissions to be saved and restored

# NB: Do NOT change the following!

# Do not do this for pseudo-terminal devices

REGISTER ^pt[sy]/.* IGNORE

CHANGE ^pt[sy]/.* IGNORE 
CREATE ^pt[sy]/.* IGNORE

DELETE ^pt[sy] IGNORE

REGISTER ^log IGNORE 
CHANGE ^log IGNORE 
CREATE ^log IGNORE 
DELETE ^log IGNORE

REGISTER .* COPY /lib/dev-state/$devname $devpath

CHANGE .* COPY $devpath /lib/dev-state/$devname

CREATE .* COPY $devpath /lib/dev-state/$devname

DELETE .* CFUNCTION GLOBAL unlink /lib/dev-state/$devname

RESTORE /lib/dev-state 
 
# You can force default like this :

# PERMISSIONS owner_and_group access_mode 
 
# Video4Linux devices

REGISTER v4l/.* PERMISSIONS root.video 660 

LOOKUP ^video$ CFUNCTION GLOBAL mksymlink ${mntpnt}/v4l/video0 video REGISTER ^v4l/video0 CFUNCTION GLOBAL mksymlink ${devpath} video  
UNREGISTER ^v4l/video0 CFUNCTION GLOBAL unlink video 
 
# ALSA/OSS stuff

# Comment/change these if you want to change the permissions on

# the audio devices

LOOKUP snd MODLOAD ACTION snd

LOOKUP dsp MODLOAD

LOOKUP mixer MODLOAD

LOOKUP midi MODLOAD

REGISTER sound/.* PERMISSIONS root.audio 660

REGISTER snd/.* PERMISSIONS root.audio 660 
 
# Uncomment this to let PAM manage devfs

#REGISTER .* CFUNCTION /lib/security/pam_console_apply_devfsd.so pam_console_apply_single $devpath 
 
# Autoload the sg module if generic scsi driver compiled as module.

#LOOKUP ^sg$ MODLOAD ACTION sg

# Give the cdrw group write permissions to /dev/sg0

# This is done to have non root user use the burner (scan the scsi bus) #REGISTER ^scsi/host.*/bus.*/target.*/lun.*/generic PERMISSIONS root.cdrw 660

# General note for the following auto creation of symlinks:

#

#   If you change the device that the symlink points to,

#   you should also remove the symlink before restarting

#   devfsd 
 
# Create /dev/cdrom for the first cdrom drive

LOOKUP ^cdrom$ CFUNCTION GLOBAL mksymlink cdroms/cdrom0 cdrom

REGISTER ^cdroms/cdrom0$ CFUNCTION GLOBAL mksymlink $devname cdrom UNREGISTER ^cdroms/cdrom0$ CFUNCTION GLOBAL unlink cdrom 
 
# Create /dev/dvd for the second cdrom drive  
# (change 'cdroms/cdrom1' to suite your setup)  
# NOTE: We add the fully qualified path here, else some apps  
# have problems to resolve the true device (drip comes to mind)  
#LOOKUP ^dvd$ CFUNCTION GLOBAL mksymlink ${mntpnt}/cdroms/cdrom1 dvd #REGISTER ^cdroms/cdrom1$ CFUNCTION GLOBAL mksymlink ${devpath} dvd #UNREGISTER ^cdroms/cdrom1$ CFUNCTION GLOBAL unlink dvd 
 
# Create /dev/cdrw for the first cdrom on the scsi bus  
# (change 'sr0' to suite your setup)  
#LOOKUP ^cdrw$ CFUNCTION GLOBAL mksymlink sr0 cdrw  
#REGISTER ^sr0$ CFUNCTION GLOBAL mksymlink $devname cdrw  
#UNREGISTER ^sr0$ CFUNCTION GLOBAL unlink cdrw 
 
# Create /dev/mouse

LOOKUP ^mouse$ CFUNCTION GLOBAL mksymlink misc/psaux mouse

REGISTER ^misc/psaux$ CFUNCTION GLOBAL mksymlink $devname mouse

UNREGISTER ^misc/psaux$ CFUNCTION GLOBAL unlink mouse 
 
# Manage USB mouse

REGISTER ^input/mouse0$ CFUNCTION GLOBAL mksymlink $devname usbmouse UNREGISTER ^input/mouse0$ CFUNCTION GLOBAL unlink usbmouse

REGISTER ^input/mice$ CFUNCTION GLOBAL mksymlink $devname usbmouse UNREGISTER ^input/mice$ CFUNCTION GLOBAL unlink usbmouse 
# Support additional config installed by packages ...  
 
INCLUDE /etc/devfs.d 
 
# devfsd.conf ends here  



Lorsque ce fichier est modifié, le démon devfsd doit être relancé par les commandes suivantes:

kill -s SIGHUP `pidof devfsd` 


ou

killall -s SIGHUP devfsd 


Par défaut, les liens de compatibilité sont activés et certaines distributions GNU/LINUX ne peuvent fonctionner sans eux. Pour les supprimer, commentez les lignes du fichier /etc/devfsd.conf de la manière suivante:

# REGISTER .* MKOLDCOMPAT  
# UNREGISTER .* RMOLDCOMPAT 


Dans ce cas, le système doit être redémarré pour que les modifications soient prises en compte.

Lors du chargement d'un module, devfsd crée automatiquement le fichier périphérique correspondant. Pour désactiver ce comportement par défaut, commentez ou supprimez la ligne associée à la fonction d'autochargement dans /etc/devfsd.conf:

# LOOKUP .* MODLOAD 


next up previous contents Next: Attribution et modifications des Up: devfs Previous: devfs   Table des matières  
1-01-2006