Avanti Indietro Indice

3. La Soluzione Plug-and-Play (PnP)

3.1 Introduzione al PnP

Il termine Plug-and-Play (PnP) ha diversi significati. In senso lato è semplicemente l'autoconfigurazione che avviene quando uno installa un nuovo dispositivo e questo si configura da solo. Nel senso usato in questo HOWTO, la configurazione è solo la configurazione delle risorse-bus PnP e la successiva notifica al gestore del dispositivo. In senso stretto è pure l'impostazione delle risorse-bus in un dispositivo hardware. Si possono pure intendere le specifiche PnP le quali (assieme ad altre cose) specificano come vengono letti e scritti i dati delle risorse PnP nei dispositivi (spesso schede) sul bus ISA. Le specifiche PCI standard (e non quelle PnP) fanno la stessa cosa per il bus PCI.

Il PnP mette in corrispondenza i dispositivi con i relativi driver e specifica i loro canali di comunicazione. Sul bus ISA, prima del Plug-and-Play le risorse-bus erano impostate sui dispositivi hardware tramite ponticelli (jumper). Ai driver software erano invece assegnate tramite file di configurazione (o simili) o interrogando il dispositivo agli indirizzi dove ci si aspettava risiedesse. Il bus PCI ha supportato il qualcosa di simile al PnP fin dall'inizio ed è così stato banale implementarlo per questo bus. Poiché le specifiche del bus PCI non usano il termine PnP, non è chiaro se è o meno lecito chiamare PnP il bus PCI (ma supporta nell'hardware quello che a tutt'oggi è detto PnP).

3.2 Come Funziona (semplificato)

Quanto segue è una panoramica oltremodo semplificata del funzionamento del Plug-and-Play. Il programma di configurazione del PnP (a volte un programma nel BIOS) trova tutti i dispositivi PnP e chiede ad ognuno di essi di quali risorse-bus hanno bisogno. Controlla poi quali risorse-bus (IRQ, ecc.) gli è possibile distribuire. Naturalmente ci sono risorse-bus riservate usate dai dispositivi non PnP (legacy) (se ne è nota la presenza) e non dà via nessuna di queste risorse riservate. Usa poi alcuni criteri (non specificati nelle specifiche PnP) per assegnare le risorse-bus in modo che non ci siano conflitti e che tutti i dispositivi abbiano (se possibile) quello di cui hanno bisogno. Dice poi ad ogni dispositivo fisico quali sono le risorse-bus a lui assegnate e i dispositivi stessi si auto-configurano per usare solo le risorse-bus assegnate. Poi, in qualche modo, i gestori (driver) di dispositivo scoprono quali risorse-bus usano i corrispondenti dispositivi e sono quindi in grado di comunicare attivamente con i dispositivi che controllano.

Per esempio, si supponga che una scheda necessiti di un interrupt (numero di IRQ) e di 1 MB di memoria condivisa. Il programma PnP legge queste richieste dalla scheda. Assegna poi a quest'ultima l'IRQ5 e 1 MB di memoria nello spazio indirizzi, a partire dall'indirizzo 0xe9000000. Però non è sempre così semplice, in quanto la scheda potrebbe specificare che può usare solo certi numeri di IRQ (solo nel caso ISA) o che il MB di memoria deve risiedere entro un ben determinato intervallo di indirizzi. I dettagli sono diversi nel caso di bus PCI o ISA, e sono maggiormente complessi nel secondo caso.

Esistono alcune scorciatoie che il software PnP potrebbe usare. Una di mantenere traccia di come sono state assegnate le risorse-bus nell'ultima configurazione (l'ultima volta che è stato usato il computer) e di riusare queste informazioni. Windows9x e i BIOS PnP usano questa mentre lo fa il Linux standard. Windows9x salva queste informazioni nel suo «Registry» sul disco fisso, mentre un BIOS PnP le salva nella memoria non volatile del PC (detta ESCD); si veda la sezione Il Database ESCD del BIOS).

Sotto Linux ogni dispositivo è a sé e non esiste un registro centralizzato non volatile degli assegnamenti delle risorse. Alcuni driver di dispositivo salvano l'ultima configurazione che hanno usato e la usano la prossima volta che viene acceso il computer. Assumono implicitamente che il resto dell'hardware non abbia bisogno delle risorse-bus che usano loro.

