[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Nei sistemi Unix, come GNU/Linux, il kernel permette alle applicazioni di comunicare con le unità fisiche, ovvero i dispositivi, attraverso un'astrazione costituita dai file di dispositivo. Questi file sono di tipo speciale e tradizionalmente sono contenuti all'interno della directory /dev/
.(1)
La particolarità di questi file sta nella definizione di due numeri, che in pratica costituiscono il canale di comunicazione con il kernel stesso. Si tratta del numero primario e del numero secondario (oppure major e minor, secondo la terminologia originale inglese), dove il primo rappresenta il tipo di dispositivo e il secondo serve a identificare esattamente un dispositivo particolare. Questi numeri dipendono dal kernel e di conseguenza possono variare da un sistema operativo Unix all'altro. Anche i nomi che si danno a questi file possono variare da un sistema Unix all'altro; in certi casi ci sono piccole differenze anche tra le stesse distribuzioni GNU/Linux. In ogni caso, il documento di riferimento per ciò che riguarda GNU/Linux, è il file /usr/src/linux/Documentation/devices.txt
, corrispondente a Linux allocated devices, aggiornato da H. Peter Anvin.
Dal momento che questi file servono solo in quanto contengono i numeri primario e secondario di un certo dispositivo, potrebbero funzionare anche collocati al di fuori della loro directory tradizionale, utilizzando eventualmente nomi differenti. Questa possibilità viene sfruttata da alcune distribuzioni GNU/Linux, nella fase di installazione, quando nei dischetti di avvio vengono creati al volo i file di dispositivo necessari a completare l'operazione, utilizzando eventualmente la directory temporanea per questo scopo.
I file di dispositivo si distinguono in due categorie, in base al fatto che l'hardware a cui corrispondono sia in grado di gestire un flusso di caratteri, presi ognuno singolarmente, oppure richieda che i dati siano raggruppati in blocchi di una dimensione determinata. Nel primo caso si parla di dispositivo a caratteri, mentre nel secondo di dispositivo a blocchi.
Dato che i dispositivi fisici sono gestiti attraverso questi file di dispositivo, l'accesso all'hardware viene controllato con i permessi che vengono dati a questi file. La gestione di questi permessi è molto importante nell'impostazione che viene data al sistema ed è uno dei punti su cui si trovano le differenze significative tra le varie distribuzioni GNU/Linux. Inoltre, l'esistenza di utenti e gruppi fittizi, con nomi come floppy, sys, daemon e altri, dipende spesso da questa esigenza di controllo dell'accesso ai dispositivi.
Quando si ricompila il kernel per includere la gestione di funzionalità particolari, per accedere a queste, o per accedere ai componenti fisici per i quali è stata stabilita la gestione, può essere necessario intervenire nella directory /dev/
allo scopo di creare o modificare qualche file di dispositivo. In generale, le distribuzioni GNU/Linux tendono a prevedere tutti i file necessari, ma la stessa evoluzione del kernel introduce esigenze nuove e spesso la necessità di provvedere da soli a questi file. Inoltre, è difficile che siano disponibili dal principio tutti i file di dispositivo possibili e immaginabili.
I file di dispositivo si creano in particolare con il programma di servizio mknod:
mknod [-m modalità_dei_permessi] file {b|c|u} [n_primario n_secondario]
Con la lettera «b» si crea un file di dispositivo a blocchi, mentre con la lettera «c», si crea un file di dispositivo a caratteri. Il caso particolare della lettera «u», riguarda un dispositivo a caratteri senza buffer.
Per esempio,
#
mknod -m 0600 /dev/tty9 c 4 9
crea il file di dispositivo a caratteri /dev/tty9
, concedendo soltanto i permessi di lettura e di scrittura al proprietario;
#
mknod -m 0660 /dev/hda1 b 3 1
crea il file di dispositivo a blocchi /dev/hda1
, concedendo i permessi di lettura e scrittura all'utente proprietario e al gruppo.
Anche se mknod è tutto quello che serve per creare i file di dispositivo necessari, non è sempre il mezzo più comodo per provvedere a questo problema. Infatti, occorre considerare anche le convenzioni della propria distribuzione GNU/Linux, anche per ciò che riguarda i permessi e l'appartenenza di questi file; inoltre non è sempre detto che si possano ricordare esattamente le caratteristiche dei file di dispositivo di cui si ha bisogno. Per questo viene in aiuto lo script MAKEDEV, che tradizionalmente si deve trovare proprio nella directory /dev/
. Questo script non è standard, ma il suo scopo lo è: facilitare la creazione dei file di dispositivo.
/dev/MAKEDEV dispositivo...
Generalmente si possono indicare come argomento uno o più nomi di file di dispositivo, senza indicare il percorso. Questi dovrebbero essere creati nella directory corrente. Per esempio,
#
/dev/MAKEDEV tty1
crea il file di dispositivo corrispondente alla prima console virtuale, assegnandogli tutti gli altri attributi corretti;
#
/dev/MAKEDEV hda
crea il file di dispositivo corrispondente al primo disco fisso ATA, assegnandogli tutti gli altri attributi corretti.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini --daniele @ swlibero.org
1) L'argomento dei file speciali, compresi quelli che rappresentano i dispositivi, viene ripreso in un altro capitolo. Tuttavia, è opportuno anticipare il problema, dal momento che è connesso strettamente alla creazione di kernel personalizzato.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome file_di_dispositivo.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]