Périphériques

De Diablotins.org.


Périphériques et pilotes
Image:brush.png
Un périphérique, ou device(9), est par définition, un matériel connecté et utilisé par votre ordinateur;


en fait, il s'agit surtout d'un composant de votre ordinateur, matériel ou virtuel, auquel est attaché un ou plusieurs pilotes (drivers) pour que le noyau le fasse fonctionner.



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
Projets :