
Udev svelato: gestione periferiche senza segreti
Alla scoperta dell’infrastruttura che permette al sistema operativo di interfacciarsi con l’hardware del PC e come utilizzarlo al meglio delle sue possibilità
(pagina 1 di 6)
GNU/Linux gestisce i dispositivi hardware mediante segmenti
di codice chiamati device driver. Si dice che una
tale periferica è supportata se nel kernel Linux esiste il
corrispettivo device driver. Questi permettono all’utente
e agli altri programmi di fruire dei dispositivi considerandoli alla
stregua dei file (ricordate l’affermazione secondo cui “in Unix
tutto è un file”?) e, in particolare, utilizzando quelli speciali, i
cosiddetti file di dispositivo, situati nella directory /dev. Questo
significa che la comunicazione con le periferiche può essere
pensata come “semplice” input e output (diciamo pure scrittura e
lettura) di dati secondo il tradizionale concetto di file. Ad esempio,
si ottiene la scansione di un documento leggendo da un file
speciale mentre per mandare in stampa un documento si scriverà
il suo contenuto su un altro di questi file: spetta ai device driver
dello scanner e della stampante tradurre queste letture e scritture
in operazioni a livello di hardware.
Più in profondità
Sui file speciali si devono poter effettuare le tipiche operazioni
,quali ad esempio l’apertura, la lettura, la scrittura e la chiusura.
Come già accennato sono i device driver che rendono possibili
queste e altre operazioni per la gestione delle periferiche. Il
sistema operativo deve quindi sapere a quale device driver fare
riferimento per eseguire tali operazioni sul relativo file speciale.
Ecco il motivo per cui i file speciali sono caratterizzati da un
major e un minor number. Il primo individua la corretta routine
per la gestione del tipo di periferica mentre il secondo delinea
con maggior precisione e dettaglio
le caratteristiche della periferica. Ad
esempio il file speciale /dev/hda6 è
caratterizzato da un major number
uguale a 3 e un minor number uguale
a 6 e questo indica al kernel di utilizzare
il device driver per i dischi IDE
per gestire la partizione 6 del disco.
Se il driver per la gestione della periferica
non esiste, o non è stato caricato all’interno del kernel la
periferica non sarà supportata e il file speciale che la rappresenta
non sarà accessibile.
Il passaggio da /dev a devfs
 |
• Il file system /dev. Grazie a udev contiene solo “684” file di dispositivo e non 18.000 |
Esistono molti tipi di periferiche con relative interfacce rappresentate
dai file speciali. Ad esempio, troviamo i block device e i
character device. Nel primo caso è possibile l’accesso casuale dei
dati che invece non ha senso nel secondo. Inoltre, non sempre ad
ogni file speciale corrisponde un dispositivo fisico vero e proprio;
talvolta dietro a un file speciale c’è un programma che simula
una periferica ad esempio un generatore di numeri casuali. Questi
dispositivi vengono chiamati pseudo-device. La directory /dev,
che ospita i file speciali secondo gli standard stabiliti dalla Filesystem
Hierarchy Standard, in origine è stata concepita come
statica, cioè con un numero predefinito di file di dispositivo; se
fosse ancora così, oggi conterebbe più di 18.000 file, ognuno dei quali con il proprio major e minor number, poiché dovrebbe poter
“rappresentare” tutte le possibili periferiche esistenti. Per risolvere
il problema dell’elevato numero dei file presenti all’interno
di /dev, dalla versione 2.3.46 del kernel Linux è stata introdotta
una infrastruttura più evoluta chiamata devfs, che replica /dev su
file system virtuale, ma in questo caso ospita solo i file speciali
relativi alle sole periferiche in quel momento collegate al PC. Ma
anche devfs ha i propri limiti come, ad esempio, l’impossibilità
da parte dell’utente di creare e dare nomi personalizzati ai file
di dispositivo. Per risolvere questo ulteriore inconveniente è stato
creato udev, il rivoluzionario sistema ideato da Greg Kroah-
Hartman. Prima di iniziare ad analizzarlo in dettaglio è doveroso
accennare al fatto che sebbene devfs sia ormai un’opzione abbandonata
del kernel Linux in favore di udev, sussistono ancora
divergenze sull’argomento. Per i dettagli http://kernel.org/pub/
linux/utils/kernel/hotplug/udev_vs_devfs.
Cos’è il LANANA
Assegna major e minor number
Il LANANA o Linux Assigned Names and Numbers Authority
è l’ente che stabilisce i nomi e i major e minor number da
assegnare ai device utilizzati nel kernel Linux.