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 |
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
|
cdroms | cpu | discs | floppy |
ide | input | loop | misc |
netlink | printers | pts | pty |
scsi | sg | shm | sound |
sr | usb | vc | vcc |
lr-xr-xr-x 1 root root 33 oct
29 20:51 /dev/hda1 -> ide/host0/bus0/target0/lun0/part1
|
# 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!
# pseudo-tty devices. This is
necessary so that mesg(1) can later be used to # enable/disable talk
requests and wall(1) messages.
# NB: Do NOT change the following!
# Do not do this for pseudo-terminal devices
REGISTER ^pt[sy]/.* IGNORE
CHANGE ^pt[sy]/.*
IGNORE
DELETE ^pt[sy] IGNORE
REGISTER ^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
# PERMISSIONS owner_and_group
access_mode
REGISTER v4l/.* PERMISSIONS
root.video 660
LOOKUP ^video$
CFUNCTION GLOBAL mksymlink ${mntpnt}/v4l/video0 video REGISTER
^v4l/video0 CFUNCTION GLOBAL mksymlink ${devpath}
video
# 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
#REGISTER .* CFUNCTION /lib/security/pam_console_apply_devfsd.so
pam_console_apply_single $devpath
#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
LOOKUP ^cdrom$ CFUNCTION GLOBAL mksymlink cdroms/cdrom0 cdrom
REGISTER ^cdroms/cdrom0$
CFUNCTION GLOBAL mksymlink $devname cdrom UNREGISTER ^cdroms/cdrom0$
CFUNCTION GLOBAL unlink cdrom
LOOKUP ^mouse$ CFUNCTION GLOBAL mksymlink misc/psaux mouse
REGISTER ^misc/psaux$ CFUNCTION GLOBAL mksymlink $devname mouse
UNREGISTER ^misc/psaux$
CFUNCTION GLOBAL unlink 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
|
kill -s SIGHUP `pidof devfsd`
|
killall -s SIGHUP devfsd
|
# REGISTER .* MKOLDCOMPAT
# UNREGISTER .* RMOLDCOMPAT |
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
|