Se i dispositivi ricordassero la propria configurazione precedente, allora non ci sarebbe nessun hardware da configurare al successivo riavvio, però questi sembrano dimenticarsene quando il computer viene spento. Alcuni contengono una configurazione predefinita (che non è necessariamente l'ultima usata). Quindi il programma di configurazione PnP deve essere lanciato ogni volta che viene acceso il PC. Inoltre, se viene aggiunto un nuovo dispositivo, allora dev'essere configurato. L'allocazione delle risorse-bus a questo nuovo dispositivo può comportare il portar via alcune risorse-bus ad un dispositivo preesistente e l'assegnamento a quest'ultimo di risorse-bus alternative che possa usare.

3.3 L'Avvio del PC

Quando il PC viene acceso per la prima volta il chip del BIOS esegue il suo programma per far avviare il computer (il primo passo è la verifica dell'hardware). Se il sistema operativo è immagazzinato nel disco fisso (com'è ormai usuale) allora il BIOS deve essere a conoscenza della presenza del disco fisso. Se il disco fisso è PnP allora il BIOS potrebbe usare i metodi PnP per trovarlo. Inoltre, per permettere all'utente di configurare manualmente il CMOS del BIOS e di rispondere a messaggi d'errore nell'avvio del computer, sono pure necessari uno schermo (una scheda video) e una tastiera. Il BIOS deve quindi a sua volta configurare questi dispositivi.

Un volta che il BIOS ha identificato il disco fisso, la scheda video e la tastiera è pronto per fare il «boot» (caricare il sistema operativo dal disco fisso). Se si è detto al BIOS che si ha un sistema operativo PnP, allora dovrebbe avviare il PC e poi lasciare al sistema operativo la conclusione della configurazione PnP. Diversamente, (prima del boot) un BIOS PnP probabilmente proverà a fare da solo il resto della configurazione PnP dei dispositivi (ma non dei loro gestori).

3.4 Bus

ISA è il vecchio bus dei PC IBM, mentre PCI è il bus più nuovo e veloce di Intel. Il bus PCI è stato progettato per quello che oggi viene detto PnP. Rende semplice (se confrontato con il bus ISA) scoprire come devono essere assegnate le risorse-bus PnP ai dispositivi hardware. Per vedere che cosa è successo si veda il «file» /proc/pci /proc/bus/pci/devices per i kernel 2.2+), i messaggi d'avvio sullo schermo (usare Shift+PageUp per tornare su), o si usino le Utility PCI (per kernel 2.2+).

Nel caso del bus ISA c'è un problema reale con l'implementazione del PnP poiché nessuno aveva in mente il PnP quando è stato progettato il bus ISA e praticamente non ci sono indirizzi I/O disponibili per il PnP da usare per inviare informazioni di configurazione ai dispositivi fisici. Di conseguenza il modo di gestire il PnP nel bus ISA è complicato. Sull'argomento è stato scritto un libro intero (si veda la sezione Libri sul PnP). Tra le altre cose, si richiede che il programma di PnP assegni un «handle» (identificativo) temporaneo a ciascun dispositivo PnP in modo che questi possano essere indirizzati per la successiva configurazione PnP. L'assegnazione di uno di questi «handle» è detta «isolation» (isolamento). Per i dettagli si veda la sezione Isolamento in Appendice.

Probabilmente il bus ISA è destinato a scomparire. Quando lo farà, il PnP sarà più semplice in quanto sarà più facile scoprire come il BIOS ha configurato l'hardware. Ci sarà ancora la necessità di accopiare i gestori di dispositivo con i dispositivi, come pure la necessità di configurare i dispositivi aggiunti quanti il PC è già funzionante. Queste necessità saranno soddisfatte se Linux diventa un sistema operativo PnP.

3.5 Linux Ha Bisogno Di Tener Testa Meglio al PnP

Il PnP (per il bus ISA) è stato inventato da Compaq, Intel e Phoenix. La Microsoft ne è stata il principale promotore. Dal punto di vista di Linux sarebbe stato meglio se il PnP non fosse mai stato «inventato». Alla fine il bus ISA si sarebbe estinto e avrebbe prevalso il bus PCI PnP-like così avremmo avuto a tutti gli effetti un PnP facile da implementare. Ma che piaccia o no, a tutt'oggi la maggior parte del nuovo hardware ISA è PnP e Linux non ha scelta se non quella di gestire efficacemente il PnP. Ma il Linux standard (come quello dei primi del 1999) rende la gestione del PnP complicata (specialmente sul bus ISA) mentre lo scopo del PnP è quello di rendere le cose più semplici.

In un certo senso, Linux è già in qualche modo PnP per il bus PCI. Quando il PC si avvia si possono notare dai messaggi sullo schermo che alcuni driver di dispositivo di Linux spesso trovano i loro corrispondenti dispositivi hardware (e le risorse che il BIOS gli ha assegnato). Ma ci sono situazioni che un sistema operativo PnP potrebbe gestire meglio: 1. Una deficienza di risorse-bus 2. Più di un driver per un dispositivo fisico 3. Un driver attivato che non riesce a trovare il suo dispositivo fisico. 4. Installazioni a caldo di un dispositivo .

Gli utenti di Linux non hanno bisogno di investigare i dettagli del PnP per configurare come si deve i dispositivi PnP ISA. Una soluzione potrebbe essere una versione standardizzata del kernel di Linux che supporti il Plug-and-Play su ISA, PCI e altri bus. È stata scritta una patch per il kernel sebbene la maggior parte dei driver non la supportino. Non è parte standard di Linux. Si veda la sezione Patch per il Kernel.


Avanti Indietro Indice