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.

174 CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMAe come si vede è qui che viene definita la variabile KERNELRELEASE che poi sarà usata in tuttoil resto della procedura. Si noti allora la presenza, appositamente predisposta, della variabileEXTRAVERSION, che serve appunto a specificare un ulteriore identificativo di versione, che permettadi tenere separati kernel diversi (ad esempio per le opzioni di compilazione che si sonoscelte) ottenuti a partire dagli stessi sorgenti.In genere questa è l’unica modifica che può essere necessario fare a mano (anche se ilkernel-package di Debian fornisce il comando make-kpkg che è in grado di farla automaticamente),tutte le altre configurazioni sono gestite in maniera indipendente, attraverso la modalitàche vedremo più avanti. Le uniche altre eventuali (anche se poco probabili) modifiche che si possonovoler fare al Makefile riguardano la variabile CROSS_COMPILE, che può essere usata percompilare kernel per una architettura diversa dalla propria (ad esempio un kernel per PowerPCsu una macchina Intel), e le opzioni per le ottimizzazioni del gcc (che è meglio lasciar stare alvalore di default, che è sicuro, a meno di non sapere esattamente quello che si sta facendo, oessere in vena di sperimentazione).Un secondo aspetto dell’uso dei moduli che occorre tener presente è che per poterli utilizzareoccorre anzitutto poter caricare in memoria il loro codice; il che significa che si deve essere ingrado di leggere i relativi file oggetto, 8 dato che questi non sono altro che codice, come quello deiprogrammi ordinari, anche se un po’ particolare. 9 Questo comporta allora che le funzionalità delkernel necessarie ad accedere al supporto su cui si trovano i moduli non possono essere ottenutecon l’uso di questi ultimi (e dovranno essere inserite all’interno del kernel in maniera monolitica).Per capire quali sono queste funzionalità occorre ricordare quali sono i due compiti di baseeseguiti dal kernel all’avvio: montare la directory radice ed eseguire init. Per il primo compitooccorre il supporto per accedere al dispositivo su cui si trova la radice e quello per il relativofilesystem, per il secondo il supporto per l’uso del formato binario di esecuzione dei programmi.Quanto necessario a svolgere questi due compiti, anche se modularizzabile, dovrà comunqueessere inserito permanentemente nel kernel, pena il fallimento dell’avvio con un kernel panic. 10A parte le eventuali modifiche del Makefile per modificare la EXTRAVERSION, il primo passoper la compilazione del kernel è quello della configurazione, in cui si scelgono quali funzionalitàattivare e quali no, quali mettere direttamente dentro il kernel, e quali utilizzare come moduli.Una volta che si sia specificato quanto voluto, il kernel verrà costruito di conseguenza.Tutto questo viene fatto, dal punto di vista della compilazione e della costruzione del kernel,tramite il contenuto del file .config, sempre nella directory base dei sorgenti, dove sonomemorizzate tutte le opzioni di configurazione. Un estratto del contenuto del file è il seguente:## Automatically generated make config: don’t edit## CONFIG_UID16 is not set# CONFIG_RWSEM_GENERIC_SPINLOCK is not setCONFIG_RWSEM_XCHGADD_ALGORITHM=yCONFIG_HAVE_DEC_LOCK=yLe opzioni di configurazione sono tutte dichiarate come variabili nella forma CONFIG_XXX,quelle attivate non sono commentate ed assegnate al relativo valore, alcune indicano dei va-8 un file oggetto, in genere identificato dall’estensione .o, è un file che contiene il codice compilato di una o piùfunzioni, in cui però gli indirizzi non sono stati assegnati, in questo modo, attraverso un procedimento successivodetto collegamento (o meglio linking) si possono unire insieme più funzioni per dar luogo a quello che poi andrà acostituire un eseguibile; questo è anche quello che si fa quando si produce l’immagine del kernel, e l’uso dei moduliconsente di ripetere il procedimento sul codice del kernel che sta girando.9 ed infatti a partire dalla serie 2.6.x li si è distinti dai normali file oggetto usando l’estensione .ko al posto di.o (ma si ricordi che l’estensione in Unix è solo una convenzione, nel caso conta solo il contenuto).10 si chiama così un crash fatale del kernel; questo può avvenire solo per errori fatali durante l’esecuzione dellostesso (in caso di bug particolarmente gravi, molto rari, o di problemi hardware, assai meno rari), o in fase diboot quando mancano le componenti essenziali per l’avvio del sistema.

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

Saved successfully!

Ooh no, something went wrong!