11.07.2015 Views

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.1. LA GESTIONE DI KERNEL E MODULI 173sarebbe corretto, per questo esiste l’opzione -N (o --forward) che indica di ignorare i patch chesembrano invertiti o già applicati.Il comando patch prende molte altre opzioni ed è in grado di utilizzare vari formati per ipatch ed anche di interagire direttamente con vari programmi per il controllo di versione peridentificare quali sono i file su cui operare. Per tutti i dettagli sul funzionamento del comandoe sul significato delle opzioni si può al solito fare riferimento alla pagina di manuale, accessibilecon man patch.5.1.3 La ricompilazione del kernelUna volta che si sono scompattati i sorgenti ed applicati gli eventuali patch ritenuti opportunisi può passare alla compilazione del kernel. Questa, come per la maggior parte dei pacchettiche si installano dai sorgenti, viene eseguita tramite il comando make, ma nel caso non vieneutilizzata la procedura illustrata in sez. 4.2.1, in quanto nel caso del kernel non esiste uno script diconfigurazione, ma tutto viene gestito attraverso una procedura di costruzione dedicata, creatadagli stessi sviluppatori. Pertanto tutto la procedura è controllata dal Makefile principalepresente nella base della directory dei sorgenti, e le varie operazioni sono compiute invocandogli opportuni target 6 del comando make.Una delle caratteristiche peculiari di <strong>Linux</strong> (torneremo sull’argomento in dettaglio anche insez. 5.1.4) è quella di essere modulare. A differenza cioè degli altri sistemi unix-like in cui ilkernel è un unico programma monolitico, caricato in memoria all’avvio del sistema ed in cuidevono essere inserite tutte le funzionalità che si vogliono usare, <strong>Linux</strong> può partire con un kernelcontenente le sole funzionalità di base e poi caricare da disco in maniera dinamica delle ulteriorisezioni di codice, dette moduli, che aggiungono le funzionalità ulteriori o il supporto per l’usodi certi dispositivi, solo quando servono.Questa è una delle caratteristiche più rilevanti di <strong>Linux</strong>, che gli permette una flessibilità diutilizzo che gli altri kernel non hanno. É possibile infatti modularizzare lo sviluppo del kernelseparandone le funzionalità, evitare di mantenere permanentemente in memoria parti di codiceche sono utilizzate solo per limitati periodi di tempo (ad esempio il codice per accedere a CDROMo floppy occupa inutilmente memoria se non li si stanno utilizzando), indicare opzioni specificheper la gestione di un dispositivo in fase di caricamento, o modificarle senza bisogno di un riavvio(basta rimuovere il modulo e ricaricarlo con le nuove opzioni).L’uso dei moduli ha pertanto una grande rilevanza e deve essere pianificato accuratamentein fase di compilazione e configurazione. Un primo aspetto dell’uso dei moduli è che quandosi usano diverse versioni del kernel devono essere usate anche diverse versioni dei moduli. Ciòcomporta che ogni kernel deve avere la sua versione dei moduli, che sono identificati, comequest’ultimo, per la relativa versione, quella che viene mostrata dal comando uname -r. 7 Sorgeallora un problema quando si vogliono ottenere due (o più) kernel diversi a partire dagli stessisorgenti, dato che in questo caso la versione sarà la stessa.Per risolvere questo problema è allora possibile definire una versione“personalizzata”. La versionedel kernel è indicata dai sorgenti, ed è codificata nelle prime righe del Makefile principale,che sono nella forma:VERSION = 2PATCHLEVEL = 4SUBLEVEL = 23EXTRAVERSION = -ben1KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)6 si ricordi quanto accennato in sez. 4.2.1 relativamente al funzionamento di questo comando.7 in realtà come vedremo in sez. 5.1.4, i moduli sono identificati soprattutto per la directory in cui sonomantenuti, che è /lib/modules/‘uname -r‘.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!