Web Analytics Made Easy - Statcounter


https://www.amazon.it/dp/B0CT9YL557

We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
a2 --- File di dispositivo

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [violazione licenza] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 38.   File di dispositivo

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/.

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 sorgenti_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 (ma forse è più corretto usare il termine byte in questo caso), 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.

38.1   Directory «/sys/»

A partire dai kernel Linux 2.6.* viene introdotto un file system virtuale che deve essere innestato nella directory /sys/, predisponendo nel file /etc/fstab la direttiva seguente:

sys   /sys           sysfs  defaults  0  0

In questo modo, quando si avvia un sistema GNU/Linux, all'interno di questa directory /sys/ appaiono una serie di informazioni sui dispositivi fisici esistenti e sui moduli del kernel che sono in funzione. Delle informazioni contenute in questa directory si avvale, per esempio, il sistema uDev per la creazione automatica dei file di dispositivo.

38.2   Creazione dei file di dispositivo

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.

Si osservino gli esempi seguenti:

  • mknod -m 0600 /dev/tty9 c 4 9[Invio]

    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[Invio]

    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...|gruppo}

Generalmente si possono indicare come argomento uno o più nomi di file di dispositivo, senza il percorso. Questi dovrebbero essere creati nella directory corrente. L'esempio seguente crea il file di dispositivo corrispondente alla prima console virtuale, assegnandogli tutti gli altri attributi corretti:

/dev/MAKEDEV tty1[Invio]

L'esempio successivo crea il file di dispositivo corrispondente al primo disco fisso ATA, assegnandogli tutti gli altri attributi corretti:

/dev/MAKEDEV hda[Invio]

È probabile che, al posto dei nomi dei file di dispositivo, si possano usare nomi di gruppi di questi. Per esempio, lo script MAKEDEV della distribuzione GNU/Linux Debian prevede il gruppo generic per fare riferimento ai file di dispositivo più comuni:

/dev/MAKEDEV generic[Invio]

38.3   kernel Linux e Devfs

Il kernel Linux, fino alle versioni 2.4.*, può essere predisposto per la gestione automatica dei file di dispositivo, attraverso quello che viene chiamato Devfs (letteralmente: Device file system). Se questa gestione è attivata in modo predefinito, oppure si utilizza l'opzione di avvio devfs=mount, nella directory /dev/ viene innestato un file system virtuale contenente tutti i file di dispositivo necessari alla gestione dell'hardware riconosciuto dal kernel.

I file di dispositivo generati automaticamente dal kernel sono organizzati in una struttura più articolata rispetto al solito, per ciò che riguarda i sistemi GNU/Linux; per esempio, il file di dispositivo che fa riferimento al primo disco ATA, che di solito /dev/hda, con Devfs è /dev/ide/host0/bus0/target0/lun0/disk.

Dal momento che si tratta di un file system virtuale, generato in modo automatico, esistono due tipi di problemi: se si modificano i permessi o si creano dei collegamenti, queste modifiche valgono solo fino a che il sistema operativo rimane in funzione. Per ovviare a questo inconveniente e anche per dare la possibilità di ricreare, tramite collegamenti simbolici, la struttura consueta ai nomi dei file di dispositivo, viene in aiuto un programma demone, devfsd, che deve essere configurato in modo da sistemare i permessi come desiderato e ricostruire i collegamenti simbolici necessari.

Per la configurazione del demone devfsd sarebbe meglio affidarsi all'impostazione data nella propria distribuzione GNU/Linux, dal momento che è necessario predisporre un meccanismo che consenta ai pacchetti applicativi che lo richiedono, di aggiungere le particolarità loro necessarie. In generale, i file di configurazione in questione si articolano a partire da /etc/devfs/.

È bene riepilogare le opzioni di avvio del kernel che sono utili per controllare l'utilizzo o meno del file system Devfs:

  • devfs=mount
    

    questa direttiva tra le opzioni di avvio attiva la gestione del file system Devfs;

  • devfs=nomount
    

    questa direttiva tra le opzioni di avvio garantisce la disattivazione del file system Devfs.

Si osservi inoltre che, per sicurezza, la directory /dev/ può contenere ugualmente i file di dispositivo tradizionali, perché quando si attiva il file system Devfs il contenuto originale della directory viene oscurato. In altri termini, quando da un sistema organizzato con file di dispositivo tradizionali si passa all'uso di Devfs, inizialmente conviene lasciare la directory /dev/ come si trova, in modo da poter avviare sia con la gestione Devfs, sia senza.

Devfs è superato da uDev, nei kernel Linux 2.6.*: <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-FAQ>

38.4   kernel Linux e uDev

A partire dalle versioni 2.6.* del kernel Linux, il meccanismo Devfs per la gestione automatica dei file di dispositivo è considerato obsoleto, dove al suo posto si suggerisce di usare uDev, che non viene gestito direttamente dal kernel, ma da un programma esterno (il demone udevd).

