Périphériques
De Diablotins.org.
| Périphériques et pilotes
|
| ||
| Un périphérique, ou device(9), est par définition, un matériel connecté et utilisé par votre ordinateur;
|
Sommaire |
Système
Le noyau GENERIC vous propose une une liste de pilote divers et variés
*.ko*, pour kernel object -
qui seront inclus au démarrage de la machine.
Pour beaucoup d'entre eux, vous avez aussi la possibilité de charger ou décharger les pilotes en tant que modules.
Certains sont ajoutés par un port, vous les retrouverez dans /boot/modules.
Ceux livrés avec le noyau se trouvent dans /boot/kernel.
dev
/dev est le saint des saints, le lieux où s'affichent en tant que fichiers, les périphériques de votre système.
Leur nom est composé d'un raccourci du pilote suivi d'un numéro d'identification.
Nombre d'entre eux sont des classiques:
- stdin, stderr, stdout : les interfaces standard (std) d'entrée, de sortie et d'erreur.
- random, urandom: une entrée aléatoire.
- null: le néant, nulle-part; objet du jeu de mot «envoyer chez dave null» ( /dev/nul ).
- zero: une entrée à zéro.
Au démarrage, une foule d'information va s'afficher sur votre écran, vous pouvez les retrouver en tapant:
dmesg -a tout afficher dmesg seulement tout ce qui précède le démarrage des Scripts RC.
Par exemple:
david:~$ dmesg | grep -i mouse psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: model IntelliMouse Explorer, device ID 4
Le périphérique «psm0» a été créé au démarrage, après détection sur le contrôleur clavier (atkbdc0).
Le démarrage est aussi sauvegardé dans le fichier /var/run/dmesg.boot.
Liste les périphériques détectés sur le système, avec plus ou moins de détails:
devinfo -r liste de ressources triée par périphérique devinfo -u liste de ressources triée par type devinfo -v toutes les ressources
Cet outil va lister les périphériques détectés sur le bus PCI:
pciconf -l tout pciconf -l -c avec les options
Liste des ports USB.
usbconfig list
devfs
Depuis la branche V, ces nœuds ( fichiers ) sont créés automatiquement par le noyau en fonction des périphériques présents. Les démons nommés devd(8) et devfs(8) permettent de d'agir (ou de réagir) lors d’événements survenant sur les périphériques (ajout d'un périphérique, changement d'état sur le lien d'une carte ethernet, notification de l'acpi, etc).
Auparavant (FreeBSD < 5.X), le script “MAKEDEV” se chargeait de créer les nœuds de périphériques et devait être appelé pour créer les nœuds, typiquement lors de l'installation du système ou d'une mise à jour.
Dorénavant, les nœuds sont créés par le noyau. Ce processus va suivre un jeu de règles lors de la détection d'un périphérique afin de créer un nouveau nœud.
Ces règles sont définies dans /etc/devfs.rules et /etc/devfs.conf.
En tant que fichiers, ces périphériques utilisent le même système de crédits.
Le fichier devfs.conf(5) va définir ces crédits, selon les périphériques, au démarrage:
action nœud valeurs
Les actions sont
- Affecter les crédits, perm:
perm acd0 0660
Donne des crédits de lecture et d'écriture au propriétaire et au groupe du nœud acd0 ( lecteur cd ).
- Définir le propriétaire, own:
own lpt0 cups:cups
Le propriétaire de l'imprimante sur le port parallèle est le couple cups.
- Créer des liens sur un périphérique, link:
link acd0 dvdrom
Mon DVDRom ( acd0) est lié à un nouveau périphérique, dvdrom.
Le fichier devfs.rules(5), lui va donner un ensemble de règles à ddevfs(5) au démarrage et au delà:
[usb_key=1] add path 'da2*' mode 0664 user root group cdrom
Ajoute la règle «donner des crédits de lecture et d'écriture à l'utilisateur root et au groupe cdrom ainsi qu'un crédit de lecture à tous les autres, sur les nœuds commençant par da2.
Cette règle est incluse dans l'ensemble usb_key. Activez le dans /etc/rc.conf par:
devfs_system_ruleset="usb_key"
Un autre exemple, à la volée:
devfs rule -s 10 add path 'da*' mode 0660 defvs ruleset 10 devfs rule applyset
Par défaut, devfs(8) donne
user root group operator mode 0620
Voix pincée de Jipé Belmondo:
«Et maintenant, qu'est-ce qu'on fait ?»©
devd
Réponse grave de M.Constantin:
«On continue la mission»©.
Les nœuds sont créés, certes, mais on peut mieux faire automatiquement.
C'est le rôle de devd(8) qui va consulter /etc/devd.conf et /usr/local/etc/devd.conf pour manipuler les périphériques.
Il est conseillé de laisser /etc/devd.conf tranquille et de créer ses règles dans /usr/local/etc/devd.conf.
Les règles sont un ensemble d'actions à exécuter lorsqu'un événement survient sur un périphérique, suivant une priorité
Événement priorité
{
identifier le périphérique
action associée
}
Les événements sont:
- Attach: se produit lorsqu'un matériel est détecté et qu'un pilote y est attaché.
- Detach: Le système a détaché le pilote du périphérique. (rare )
- nomatch: le système a détecté un périphérique mais ne sais pas quel pilote lui attacher.
- notify: Événement lancé par le noyau ou le pilote à la console.
- Ces événements peuvent aussi être des messages «ATTACH» ou «DETACH» liés aux précédents.
Ensuite, devd(8) va identifier le périphérique, selon les informations qu'il peut avoir:
match <Chaine type> <valeur>
- Soit, déterminer si l'événement correspond à une certaine catégorie de périphériques:
match "vendor" "0x0854"
- Ici, le périphérique est identifié par les éléments qu'il reporte au noyau lorsqu'il est interrogé.
- Voici la liste des catégories reconnues:
bus bus
slot Emplacement
function Fonctions
cisproduct Produits CIS
cisvendor Fournisseurs CIS
manufacturer Constructeur
vendor Fournisseur
subvendor Fournisseur, deuxième chaîne.
product Type de matériel
class Classe
device Identifiant
device-name Périphérique associé
subdevice Identifiant, deuxième chaîne.
serial Numéro de série
notify événement
system Système
subsystem Sous-système
type type d'événement.
- device-name, media-type, subdevice sont des raccourcis.
Enfin, l'action à exécuter:
action "scripts, démons et autres ordres"
Voici donc une règle:
Bidon 0 {
match "system" "toto"
action "echo toto"
}
hal & dbus
Dès l'apparition d'un nouveau périphérique, une action peut-être lancée; mais, certains logiciels peuvent avoir besoin de cette information.
Afin de se tenir au courant de ce qui se trâme dans le monde de devd(8), hald va mettre devd sur écoute et indiquer à tous ceux qui se sont inscrits à son service les événements concernés.
Ceci à l'aide d'un protocole particulier, qui permet à plusieurs applications de communiquer entre elles, dbus.
Activez les dans /etc/rc.conf
hald_enable="YES" dbus_enable="YES"
Attention nombre de client exige que le système de fichier vituel procfs soit monté.
N'oubliez pas de le déclarer dans /etc/fstab.
Les fichier de configuration de dbus se trouvent dans /usr/local/etc/dbus-1/, ceux de hald dans /usr/local/etc/hald.
vous retrouverez la liste des périphériques de votre système en tapant:
lshal
Sous forme d'arbre:
lshal -t
Détaillez un seul périphérique:
lshal -u storage_model_DVD_RW__DVR_112D
Vous avez là une foule d'informations qui vont signifier aux logiciels ce qu'ils peuvent ou doivent faire ou proposer aux utilisateurs lors d'un événement sur ce périphérique.
Ces informations proviennent d'une base générale régulièrement mise à jour.
Pour lister les périphériques ayant une compétence particulière:
david:~$ hal-find-by-capability --capability storage /org/freedesktop/Hal/devices/storage_serial_WD_WCAJ91519152 /org/freedesktop/Hal/devices/storage_model_DVD_RW__DVR_112D
On retrouve mon disque dur, WD_WCAJ91519152 et mon lecteur/graveur de DVD, DVD_RW__DVR_112D.
Et, je viens de me rendre compte que, sur ma pauvre machine, outre l'USB, le lecteur CD a fumé aussi.
david:~$ hal-find-by-capability --capability input /org/freedesktop/Hal/devices/atkbd_0 /org/freedesktop/Hal/devices/psm_0
Surveillez l'activité sur le bus:
lshal -m 18:17:19.387: storage_model_DVD_RW__DVR_112D property storage.removable.media_available = true 18:17:19.865: volume_label_BRS0EFW1 added

