Old:Udev e Debian: differenze tra le versioni

nessun oggetto della modifica
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
{{Versioni compatibili|Tutte le versioni di Debian}}
[[Categoria:Sistema]]
[[Categoria:Sistema]]
== Disclaimer ==
== Disclaimer ==
Riga 21: Riga 22:
Hotplug è tuttora in grado di svolgere il suo compito, ma ha alcune limitazioni che si sta tentando di superare:
Hotplug è tuttora 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 ;-)
* è 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 più spazio di un programma C, considerato anche che necessita dell'interprete /bin/sh. Anche 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.
* sempre a causa della sua natura di script, occupa molto più spazio di un programma C, considerato anche che necessita dell'interprete <code>/bin/sh</code>. Anche 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 funzionalità.
* 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 è ormai in disuso)
* necessita di una directory <code>/dev</code> statica (nota che il devfs è ormai in disuso).


== Cos'è udev ==
== Cos'è udev ==


Udev è un programma in userspace 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 <code>/dev</code>) per ogni periferica che viene rilevata nel sistema.
Udev è un programma in userspace in grado ricevere le notifiche del sottosistema hotplug dei kernel 2.6.<br/> 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 <code>/dev</code>) 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 è 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 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 è 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.)
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 è possibile richiamare un certo programma/script non appena un dispositivo viene riconosciuto dal sistema.
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.


Riga 45: Riga 46:
== 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, verrà automaticamente caricato il modulo <code>usb-storage</code> che permetterà (tra le altre cose) di usare eventuali chiavette 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 <code>usb-storage</code> che permetterà (tra le altre cose) di usare eventuali chiavette USB.


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 caricamento automatico di importanti driver.
Per usare questa versione di udev è necessario un kernel 2.6.12 o superiore con le opzioni hotplug (<code>CONFIG_HOTPLUG</code>) e tmpfs (<code>CONFIG_TMPFS</code>) attivate. Le opzioni <code>CONFIG_PNP</code>, <code>CONFIG_ISAPNP</code>, <code>CONFIG_PNPBIOS</code> e <code>CONFIG_PNPACPI</code> sono altamente raccomandate per consentire il caricamento automatico di importanti driver.


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.
A partire dal kernel 2.6.15-rc1 è stata introdotta la nuova implementazione del driver model, la quale presenta nuove caratteristiche ed 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 può disabilitare udev aggiungendo al boot il parametro del kernel <code>UDEV_DISABLED=yes</code> in grub o lilo. Alternativamente si può configurare in <code>/etc/udev/udev.conf</code> una directory diversa da <code>/dev</code> per la creazione dei device file.
Si può disabilitare udev aggiungendo al boot il parametro del kernel <code>UDEV_DISABLED=yes</code> in Grub o lilo. Alternativamente si può configurare in <code>/etc/udev/udev.conf</code> una directory diversa da <code>/dev</code> per la creazione dei device file.


== Come funziona udev ==
== Come funziona udev ==
Riga 63: Riga 64:
* i moduli non possono essere caricati su richiesta quando un'applicazione cerca di aprire un suo dispositivo, perché il dispositivo non c'è ancora!
* 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 <code>/etc/modules</code> (oppure usare modconf ;-)).
* 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 <code>/etc/modules</code> (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 <code>/etc/modules</code> anch'essi.
* alcuni moduli non sono dei driver di un dispositivo e non possono essere caricati automaticamente da udev, devono quindi essere elencati in <code>/etc/modules</code> anch'essi;


* 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. A questo scopo vedere la sezione sul file <code>/etc/udev/links.conf</code>
* 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. A questo scopo vedere la sezione sul file <code>/etc/udev/links.conf</code>.


In altre parole, su un tipico sistema si potrebbero dover caricare manualmente (usando <code>/etc/modules</code>) dei moduli come ppdev e tun.
In altre parole, su un tipico sistema si potrebbero dover caricare manualmente (usando <code>/etc/modules</code>) dei moduli come ppdev e tun.
Riga 87: Riga 88:
== La directory <code>/etc/udev/rules.d/</code> ==
== La directory <code>/etc/udev/rules.d/</code> ==


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 <code>NAME</code>, 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.  
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.  
Riga 110: Riga 111:


La sintassi del file è la seguente:
La sintassi del file è la seguente:
* Ogni riga vuota o che inizia con "#" viene trascurata.
* Ogni riga vuota o che inizia con <code>#</code> viene trascurata.
* Ogni riga che inizia con "L" dice ad udev di creare un link simbolico; dopo la L iniziale devono essere specificati due parametri separati da uno spazio o da un tab: il primo è il nome del link da creare nella directory <code>/dev</code>, e il secondo è il file a cui punta il link.
* Ogni riga che inizia con <code>L</code> dice ad udev di creare un link simbolico; dopo la <code>L</code> iniziale devono essere specificati due parametri separati da uno spazio o da un tab: il primo è il nome del link da creare nella directory <code>/dev</code>, e il secondo è il file a cui punta il link.
* Ogni riga che inizia con "D" dice ad udev di creare una sottodirectory della directory <code>/dev</code>, il cui nome deve essere specificato dopo uno spazio o un tab.
* Ogni riga che inizia con <code>D</code> dice ad udev di creare una sottodirectory della directory <code>/dev</code>, il cui nome deve essere specificato dopo uno spazio o un tab.
* Ogni riga che inizia con "M" dice ad udev di usare <code>/dev/MAKEDEV</code> per creare un device node, e di seguito devono essere indicati i parametri da passare a <code>/dev/MAKEDEV</code>, che sono, nell'ordine: il tipo di device, il major number e il minor number (per delucidazioni in merito vedere <code>man mknod</code>).
* Ogni riga che inizia con <code>M</code> dice ad udev di usare <code>/dev/MAKEDEV</code> per creare un device node, e di seguito devono essere indicati i parametri da passare a <code>/dev/MAKEDEV</code>, che sono, nell'ordine: il tipo di device, il major number e il minor number (per delucidazioni in merito vedere <code>man mknod</code>).


{{Warningbox|Coma già detto, il file <code>/etc/udev/links.conf</code> rappresenta un workaround, e come tale deve essere usato il meno possibile. In particolare, al fine di evitare conflitti e possibili ''race condition'', si raccomanda di <b>non usare mai</b> questo file per delle impostazioni che udev è in grado di fare in altro modo.}}
{{Warningbox|Coma già detto, il file <code>/etc/udev/links.conf</code> rappresenta un workaround, e come tale deve essere usato il meno possibile. In particolare, al fine di evitare conflitti e possibili ''race condition'', si raccomanda di <b>non usare mai</b> questo file per delle impostazioni che udev è in grado di fare in altro modo.}}
1 508

contributi