Dal punto di vista del risultato, uDev si comporta in modo simile a Devfs; in particolare, anche in questo caso il meccanismo si deve prendere cura di realizzare al volo dei collegamenti simbolici per simulare i file che normalmente si trovano direttamente nella directory /dev/, mentre uDev li colloca in sottodirectory successive.

Per poter funzionare, uDev si avvale delle informazioni fornite dal file system virtuale /proc/ e da /sys/ (il secondo è una novità dei kernel 2.6.*). Perché il file system virtuale /sys/ venga innestato correttamente, occorre verificare che il file /etc/fstab contenga la dichiarazione appropriata, molto simile a quella del file system virtuale /proc/:

proc    /proc            proc    defaults         0   0
none    /proc/bus/usb    usbfs   defaults         0   0
sys     /sys             sysfs   defaults         0   0

L'esempio appena mostrato mostra anche gli altri file system virtuali comuni.

Per maggiore comodità, conviene anche predisporre la directory /.dev/, inizialmente vuota. Quando viene avviato, uDev fa in modo di far apparire il contenuto originale della directory /dev/.

uDev utilizza alcuni file di configurazione che normalmente si collocano nella directory /etc/udev/. Il primo file da prendere in considerazione è /etc/udev/udev.conf, nel quale, tra le altre cose, si specifica dove vada innestato il file system di uDev. In condizioni normali, come si comprende, va innestato nella directory /dev/:

# udev_root - where in the filesystem to place the device nodes
udev_root="/dev/"

Per definire la proprietà dei file di dispositivo virtuali e i loro permessi di accesso, si utilizza normalmente il file /etc/udev/permissions.d/udev.permissions, ma questo file può essere indicato diversamente nello stesso file /etc/udev/udev.conf.

Come accennato, uDev colloca alcuni file di dispositivo in posizioni più articolate rispetto allo standard dei sistemi GNU/Linux, pertanto è poi necessario realizzare al volo dei collegamenti simbolici per ripristinare le condizioni comuni. Per questo si usa eventualmente il file di configurazione /etc/udev/links.conf. A titolo di esempio, supponendo che uDev non crei correttamente il collegamento simbolico /dev/psaux (per i mouse PS/2), in questo file occorrerebbe aggiungere la direttiva seguente:

# mouse PS/2
L psaux         misc/psaux

Come si può intendere, il file creato da uDev sarebbe /dev/misc/psaux.

Per quanto riguarda l'avvio e l'arresto del demone udevd, è auspicabile che la propria distribuzione GNU/Linux sia già organizzata per questo. A ogni modo, si intuisce che questo demone deve essere avviato molto presto nell'ambito della procedura di avvio del sistema e deve anche essere fermato solo alla fine della procedura di arresto.

Dal momento che uDev è un sistema esterno al kernel, durante la fase di avvio, c'è sicuramente un momento in cui il kernel ha innestato il file system principale, ma uDev non è ancora in funzione. Per questa ragione, è indispensabile che la directory /dev/, contenga inizialmente i file di dispositivo comuni, altrimenti diventa praticamente impossibile avviare il sistema.

38.5   Messaggio: «unable to open an initial console»

Quando si utilizzano dei meccanismi automatici per la gestione dei file di dispositivo, può succedere che qualcosa non funzioni nel modo previsto. In particolare, può capitare che all'avvio il kernel non riesca a trovare il file di dispositivo /dev/console, cosa che si traduce nel messaggio di avvertimento seguente:

...
Warning: unable to open an initial console
...

Per poter comprendere cosa accade, è necessario avviare il sistema attraverso un disco esterno (dischetti di avvio di emergenza, CD-ROM autoavviabili o simili), con il quale si può indagare sullo stato iniziale della directory /dev/ (si intende la directory /dev/ del file system che è in funzione quando si tenta di avviare il sistema operativo senza successo). Se questa è vuota, come può succedere se ci si affida a uDev o a Devfs, conviene predisporre manualmente dei file di dispositivo al suo interno, che vengono utilizzati in mancanza del funzionamento (tempestivo) dei sistemi automatici.

Se si dispone dello script MAKEDEV, dovrebbe essere sufficiente il comando seguente, da eseguire quando la directory corrente corrisponde alla directory dev/ che si intende sistemare:

./MAKEDEV generic[Invio]

Naturalmente, se lo script MAKEDEV non si trova nella stessa directory, ma altrove, si deve specificare il percorso di avvio appropriato.

Appunti di informatica libera 2006.01.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>, <daniele·giacomini (ad) poste·it>


1) L'argomento dei file speciali, compresi quelli che rappresentano i dispositivi, viene trattato nel capitolo 97 capitolo. Tuttavia, è necessario 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.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [violazione licenza] [translators] [docinfo] [indice analitico]

Valid ISO-HTML!

CSS validator!

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com