1 760
contributi
mNessun oggetto della modifica |
mNessun oggetto della modifica |
||
Riga 8: | Riga 8: | ||
== Il sottosistema hotplug == | == Il sottosistema hotplug == | ||
Il sottosistema hotplug (dall'inglese: connessione a caldo, | Il sottosistema hotplug (dall'inglese: connessione a caldo, cio� a PC acceso) � un servizio del kernel che provvede a notificare in user space l'avvenuta connessione di un nuovo dispositivo. | ||
Nell'evoluzione del kernel Linux questo servizio ha subito diverse modificazioni, nel tentativo di migliorare ogni volta in termini di prestazioni e | Nell'evoluzione del kernel Linux questo servizio ha subito diverse modificazioni, nel tentativo di migliorare ogni volta in termini di prestazioni e flessibilit�. | ||
Nei kernel 2.4 l'interfaccia tra i driver e i programmi era fornita assieme a tutte le configurazioni del kernel stesso tramite il filesystem virtuale <tt>/proc</tt>, e i file di dispositivo erano creati staticamente: nella directory <tt>/dev</tt> erano presenti tutti i possibili device file. | Nei kernel 2.4 l'interfaccia tra i driver e i programmi era fornita assieme a tutte le configurazioni del kernel stesso tramite il filesystem virtuale <tt>/proc</tt>, e i file di dispositivo erano creati staticamente: nella directory <tt>/dev</tt> erano presenti tutti i possibili device file. | ||
Nel tentativo di migliorare il sistema venne implementato devfs, un altro filesystem virtuale, che si occupava solo dell'interazione programmi-driver, separando | Nel tentativo di migliorare il sistema venne implementato devfs, un altro filesystem virtuale, che si occupava solo dell'interazione programmi-driver, separando cos� la gestione di questi da quella del kernel. | ||
A partire dal kernel 2.6 devfs | A partire dal kernel 2.6 devfs � stato progressivamente abbandonato e sostituito dal sysfs, ancora un filesystem virtuale, che adotta una nuova e unificata interfaccia verso i driver e che risulta migliore di tutte le implementazioni passate. | ||
Qualsiasi sia l'interfaccia che il kernel mette a disposizione, | Qualsiasi sia l'interfaccia che il kernel mette a disposizione, � necessario in user space un programma che si occupi di ricevere le notifiche di hotplug e compiere le azioni necessarie per l'utilizzo delle periferiche notificate (caricare moduli, eseguire script ed, eventualmente, creare file di dispositivo in <tt>/dev</tt>). | ||
Prima di udev il programma che svolgeva questo compito era stato chiamato, con poca fantasia, hotplug. | Prima di udev il programma che svolgeva questo compito era stato chiamato, con poca fantasia, hotplug. | ||
Hotplug | Hotplug � tutt'ora in grado di svolgere il suo compito, ma ha alcune limitazioni che si sta tentando di superare: | ||
* | *� uno script bash, quindi � lento. Notare che la cosa � ininfluente per gli utenti comuni, a meno che non si connettano decine di periferiche al minuto ;-) | ||
*sempre a causa della sua natura di script, occupa molto | *sempre a causa della sua natura di script, occupa molto pi� spazio di un programma C, considerato anche che necessita dell'interprete /bin/sh. Anche che questo fattore non tocca direttamente un utente comune, ma � invece fondamentale per chi sta riorganizzando il processo di boot per implementare un sistema di hotplug dentro ad un nuovo tipo di initrd: l'initramfs. | ||
*deve funzionare anche sui kernel 2.4, quindi non si appoggia al sysfs, perdendo in performance e | *deve funzionare anche sui kernel 2.4, quindi non si appoggia al sysfs, perdendo in performance e funzionalit�. | ||
*necessita di una directory /dev statica (nota che il devfs | *necessita di una directory /dev statica (nota che il devfs � ormai in disuso) | ||
== Cos' | == Cos'� udev == | ||
Udev | Udev � un programma in user space in grado ricevere le notifiche del sottosistema hotplug dei kernel 2.6. A partire dalla versione 0.070 � in grado di fare tutto quello che faceva hotplug per i kernel 2.4, ma � molto pi� veloce e leggero (� scritto in C). In pi� udev � in grado di creare dinamicamente i device file (quelli in <tt>/dev</tt>) per ogni periferica che viene rilevata nel sistema. | ||
Udev si appoggia unicamente al sysfs. Questo fatto ha il grande vantaggio di poter usufruire appieno della nuova e potente interfaccia di cui | Udev si appoggia unicamente al sysfs. Questo fatto ha il grande vantaggio di poter usufruire appieno della nuova e potente interfaccia di cui � stato dotato il kernel 2.6 (il sysfs, appunto) per la comunicazione tra i programmi in user space e i driver delle periferiche in kernel space, includendo nuove funzionalit� e migliore controllo sui driver stessi. L'unico svantaggio consiste nel fatto che non tutti i driver, al momento in cui si scrive, sono stati aggiornati per utilizzare il sysfs. | ||
Udev | Udev � un programma molto potente e flessibile che, occupandosi direttamente della creazione dei file di dispositivo (device file), permette un controllo molto accurato nella gestione degli stessi, dando la possibilit� all'amministratore di impostare in modo personalizzato tutti i loro attributi (nome, permessi, proprietario, ecc.) | ||
Tramite delle regole (udev rules) si possono assegnare nomi fissi a determinati dispositivi (a prescindere, ad esempio, dalla porta usata per collegare la periferica). Inoltre | Tramite delle regole (udev rules) si possono assegnare nomi fissi a determinati dispositivi (a prescindere, ad esempio, dalla porta usata per collegare la periferica). Inoltre � possibile richiamare un certo programma/script non appena un dispositivo viene riconosciuto dal sistema. | ||
Udev non si occupa tuttavia di caricare i moduli necessari al funzionamento del dispositivo, infatti questi <b>devono</b> essere | Udev non si occupa tuttavia di caricare i moduli necessari al funzionamento del dispositivo, infatti questi <b>devono</b> essere gi� caricati per permettere ad udev di riconoscere la periferica e creare il corrispondente device file. | ||
Sulla stable ('''sarge''') udev | Sulla stable ('''sarge''') udev � presente nella versione 0.056 e viene usato in accoppiata con hotplug, che si occupa di caricare i driver delle periferiche. | ||
In '''etch''' (attuale testing) e '''sid''' udev ha invece sostituito anche Hotplug. | In '''etch''' (attuale testing) e '''sid''' udev ha invece sostituito anche Hotplug. | ||
Questa guida | Questa guida � dedicata alla versione di udev attualmente in etch. | ||
== Il nuovo udev == | == Il nuovo udev == | ||
Dalla versione 0.070 in poi udev ha sostituito completamente hotplug. I driver delle periferiche rilevate vengono caricati tutti automaticamente durante il boot. Per fare un esempio, se al boot vengono trovate delle porte usb, | Dalla versione 0.070 in poi udev ha sostituito completamente hotplug. I driver delle periferiche rilevate vengono caricati tutti automaticamente durante il boot. Per fare un esempio, se al boot vengono trovate delle porte usb, verr� automaticamente caricato il modulo <tt>usb-storage</tt> che permetter� (tra le altre cose) di usare eventuali chiavette usb. | ||
Per usare questa versione di udev | Per usare questa versione di udev � necessario un kernel 2.6.12 o superiore con le opzioni hotplug (CONFIG_HOTPLUG) e tmpfs (CONFIG_TMPFS) attivate. Le opzioni CONFIG_PNP, CONFIG_ISAPNP, CONFIG_PNPBIOS e CONFIG_PNPACPI sono altamente raccomandate per consentire il caricamente automatico di importanti driver. | ||
A partire dal kernel 2.6.15-rc1 | A partire dal kernel 2.6.15-rc1 � stata introdotta la nuova implementazione del driver model, la quale presenta nuove feature e una migliore organizzazione dei contenuti di sysfs. Per gestire correttamente i vari dispositivi � quindi obbligatorio dotarsi di una versione di udev pari o superiore alla 0.071. | ||
Il pacchetto hotplug deve essere rimosso manualmente, anche se non dovrebbe creare problemi se restasse installato. | Il pacchetto hotplug deve essere rimosso manualmente, anche se non dovrebbe creare problemi se restasse installato. | ||
Si | Si pu� disabilitare udev aggiungendo al boot il parametro del kernel <tt>UDEV_DISABLED=yes</tt> in grub o lilo. Alternativamente si pu� configurare in <tt>/etc/udev/udev.conf</tt> una directory diversa da <tt>/dev</tt> per la creazione dei device file. | ||
== Come funziona udev == | == Come funziona udev == | ||
Quando un driver viene caricato, rende disponibili delle informazioni in <tt>/sys</tt> e udev viene eseguito per leggerle e creare il device file appropriato. | Quando un driver viene caricato, rende disponibili delle informazioni in <tt>/sys</tt> e udev viene eseguito per leggerle e creare il device file appropriato. | ||
Quando si collega una nuova periferica viene generato un evento di hotplug che viene intercettato non | Quando si collega una nuova periferica viene generato un evento di hotplug che viene intercettato non pi� da <tt>/sbin/hotplug</tt> bens� da <tt>/sbin/udevsend</tt> (il gestore degli eventi hotplug � indicato in <tt>/proc/sys/kernel/hotplug</tt>). | ||
Questo significa che: | Questo significa che: | ||
* i moduli non possono essere caricati su richiesta quando un'applicazione cerca di aprire un suo dispositivo, | * i moduli non possono essere caricati su richiesta quando un'applicazione cerca di aprire un suo dispositivo, perch� il dispositivo non c'� ancora! | ||
* | * poich� i moduli non vengono caricati su richiesta, se per qualche motivo i driver non possono essere caricati automaticamente durante il boot, bisogner� aggiungerli ad /etc/modules (oppure usare modconf ;-)). | ||
* alcuni moduli non sono dei driver di un dispositivo e non possono essere caricati automaticamente da udev, devono quindi essere elencati in /etc/modules anch'essi. | * alcuni moduli non sono dei driver di un dispositivo e non possono essere caricati automaticamente da udev, devono quindi essere elencati in /etc/modules anch'essi. | ||
* alcuni driver non sono stati ancora portati su sysfs, e udev non | * alcuni driver non sono stati ancora portati su sysfs, e udev non sar� in grado di creare i loro device. Se si usa uno di questi driver � necessario creare il device dopo ogni boot. | ||
In altre parole, su un tipico sistema si potrebbero dover caricare manualmente (usando /etc/modules) dei moduli come ppdev e tun. | In altre parole, su un tipico sistema si potrebbero dover caricare manualmente (usando /etc/modules) dei moduli come ppdev e tun. | ||
Riga 74: | Riga 74: | ||
Nel passaggio da hotplug a udev i seguenti file di configurazione sono diventati obsoleti: | Nel passaggio da hotplug a udev i seguenti file di configurazione sono diventati obsoleti: | ||
; <tt>/etc/hotplug/*.rc</tt> e <tt>*.agent</tt>: i vecchi file di hotplug non vengono | ; <tt>/etc/hotplug/*.rc</tt> e <tt>*.agent</tt>: i vecchi file di hotplug non vengono pi� usati. Le regole di udev in <tt>/etc/udev/rules.d/</tt> possono essere usate per disabilitare selettivamente il coldplugging. | ||
; <tt>/etc/hotplug/usb/*.usermap</tt>: devono essere sostituiti da regole udev. | ; <tt>/etc/hotplug/usb/*.usermap</tt>: devono essere sostituiti da regole udev. | ||
; <tt>/etc/hotplug/blacklist*</tt>: dovrebbero essere sostituite da direttive di configurazione di modprobe (ma per adesso modprobe | ; <tt>/etc/hotplug/blacklist*</tt>: dovrebbero essere sostituite da direttive di configurazione di modprobe (ma per adesso modprobe processer� <tt>/etc/hotplug/blacklist.d/</tt>). | ||
Inoltre dalla versione 0.072: | Inoltre dalla versione 0.072: | ||
Riga 88: | Riga 88: | ||
I file vengono letti e processati in ordine alfabetico, e le direttive contenute nelle regole vengono applicate in ordine. Le uniche eccezioni sono gli attributi NAME, di cui viene considerato solo il primo. | I file vengono letti e processati in ordine alfabetico, e le direttive contenute nelle regole vengono applicate in ordine. Le uniche eccezioni sono gli attributi NAME, di cui viene considerato solo il primo. | ||
Poich� l'ordine � importante, alcuni di questi file hanno un nome particolare, per far s� che vengano letti prima o dopo di altri, e devono essere opportunamente considerati quando si aggiungono regole personalizzate. | |||
Fino ad ora sono stati definiti: | Fino ad ora sono stati definiti: | ||
Riga 98: | Riga 98: | ||
; <tt>z70_hotplugd.rules</tt>: le opzioni di <tt>last_rule</tt> finiscono di processare gli eventi hotplug riguardanti "drivers" e "module" e vengono eseguiti i vecchi script in <tt>hotplug.d/</tt> e <tt>dev.d/</tt>. | ; <tt>z70_hotplugd.rules</tt>: le opzioni di <tt>last_rule</tt> finiscono di processare gli eventi hotplug riguardanti "drivers" e "module" e vengono eseguiti i vecchi script in <tt>hotplug.d/</tt> e <tt>dev.d/</tt>. | ||
E' fortemente sconsigliato di modificare i file nella directory <tt>/etc/udev/rules.d/</tt>, | E' fortemente sconsigliato di modificare i file nella directory <tt>/etc/udev/rules.d/</tt>, perch� il sistema di gestione dei pacchetti ([[Introduzione_all%27_Apt_System | APT]]) per default non aggiorna i file che vengono modificati dopo l'installazione. | ||
Per aggiungere delle regole personalizzate per un device | Per aggiungere delle regole personalizzate per un device � sufficiente inserirle in un file <tt>/etc/udev/rules.d/00_local.rules</tt> creato da voi. Il nome del file assicura che esso venga letto per primo, e questo ci permette di inserire delle regole che varranno eseguite <b>al posto</b> di quelle di default per lo stesso device. | ||
== Link == | == Link == |
contributi