Oggigiorno molto delle nuove schede interne sono Plug-and-Play (PnP). Sebbene esista del software anche sotto Linux per gestire il PnP, non è sempre facile da usare. Esistono i 6 diversi metodi sottoelencati per tener testa al PnP (ma alcuni potrebbero non essere adatti alla propria situazione). Quale, o quali, si dovrebbe usare dipende dai propri scopi. Quello che ora sembra il più conveniente, a lungo termine potrebbe rivelarsi essere né il più facile né il migliore. Un metodo apparentemente semplice è di non far niente e lasciare al BIOS PnP la configurazione, ma poi si dovranno fare un po' di ricerche per capire quello che il BIOS ha fatto. Un confronto tra tutti questi metodi dovrebbe essere scritto da qualcuno che li ha provati tutti. Potrebbe essere necessario usarne più di uno per portare a buon fine il lavoro.
Ognuna delle suddette possibilità imposterà le risorse-bus nell'hardware. Ma solo le ultime due informeranno il gestore del dispositivo di quanto è stato fatto. Solo l'ultima dice tutto al driver (è il driver). Il modo nel quale viene informato il driver dipende dal driver stesso e può essere necessario far qualcosa per informarlo. Si veda Dire al Driver la Configurazione.
Molti dispositivi sono solamente PnP senza la possibilità di disabilitarlo. Ma per alcuni si potrebbe essere in grado di disabilitare il PnP tramite ponticelli o eseguendo il programma per Windows che si è ricevuto assieme al dispositivo (configurazione senza ponticelli). Ciò eviterà l'onere, spesso complicato, della configurazione PnP. Non si dimentichi di dire al BIOS che queste risorse-bus sono riservate. Ci sono inoltre alcune ragioni per le quali si potrebbe non voler disabilitare il PnP:
Una volta configurati come dispositivi non PnP, non possono essere configurati né da un qualsiasi software PnP né dal BIOS (finché non si spostino i ponticelli e/o si usi ancora il software di configurazione per DOS/Windows).
Se si ha un BIOS PnP, questo può configurare l'hardware. Ciò significa che il proprio BIOS legge le richieste di risorse da tutti i dispositivi e li configura (alloca a loro le risorse-bus). È quasi un rimpiazzo di un SO PnP tranne per il fatto che il BIOS non associa i dispositivi con i loro gestori né dice a quest'ultimi come ha effettuato la configurazione. Normalmente dovrebbe usare la configurazione che ha salvato nella sua memoria non volatile (ESCD). Se trova un nuovo dispositivo e se c'è un conflitto, il BIOS dovrebbe fare le modifiche necessarie alla configurazione e non userà esattamente quello che c'era nell'ESCD.
Il proprio BIOS deve supportare tale configurazione, ma talvolta non le fa correttamente o completamente. Un vantaggio nell'uso del BIOS è che è semplice in quanto nella maggior parte dei casi non c'è niente da impostare (se non dire nel menu CMOS del BIOS che non si ha un SO PnP). Mentre alcuni gestori di dispositivo possono essere in grado di rilevare automaticamente quello che ha fatto il BIOS, in alcuni casi sarà necessario determinarlo da sé (non sempre facile). Si veda la sezione Qual è la Mia Configurazione Corrente?. Un altro vantaggio è che il BIOS fa il suo lavoro prima dell'avvio di Linux cosicché tutte le risorse-bus sono pronte da usare (e trovate) dal driver del dispositivo che parte poco dopo.
Secondo la MS è solo opzionale (non richiesto) che il BIOS PnP sia in grado di effettuare la configurazione PnP dei dispositivi (senza l'aiuto di MS Windows). Ma sembra che la maggior parte dei BIOS fatti dopo il 1996 ?? possano farlo. Si dovrebbe inviare una nota di ringraziamento se lo fanno nel modo corretto. Configurano sia il bus ISA che il bus PCI, ma mi dicono che alcuni BIOS vecchi riescano a configurare solo il bus PCI. Per saperne di più sul proprio BIOS, si cerchi nel Web. Per piacere, non si chieda a me in quanto non ho dati in proposito. I dettagli del BIOS che si può voler sapere potrebbero essere difficili da trovare (o addirittura non disponibili). Alcuni BIOS hanno minime capacità PnP e provano girano la parte più difficile della configurazione alle utility per Windows. Se questo succede si deve trovare un altro metodo (come le isapnptools) o provare ad impostare il database ESCD se il BIOS ne ha uno. Si veda la sezione seguente.
Il BIOS mantiene in un database non volatile una configurazione PnP che proverà ad usare. È detta ESCD (Extended System Configuration Data, ovvero Dati di Configurazione Estesa del Sistema). Ancora, la presenza dell'ESCD è opzionale, ma la maggior parte dei BIOS ce l'hanno. L'ESCD non solo immagazzina la configurazione delle risorse di tutti i dispositivi PnP ma contiene inoltre le informazioni di configurazione dei dispositivi non PnP (e se li segna come tali) in modo da evitare conflitti. I dati dell'ESCD sono solitamente salvati in un chip e rimangono integri quando viene tolta l'alimentazione, ma qualche volta sono salvati nel disco fisso??
L'ESCD è pensata per mantenere l'ultima configurazione usata, ma se si usa un programma come isapnp o le utility PCI di Linux (che non aggiornano l'ESCD) allora l'ESCD non saprà niente di quello che si è fatto e non salverà questa configurazione nell'ESCD. Un buon SO PnP aggiorna l'ESCD così la si può usare successivamente per tutti i SO non PNP (come il Linux standard). MS Windows può fare questa cosa solo in casi speciali. Si veda la sezione Usare Windows per Impostare l'ESCD.
Per usare quanto impostato nell'ESCD ci si assicuri di aver impostato «Not a PnP OS» («SO non PnP») o simile nel BIOS. Allora ogni volta che il BIOS parte (prima che sia caricato il SO Linux) dovrebbe configurare le cose in questo modo. Se il BIOS rileva una nuova scheda PnP che non è nell'ESCD, allora deve allocare le risorse-bus alla scheda e aggiornare l'ESCD. Potrebbe anche dover cambiare le risorse-bus assegnate a una scheda PnP già esistente e modificare l'ESCD di conseguenza.
Se ogni dispositivi ha salvato la sua ultima configurazione nel proprio hardware, non sarebbe necessaria la configurazione dell'hardware ogni volta che si accende il PC. Ma non funzionano in questo modo e quindi tutti i dati dell'ESCD devono essere mantenuti corretti se si usa il BIOS per il PnP. Ci sono alcuni BIOS che non hanno una ESCD ma hanno un po' di memoria non volatile per immagazzinare informazioni su quali risorse-bus siano riservate per l'uso con schede non PnP. Molti BIOS hanno entrambe le cose.
Se il BIOS non imposta l'ESCD nel modo che si vuole (o nel modo in cui dovrebbe essere) allora sarebbe comodo avere un'utility sotto Linux per impostare l'ESCD. All'inizio del 1999 non ce n'è nessuna. Quindi uno potrebbe ripiegare nell'uso di Windows (se presente nello stesso PC) per farlo.
Ci sono tre modi per usare Windows per provare ad impostare/modificare l'ESCD. Un modo è di usare l'utility ICU progettata per DOS o Windows 3.x. Dovrebbe funzionare bene anche per Windows 9x/2k?? Un altro metodo è di impostare manualmente i dispositivi («forzarli») sotto Windows 9x/2x cosicché Windows metterà queste informazioni nell'ESCD quando viene normalmente chiuso il sistema. Il terzo è solamente per i dispositivi legagy che non sono plug-and-play. Se a Windows è nota la loro presenza e quali sono le risorse-bus che usano, allora Windows dovrebbe mettere queste informazioni nell'ESCD.
Se i dispositivi sono configurati automaticamente da Windows (senza che l'utente gli chieda di «modificare le impostazioni») allora tale configurazione probabilmente non finirà dentro l'ESCD. Naturalmente Windows potrebbe decidere da sé di configurare le cose nello stesso modo di come sono impostate nell'ESCD, cosicché alla fine sono identiche ma per una coincidenza.
I Windows 9x sono sistemi operativi PnP e configurano automaticamente i dispositivi. Mantengono il proprio database PnP ben nascosto nel Registry (salvato in un file binario di Windows). Nel Registry ci sono inoltre un sacco di altre cose relative alla configurazione oltre alle risorse-bus PnP. C'è sia una configurazione corrente delle risorse PnP in memoria che un'altra (forse la stessa) salvata sul disco fisso. Per vedere quella in memoria (?) sotto Windows98 o per forzare delle modifiche si usi «Gestione Periferiche».
In Windows98 ci sono due modi per avviare Gestione Periferiche: 1. Risorse del Computer --> Pannello di Controllo --> Proprietà del Sistema --> Gestione Periferiche. 2. (bottone destro del mouse) Risorse del Computer --> Proprietà --> Gestione Periferiche. Poi in Gestione Periferiche si selezioni il dispositivo (solitamente un processo in più passi se ci sono più dispositivi della stessa classe). Poi si clicchi su «Proprietà» e poi su «Risorse». Per modificare manualmente la configurazione si disabiliti «Usa impostazione automatica» e poi si clicchi su «Cambia Impostazioni». Ora si probi a modificare l'impostazione, ma Windows potrebbe non permettere la modifica. Se lo permette, si è «forzata» una modifica. Un messaggio dovrebbe infomarmare che si sta forzando. Se si vogliono mantenere le impostazioni esistenti mostrate da Windows ma renderle «forzate», allora si dovrà forzare una modifica in qualcosa e poi riforzarla al suo valore originale.
Per vedere cosa è stato «forzato» in Windows98 si veda l'elenco dell'«hardware forzato»: Avvio --> Programmi --> Accessori --> Sistema --> Informazioni sul Sistema --> Risorse Hardware --> Hardware Forzato. Quando si «forza» una modifica di risorse-bus in Windows, dovrebbe mettere tali modificge nell'ESCD (a patto che Windows sia chiuso correttamente). Dalla finestra «Informazioni del Sistema» si possono inoltre ispezionare quali IRQ e porte IO sono allocate sotto Windows.
Anche se Windows non mostra conflitti nelle risorse-bus, potrebbero essercene sotto Linux. Questo perché Windows potrebbe assegnare risorse-bus differenti da quello che fa l'ESCD. Nel raro caso in cui tutti i dispositivi sotto Windows siano legagy oppure siano stati «forzati», allora le configurazioni di Windows e dell'ESCD dovrebbero essere identiche.
Se si aggiunge un nuovo dispositivo PnP e si ha il BIOS impostato a «nessun SO PnP», allora il BIOS dovrebbe configurarlo automaticamente e salvare la configurazione nell'ESCD. Se è un dispositivo legacy non PnP (o uno reso tale con i jumper, ecc.) allora ci sono un po' di opzioni per gestirlo.
Si può dire direttamente al BIOS (tramite il menu di configurazione CMOS) che certe risorse-bus (come gli IRQ) sono riservate e che non devono essere allocate dal PnP. Ciò non mette queste informazioni nell'ESCD. Ma ci può essere una scelta nel menu del BIOS che specifica quando, in caso di conflitto, queste scelte CMOS hanno o meno priorità su quanto è salvato nell'ESCD. Un altro metodo è di eseguire ICU sotto DOS/Windows. Un altro ancora è di installare manualmente il dispositivo sotto Windows 9x/2k e poi assicurarsi che la sua configurazione sia «forzata» (si veda la sezione precedente). Se è «forzata» Windows dovrebbe aggiornare l'ESCD quando si spegne il PC.
Sfortunatamente, buona parte della documentazione per gli isapnptools
è ancora difficile da comprendere a meno che non si conoscano le basi
del PnP. Questo HOWTO dovrebbe aiutare, come d'altronde aiuta la FAQ
distribuita con il programma. isapnp
è solo per i dispositivi PnP
sul bus ISA (non PCI). L'esecuzione del programma per Linux «isapnp»
all'avvio del sistema configurerà tali dispositivi secondo i valori
delle risorse specificate nel file /etc/isapnp.conf. È
possibile creare automaticamente questo file di configurazione, ma poi
lo si deve modificare manualmente per scegliere tra le varie
opzioni. Con isapnp, un driver di dispositivo che sia parte del kernel
può essere eseguito troppo presto, cioè prima che isapnp abbia
impostato indirizzi, ecc. nell'hardware. Ciò risulta nel mancato
rilevamento del dispositivo da parte del driver. Il driver prova negli
indirizzi giusti, ma tali indirizzi non sono ancora stati impostati
nell'hardware.
Se la propria distribuzione installa automaticamente gli isapnptools,
allora probabilmente isapnp è già automaticamente eseguito all'avvio.
In questo caso, tutto quel che si deve fare è modificare il file
/etc/isapnp.conf come spiegato da «man isapnp.conf
». Si noti che
questa cosa è equivalente alla configurazione manuale del PnP poiché
si fanno decisioni su come configurare il tutto modificando tale file
di configurazione.
Se si usa «isapnp» in questo modo e si ha un BIOS
PnP, si dovrebbe dire al BIOS (quando lo si configura) che si ha un
sistema operativo PnP ??
Se si esegue isapnp una volta per configurare i dispositivi ISA PnP, ma l'esecuzione di isapnp fallisce ogni volta che il computer viene avviato, allora se si ha MS Windows (95 o 98) sullo stesso PC la cosa potrebbe essere dovuta al seguente problema: quando si usa MS Windows (95 o 98), Windows potrebbe configurare diversamente le schede PnP in modo tale che non funzioneranno correttamente (se non del tutto) quando si torna in Linux. Si può usare il programma «pnpdump» per aiutarsi nella creazione del file di configurazione. Questo praticamente crea un file di configurazione anche se lo si deve modificare un po' prima di poterlo usare. Contiene alcuni commenti per aiutare nella modifica. Se si usa «isapnp» per configurare e si ha un BIOS PnP, probabilmente si dovrà dire al BIOS che non si ha un sistema operativo PnP poiché si vuole che il BIOS si occupi di configurare i dispositivi PCI. Sebbene il BIOS possa configurare i anche dispositivi ISA, isapnp comunque lo rifarà.
La terminologia usata nel file /etc/isapnp.conf all'inizio può sembrare un po' ostica. Per esempio per un indirizzo IO pari a 0x3e8 si potrebbe invece vedere «(IO 0 (BASE 0x3e8))». L'«IO 0» indica che questo è il primo (zeresimo) intervallo di indirizzi IO che questa dispositivo usa. Un altro modo per esprimire questa cosa sarebbe: «IO[0] = 0x3e8» ma isapnp non lo fa in questo modo. «IO 1» indica il secondo intervallo di indirizzi usato da questo dispositivo, ecc. «INT 0» ha un significato simile ma per gli IRQ (interrupt). Una singola scheda può contenere diversi dispositivi fisici e la spiegazione di prima riguarda solamente uno di questi.
Il nuovo pacchetto delle Utility PCI (= pciutils, incorrettamente detto «pcitools»), dovrebbe permettere di effettuare manualmente la configurazione PnP sul bus PCI. «lspci» elenca le risorse-bus, mentre «setpci» imposta l'allocazione delle risorse nei dispositivi hardware.
David Howells ha creato una patch per farlo chiamata «Linux Kernel Configuration/Resource Manager» (talvolta chiamata semplicemente Hardware Configuration Manager). Nel tardo 1999 la patch non era disponibile nel suo sito web. Ciò potrebbe indicare che non c'è una patch disponibile per le versioni recenti del kernel.
Con le patch precedenti il kernel risultante si diceva fosse stabile anche se erano stati segnalati dei bug. La patch include documentazione cone il serial.txt per mostrare come trattare la porta seriale. Fornisce «file» nell'albero /proc cosicché si può vedere cosa sta accadendo ed in uno di questi è possibile inserire comandi attraverso il comando echo per personalizzare la configurazione. Un problema è che la maggior parte dei gestori di dispositivo non sono consci delle funzionalità introdotte da questa patch e quindi per la configurazione si devono usare ancora i tradizionali file di configurazione, ecc. La pagina web è http://www.astarte.free-online.co.uk.
Si si ha Windows9x (o 2k) sullo stesso PC, allora semplicemente si avvii Windows e lo si lasci configurare il PnP. Poi si avvi Linux da Windows (o da DOS). È stato segnalato che Windows cancella tutti gli IRQ dai registri dei dispositivi PCI. Allora Linux segnala questa cosa dicendo che trova un IRQ zero. Quindi si potrebbe non essere in grado di usare questo metodo.
Alcuni gestori di dispositivo useranno i metodi PnP per impostare le risorse-bus nell'hardware ma solo per i dispositivo che controllano. Poiché la configurazione l'ha fatta il driver, ovviamente quest'ultimo conosce la configurazione e non è necessario fornirgli queste informazioni.
Il problema in questo caso è duplice. È difficile incorporare tutto questo nel driver, e il driver potrebbe prendere le risorse-bus di cui ha bisogno da altri dispositivi. Rende le cose facili per l'utente, ma un kernel Linux PnP sarebbe migliore. Si veda Linux Ha Bisogno Di Tener Testa Meglio al PnP.