PnP pour les périphériques externes et ajoutés

L'USB (Universal Serial Bus, c'est-à-dire Bus Universel Série) est un bus à grande vitesse sur un câble externe qui se connecte au PC. Le bus externe a ses propres protocoles de communication et n'utilise pas les IRQ, adresses d'entrées/sorties (ou tout autre ressource bus) sur les câbles bus externes. La communication se fait par paquets comme sur Internet, seulement sur des allocations de tranches de temps, ce qui empêche un périphérique de manger le bus si d'autres périphériques en ont besoin. Il existe des tranches de temps libre qui permettent à tout périphérique d'envoyer un message court au contrôleur de bus sans avoir besoin des IRQ sur le bus.

Néanmoins, le contrôleur de bus USB intégré au PC a une IRQ et une adresse sur le bus PCI (ou ISA), utilisées pour la communication entre le CPU et tous les périphériques USB. Donc, il n'y a pas d'allocations de ressources nécessaires pour les périphériques individuels sur le bus USB. Vous pouvez aussi imaginer que tous les périphériques sur le bus USB partagent la même interruption et la même adresse. Si un périphérique est sur l'USB, il a besoin d'un pilote qui comprenne l'USB.

Mais, chaque périphérique USB a un identifiant, comme les cartes du bus PCI. Linux maintient donc une table des identifiants de façon à ce que les pilotes de périphérique puissent les vérifier et trouver ainsi leur périphérique. L'USB supporte aussi le « hot plug ». Pour trouver ce qui est placé sur le bus USB, vous pouvez utiliser un outil généraliste de détection de matériel comme discover ou hwinfo.

« Hot plug » correspond à la connexion d'un périphérique sur un PC (habituellement avec un câble) et à sa détection immédiate. Si nécessaire, il est configuré avec les ressources bus. Son pilote est aussi lancé, peut-être en chargeant le module correspondant. Pour que ceci fonctionne, le matériel utilisé doit être conçu de façon approprié. Vous pouvez utiliser cette fonctionnalité avec certaines cartes PCI (Cardbus), périphériques USB et IEEE 1394 (Firewire).

Lorsqu'un nouveau périphérique est détecté, ses registres sont lus de façon à récupérer un numéro d'identifiant du périphérique. Pour trouver un pilote, Linux doit maintenir une table réalisant la correspondance entre numéro de périphérique et pilote. Cette table existe dans le noyau depuis la version 2.4. Elle est nommée MODULE_DEVICE_TABLE.

« Hot Swap » vous permet de remplacer un ancien périphérique en l'enlevant et en branchant le nouveau. Vous avez donc interverti (swapped) les périphériques. Maintenant, en plus d'être capable de détecter le branchement d'un nouveau périphérique, la suppression d'un ancien périphérique doit aussi être détectée.

Les périphériques externes connectés par le port série via un câble (comme les modems externes) sont aussi appelé Plug-and-Play. Comme seul le port série a besoin de ressources bus (une IRQ et une adresse d'entrées/sorties), il n'y a pas de ressources bus à allouer pour ces périphériques. Dans ce cas, PnP est utilisé uniquement pour l'identification du modem (lire le numéro/code du modèle). Ceci est important dans le cas où ce modem est un modem logiciel (linmodem) et requiert un pilote spécifique. Il existe une spécification PnP pour de tels périphériques séries externes (quelque chose connecté au port série).

Linux ne supporte pas encore ceci ? Pour un modem matériel, le pilote série ordinaire suffira, donc il n'y a pas besoin de chercher un pilote avec serialpnp. Vous devez toujours indiquer au programme de communication sur quel port se trouve le modem. Avec PnP, vous n'auriez même pas besoin de faire ça. Avec l'arrivée des modems logiciels disposant de pilotes Linux (linmodem), il serait bien que les pilotes appropriés s'installent automatiquement via PnP.