Plug-and-Play-HOWTO | Cerca per titolo, autore, parola chiave | ||||||||
Plug-and-Play-HOWTO di David S. Lawyer, v1.15, Agosto 2007. Semplificando di molto, il meccanismo del Plug-and-Play dice al software (i driver di periferica) dove trovare l'hardware (periferiche): i modem, le schede di rete, le schede audio, le schede video, etc. Il compito di Plug-and-Play è di accoppiare le periferiche fisiche al software (driver) che opera su di esse, stabilendo canali di comunicazione tra la singola periferica ed il suo driver specifico. A questo scopo, PnP allòca ed imposta 4 risorse di bus nell'hardware: gli indirizzi di Input/Output (I/O), le aree di memoria, gli IRQ, i canali DMA (solo per i bus LPC e ISA). Queste quattro risorse vengono a volte chiamate "risorse di primo ordine", oppure semplicemente risorse. Pnp conserva un record di queste informazioni, mettendolo a disposizione dei driver. PnP è un processo che coinvolge più pezzi hardware e più software. In Linux, ogni driver esegue il suo particolare PnP, pur utilizzando il software fornito dal kernel. Il BIOS (hardware) esegue il PnP all'accensione del computer. Un computer è fatto da una CPU (processore), il cui compito è fare calcoli, e da una memoria RAM, di facile e rapido accesso, in cui conservare programmi e dati. Oltre a CPU e RAM, collegato al computer c'è un più o meno ampio numero di periferiche, quali dischi fissi, schede video, tastiere, schede di rete, schede audio, bus USB, porte serieli e porte parallele, etc. Nel passato, la gran parte delle periferiche erano schede elettroniche, bloccate in apposite fessure, dette slot, presenti nel PC. Oggi, molte di queste periferiche si trovano installate on-board, come circuiti elettronici, o chip, della stessa motherboard (scheda madre). Oltre alle periferiche, un computer contiene anche un alimentatore, che serve ad alimentare di corrente elettrica il computer, vari bus, vere e proprie piste di rame, installate direttamente sulla motherboard, che collegano le varie periferiche alla CPU, ed un involucro (case) che contiene tutti questi elementi. Le schede elettroniche installate negli slot della scheda madre (motherboard) possono contenere più di una periferica. Affinchè tutto funzioni correttamente, ogni periferica installata deve essere gestita dal suo driver. Un driver è un software, integrato nel sistema operativo stesso, spesso come modulo, ed eseguito dalla CPU. I driver di periferica vengono associati a file speciali, presenti nella directory: /dev la cui particolarità è di non essere dei veri file, visto che sono presenti solo nella memoria di sistema e non sul disco fisso. Hanno nomi quali hda3, che identifica la terza partizione del disco fisso "a", oppure ttyS1, che identifica la seconda porta seriale, oppure ancora eth0, che identifica la prima scheda di rete ethernet, e così via. Per controllare una periferica, la CPU (sotto il controllo del driver della periferica) le invia comandi e dati e ne preleva dati e informazioni di stato. Naturalmente, affinchè tutto ciò possa avvenire, è necessario che il driver di periferica conosca l'indirizzo della periferica che controlla. Conoscere l'indirizzo della periferica equivale a creare un canale di comunicazione, anche se, in realtà, il canale fisico di comunicazione resta il bus dei dati installato nel PC, bus che viene condiviso da tutte le periferiche. L'indirizzo di una periferica, in realtà, è un range (intervallo) di indirizzi. Addirittura, ad una sola periferica, il sistema potrebbe assegnare più range di indirizzi. Una parte del canale di comunicazione è riservata agli interrupt, segnali utilizzati dalle periferiche per inviare una richiesta urgente al loro driver. Il bus PCI ha tre aree di memoria: I/O, main memory (IO memory) e area di configurazione. Il bus ISA non prevedeva una vera e propria area di configurazione. Per le operazioni di Input e Output con le periferiche, vengono utilizzate le sole aree I/O e IO memory. Gli indirizzi di configurazione sono fissi e non possono essere modificati: quindi, non c'è alcun bisogno di allocarli. Quando la CPU vuole accedere ad una periferica, mette l'indirizzo della periferica sul bus principale (per PCI, il bus degli indirizzi e dei dati). Tutti gli indirizzi (I/O e memoria) condividono lo stesso bus, ma la presenza o l'assenza di voltaggio su determinate linee del bus indica l'area di memoria interessata: I/O, memoria o spazio di configurazione (solo per PCI). In realtà, questa spiegazione è un pochino semplificata: dire ad una periferica PCI che si vuole accedere allo spazio di configurazione è molto più complesso. Gli indirizzi di una periferica sono scritti nei suoi registri, nella periferica fisica stessa. Questi indirizzi non possono essere modificati via software, ma possono essere disabilitati, così da rendere irraggiungibile la periferica. L'indirizzo dell'area di configurazione PCI, invece, non può essere ne modificato, ne disabilitato. Una volta, le periferiche venivano allocate nello spazio di memoria di I/O (I/O address space), ma oggi possono utilizzare anche le aree della memoria di sistema. Uno spazio di indirizzi di I/0 viene chiamato "I/O", "IO", "i/o", "io", "I/O port" o "I/O range". Attenzione a non fare confusione tra le porte di I/O e la memoria "IO memory", che si trova nella memoria di sistema. Le comunicazioni tra la CPU ed una periferica avvengono attraverso le porte di Input/Output (IO port). La CPU scrive i dati o i codici di controllo destinati ad una specifica periferica nell'area I/O della periferica, oppure legge, nella stessa area di I/O, le informazioni di stato della stessa periferica. Diversamente dagli interrupt, le porte non possono essere condivise! Anche le porte di I/O occupano una porzione della memoria di sistema, ovviamente, ma quella porzione non viene utilizzata come area di memoria per le applicazioni o i dati, bensì come area di collegamento con le periferiche esterne, visto che puntano ai loro registri interni. Una volta, era necessario configurare le porte di I/O direttamente sulle schede plug-in (ISA), utilizzando i "jumper", che permettevano di connettersi fisicamente ai pin di indirizzamento della scheda madre. Ai giorni nostri, gli indirizzi vengono negoziati ed assegnati dinamicamente dalle schede hardware e dal computer ospite, in fase di avvio del sistema. Per vedere quali indirizzi I/O sono utilizzati dal vostro computer, leggete il file: /proc/ioports 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc Per allocare gli indirizzi di I/O (o qualche altra risorsa di bus, come gli interrupt sui bus ISA), occorre:
Spesso, il driver esegue entrambi i compiti. Il driver, in realtà, non ha bisogno di impostare un indirizzo di I/O se lo trova già impostato, magari dal BIOS. Una volta che il driver ha trovato l'indirizzo di I/O già impostato, oppure lo ha impostato lui stesso, il gioco è fatto. I due gradi del processo appena descritto sono assimilabili a ciò che accade con gli indirizzi reali. Qualcuno deve apporre, per esempio, il numero civico sulla porta di casa, in modo che quell'indirizzo specifico possa essere trovato. A quel punto, chiunque voglia andare a quell'indirizzo dovrà semplicemente ottenere quell'indirizzo e scriverselo da qualche parte. Per i computer, la periferica hardware deve innanzitutto avere il proprio indirizzo scritto in un proprio registro speciale, poi il driver di periferica dovrà annotarsi quell'indirizzo da qualche parte. Attenzione: queste due operazioni devono essere eseguite entrambe. Eseguirne una sola comporterà sempre dei problemi. Prima che il driver di periferica usi un indirizzo, quell'indirizzo deve essere impostato direttamente nella periferica fisica (per esempio, la scheda elettronica). Tutto ciò che abbiamo appena detto è valido non solo per gli indirizzi di I/O, ma anche per tutte le risorse di bus: range di memoria (Memory Range), IRQ, canali DMA. Eccetto che per gli interrupt, che per il bus PCI non vengono impostati dai registri della scheda, bensì vengono reinstradati agli IRQ da un chip della motherboard. Quindi, lo IRQ assegnato ad una scheda PCI viene scritto nei registri della scheda al solo fine informativo.
|
|||||||||
Plug-and-Play-HOWTO | Disclaimer: questo è un link a contenuti ospitati su server esterni. |