Contact me sending an e-mail (antispam defense activated) |
Introduzione a /dev, devfs e udevSandro Tosi, 12 Marzo 2007
Cerchero' qui di raccogliere una serie di stralci di informazioni che ho raccolto riguardo a devfs, udev e alla directory /dev. Potrebbero non essere molto aggiornati, ma sono un buon punto di partenza per esplorare come il kernel gestisce i device. 1. Cos'e' la directory /dev e la vecchia gestione dei device in LinuxIl principale compito del kernel e' quello di gestire le componenti hardware del computer. Nella directory /dev troviamo i device file, riferimenti diretti ai device hardware. Non sono dei veri e propri file, ma corrispondono ad un particolare dispositivo. Quando un programma accede ed usa questi file speciali, l'operazione viene passata ad un device driver nel kernel. In precendenza, i sistemi Linux erano obbligati a mantenere la directory /dev sul filesystem normale. Questo comporta che dentro /dev ci dovessere essere file per ogni possibile device driver, anche se non presente sulla macchina. Solitamente i file venivano creati una solta volta (per esempio all'installazione della macchina) e che fossero memorizzati su filesystem; cio' comportava che /dev fosse veramente grande. Questa gestione statica delle informazioni rendeva difficile aggiungere o rimuovere dinamicamente device file quando i driver venivano caricato o rimossi dal kernel, e rendeve impossibile riorganizzare le entry in /dev. Inoltre, non era nemmeno chiaro quali device fossero davvero presenti sul sistema, e quali invece non sono utilizzati. Un altro inconveniente di questo meccanismo per la gestione di /dev e' che la gerarchia dei driver deve essere strettamente legata all'idea di major e minor number, che sono il modo per associare un nome di device al driver incaricato a servire le operazioni hardware. La quantita' di major e minor number e' limitata, e questo riduce il numero di device e di device driver che possono essere usati sul sistema. Per non parlare poi del fatto che, il device associato all'hardware, spesso dipendeva dall'ordine in cui veniva attaccato al sistema: due stampanti USB, potevano scambiarsi il device file a seconda di quale delle due venisse accesa prima. Un aspetto interessante di questa vecchia gestione e' che, dal momento che mount utilizza /dev, non e' nemmeno possibile mettere /dev su una partizione separata da /. 1.2. Alcune info su /devIn ogni caso, se ancora state utilizzando un vecchio sistema con la gestione di /dev statica, ecco qui alcune info interessanti:
Una lista di device speciali, valida anche con i kernel piu' recenti:
2. Cos'e' devfsdevfs, device filesystem, e' stato introdotto a partire dalla serie stabile 2.4 e fornisce un nuovo filesystem da utilizzare per /dev; questo filesystem tiene traccia delle entry di /dev direttamente dal kernel; cio' significa che, ogni qual volta viene trovato nuovo hardware attaccato al sistema ed il relativo device driver viene caricato, una nuova entry puo' apparire dentro /dev. In questo modo, /dev viene popolata solo con i device realmente presenti sulla macchina al momento del boot, ed aggioranta dinamicamente nel momento in cui dei device vengano aggiunti o rimossi, tutto questo agevolato dal fatto che ora /dev viene memorizzato in RAM e non su disco. Questa nuova gestione elimina la necessita' di manterene la lista di tutti i possibili device: appena nuovo hardware viene riconosciuto, il kernel si limita ad inserire una nuova entry ad-hoc in /dev. Anche devfs aveva qualche problema:
3. Cos'e' udevA partire dalla serie di sviluppo 2.5, e dunque con quella stabile 2.6, nel kernel e' stato introdotto il supporto a udev. Dal momento che devfs aveva grossi problemi strutturali e non aveva piu' un maintainer da tempo, e' stato deciso di deprecarlo in favore di udev. Il grande vantaggio di udev e' che esso vive completamente in userspace, quindi nel kernel non se ne trova traccia, ma e' necessario soltanto abilitare (e montare) il sysfs (/sys) da cui udev legge i parametri di tutte le periferiche e costruisce /dev. udev si appoggia agli eventi hotplug e a sysfs: quando una nuova periferica viene rilevata, essa genera un evento hotplug e compare come voce sotto /sys; udev reagisce a questo evento creando sotto /dev il device corrispondente, in base alla configurazione effettuata. Questa architettura implica un certo ritardo nella creazione del device, ma ha dalla sua parte una maggiore flessibilita' nella politca di gestione dei nome dei device, una struttura migliore e l'essere completamente in userspace consente di essere manutento attivamente. 4. RiferimentiDocumentation/filesystems/devfs/README http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs -> rubini, linux magazine may 2000, using udev -> find link http://www.kroah.com/linux/talks/ols_2003_udev_talk/ il filesystem devfs, opensp -> find link Linux Magazine, Mastering udev |