LKN: Personalizzare un Kernel: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
''Torna all'indice: [[Linux Kernel in a Nutshell]]''
''Torna all'indice: [[Linux Kernel in a Nutshell]]''


Questo capitolo descrive i programmi necessari per configurare un kernel, compilarlo e fare il boot con successo. È utile consultare il file ''Documentation/Changes'' per verificare esattamente quale sia la versione richiesta di ogni programma descritto. Qui vengono riportate le versioni dei programmi che funzionano con il kernel 2.6.18, su cui si basa la trattazione. Chi sta usando un kernel diverso verifichi di avere installate le versioni richieste, come riportato nel file sopra specificato, altrimenti qualcosa potrebbe non funzionare correttamente e potrebbe essere estremamente difficile capire cosa � andato nel modo sbagliato.
__TOC__


Ora che avete scaricato i sorgenti della versione del kernel che avete scelto e che li avete installati in una cartella locale, giunto il momento di compilare il codice. Il primo passo di configurare il kernel con le opzioni appropriate; in seguito il kernel potr essere compilato. Entrambe le operazioni sono portate a termine attraverso lo strumento standard ''make''.


=='''Strumenti per compilare il kernel'''==
== '''Creare una configurazione''' ==


La maggior parte delle distribuzioni prevede la possibilit� di installare una raccolta di pacchetti per lavorare con il kernel. Qualora la distribuzione offra questa possibilit� � consigliabile sfruttarla, piuttosto che tentare di rintracciare ogni singola applicazione necessaria allo scopo.
La configurazione del kernel risiede in un file chiamato ''.config'' nella cartella principale dell'albero dei sorgenti del kernel. Se avete appena estratto il codice sorgente del kernel, non vi sar� alcun file ''.config'', quindi dovr� essere creato. Il file pu� essere creato da zero, creato partendo dalla "configurazione predefinita", preso da una versione funzionante del kernel, o preso da quello rilasciato da una distribuzione. Copriremo i primi due metodi adesso, gli ultimi due metodi nel [[LKN:_Personalizzare_un_Kernel|Capitolo 7]].


Per compilare un kernel servono solo tre pacchetti: un compilatore, un linker e un'utility ''make''. Questa sezione descrive il contenuto di ognuno di questi pacchetti.
==='''Configurare dall'inizio'''===
Il modo pi� spartano per configurare un kernel � usare il metodo ''make config'':
<pre>$ cd linux-2.6.17.10
  $ make config
make config
scripts/kconfig/conf arch/i386/Kconfig
*
* Linux Kernel Configuration
*
*
* Code maturity level option
*
Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [Y/n/?]
Y


==='''Compilatore'''===
*
* General setup
*
Local version - append to kernel release (LOCALVERSION) []
Automatically append version information to the version string
(LOCALVERSION_AUTO) [Y/n/?] Y
...</pre>
Il programma di configurazione del kernel proceder� attraverso ogni opzione di configurazione e chieder� se la si vuole abilitare o meno. Tipicamente, le possibilit� per ogni opzione sono presentate nella forma <tt>[Y/m/n/?]</tt>. La lettera maiuscola � la scelta predefinita, e pu� essere selezionata semplicemente premendo il tasto Invio. Le quattro scelte sono:
* <tt>Y</tt>  Compilare direttamente nel kernel.
* <tt>n</tt>  Lasciare completamente al di fuori del kernel.
* <tt>m</tt>  Compilare come modulo, da caricare se necessario.
* <tt>?</tt>  Stampa un breve messaggio descrittivo e ripropone il quesito.
Il kernel contiene quasi duemila opzioni di configurazioni differenti, quindi rispondere ad una domanda su ognuna di esse richiede un notevole dispendio di tempo. Fortunatamente, vi � un modo pi� facile di configurare un kernel: basare la configurazione su di un'altra precostituita.


Il kernel Linux scritto in linguaggio C, con alcune piccole sezioni scritte in assembly. Per compilare un kernel necessario utilizzare il compilatore per C gcc. La maggior parte delle distribuzioni comprendono un pacchetto di nome ''gcc'' che dovrebbe essere installato. Se volete scaricare il compilatore e compilarlo da soli, potete trovarlo all'indirizzo http://gcc.gnu.org .
==='''Opzioni della configurazione predefinita'''===
Ogni versione del kernel ha una configurazione "predefinita". Questa configurazione � in parte basata sulle scelte che il responsabile di quella architettura crede siano le opzioni migliori da essere usate. In alcuni casi, � la configurazione usata dal responsabile stesso sulle proprie macchine. Questo vero per l'architettura i386, dove la configurazione predefinita corrisponde strettamente a quella che Linus Torvalds usa per la sua macchina di sviluppo principale.


Per quanto concerne la release 2.6.18 del kernel, la versione 3.2 di ''gcc'' � la pi� vecchia tra quelle che possono compilare correttamente un kernel funzionante. Occorre fare attenzione che utilizzare l'ultima versione di ''gcc'' non sempre una buona idea. Alcune delle versioni pi� recenti non compilano correttamente il kernel, quindi, a meno che non si voglia aiutare nel lavoro di debug del compilatore, ne � sconsigliato l'utilizzo.
Per creare questa configurazione predefinita, eseguite:
<pre>$ cd linux-2.6.17.10
$ make defconfig</pre>
Un'enorme quantit� di opzioni di configurazione scorrer� velocemente sullo schermo, e un file ''.config'' sar� creato e piazzato nella cartella del kernel. Il kernel ora correttamente configurato, ma dovrebbe essere adattato alla vostra macchina per assicurarsi che funzioni correttamente.


Per scoprire quale versione di ''gcc'' avete installata usate il seguente comando:
==='''Modificare la configurazione'''===
Ora che abbiamo un file di configurazione di base, dovrebbe essere modificato per supportare l'hardware presente nel vostro sistema. Per ulteriori dettagli su come individuare quali opzioni siano necessarie per ottenere ci�, potete leggere il [[LKN:_Personalizzare_un_Kernel|Capitolo 7]]. Qui mostreremo come selezionare le opzioni che potreste voler cambiare.


<pre>$ gcc --version</pre>
Ci sono tre differenti strumenti interattivi per la configurazione del kernel: uno basato su terminale chiamato ''menuconfig'', uno grafico basato sulle GTK+ chiamato ''gconfig'', e un altro grafico basato sulle QT chiamato ''xconfig''.


==='''Linker'''===
==='''Configurazione tramite terminale'''===
Il metodo chiamato '''menuconfig''' per configurare un kernel � un programma per terminale che d� modo di muoversi nella configurazione del kernel usando i tasti freccia della tastiera. Per avviare questa modalit� di configurazione, digitate:
<pre>$ make menuconfig</pre>
Vi apparir� una schermata molto simile a quella di figura 4-1.


Il compilatore C, ''gcc'', non compie il lavoro di compilazione interamente da solo, ma ha bisogno di alcuni strumenti, chiamati ''binutils'', per effettuare il collegamento (linking) e l'assemblaggio dei file sorgente. Il pacchetto ''binutils'' contiene anche altre utili applicazioni che permettono di intervenire sui file oggetto (''object files'', prodotti dal compilatore ma non ancora collegati, dal linker, alle librerie e/o ad altri file oggetto necessari per l'esecuzione, N.d.T.) in molti modi, ad esempio per vedere il contenuto di una libreria.
[[Immagine:Menuconfig_1.png|center|500px|thumb|''Figura 4-1. Schermata iniziale di menuconfig'']]


''binutils'' si trova di solito all'interno di un pacchetto di nome... ''binutils'' in ogni distribuzione. Se volete scaricarlo e installarlo da soli, potete trovarlo all'indirizzo http://www.gnu.org/software/binutils .
Le istruzioni per navigare attraverso il programma, e i significati dei diversi caratteri, sono mostrati in cima allo schermo. Il resto dello schermo contiene le diverse opzioni di configurazione.


La versione pi� vecchia di ''binutils'' che pu� essere utilizzata per collegare il kernel 2.6.18 � la 2.12. Per scoprire quale versione di ''binutils'' avete installata nel vostro sistema eseguite il comando seguente:
La configurazione del kernel � divisa in sezioni. Ogni sezione contiene opzioni che corrispondo ad argomenti specifici. Al loro interno possono esserci sottosezioni per vari argomenti specifici. Per esempio tutti i driver per le periferiche possono essere trovati sotto l'opzione del menu principale <tt>Device Drivers ---></tt>.


<pre>$ ld -v</pre>
[[Immagine:Menuconfig_2.png|center|500px|thumb|''Figura 4-2. Selezione dell'opzione Device Drivers'']]


==='''Make'''===
Per aprire questo menu, premete la freccia in basso nove volte, finch� la riga <tt>Device Drivers ---></tt> non � sottolineata, come mostrato in figura 4-2.


''make'' � uno strumento che cerca nei sorgenti del kernel quali file devono essere compilati e successivamente chiama il compilatore e gli altri strumenti necessari per costruire il kernel. Il kernel necessita della versione GNU di ''make'', che solitamente si trova in ogni distribuzione in un pacchetto chiamato ''make''.
Premete poi il tasto Invio. Vi porter� nel sotto-menu <tt>Device Drivers</tt> e lo mostrer� come mostrato nella figura 4-3.


Se volete scaricare e installare ''make'' da soli potete trovarlo all'indirizzo:
[[Immagine:Menuconfig_3.png|center|500px|thumb|''Figura 4-3. Sottomenu Device Drivers'']]
http://www.gnu.org/software/make .


La release pi� vecchia di make che pu� essere utilizzata con un kernel 2.6.18 � la 3.79. Vi consiglio di installare la versione stabile pi� recente, perch� le versioni pi� recenti lavorano pi� velocemente nel processare i file di compilazione.
Potete continuare a muovervi nella gerarchia dei menu allo stesso modo. Per visualizzare il sotto-menu <tt>Generic Driver Options</tt> premete Invio di nuovo, e vedrete se tre opzioni mostrate in figura 4-4.
Per verificare quale versione di make avete installata usate il comando:


<pre>$ make  --version</pre>
[[Immagine:Menuconfig_4.png|center|500px|thumb|''Figura 4-4. Sottomenu Generic Driver Options'']]


=='''Strumenti per utilizzare il kernel'''==
Le prime due opzioni hanno un simbolo <tt>[*]</tt> vicino a esse. Questo significa che quest'opzione � selezionata (perch� il simbolo <tt>*</tt> sta al centro dei due caratteri <tt>[]</tt>), e che questa � un'opzione del tipo s�-o-no. La terza opzione ha un segno <tt>< ></tt>, che mostra che questa opzione pu� essere inserita nel kernel (<tt>Y</tt>), compilata come modulo (<tt>M</tt>), o esclusa del tutto (<tt>N</tt>).


Anche se solitamente la versione del kernel che sta funzionando in un sistema non influisce su alcuna applicazione a livello utente, ci sono alcuni programmi per cui invece importante. Questa sezione descrive alcuni strumenti che probabilmente sono gi� installati nel vostro sistema Linux: se aggiornate il kernel ad una versione diversa da quella inclusa nella vostra distribuzione, potrebbe essere necessario aggiornare anche alcuni di questi pacchetti, per permettere al sistema di funzionare correttamente.
Se l'opzione � selezionata con <tt>Y</tt>, le parentesi ad angolo conterranno un <tt>*</tt>. Se selezionata come modulo con una <tt>M</tt>, conterranno una lettera <tt>M</tt>. Se � disabilitata con <tt>N</tt>, mostreranno solo uno spazio bianco.


==='''util-linux'''===
Cos�, se desiderate cambiare queste tre opzioni per selezionare solo driver che non necessitano di firmware esterno in tempo di compilazione, disabilitate l'opzione per impedire che il firmware sia compilato, e compilate il caricatore del firmware in spazio utente come modulo, digitando <tt>Y</tt> per la prima opzione, <tt>N</tt> per la seconda e <tt>M</tt> per la terza, rendendo la schermata come quella in figura 4-5.


Il pacchetto ''util-linux'' � una raccolta di piccole utilit� che assolvono ad un'ampia gamma di compiti; la maggior parte di queste utilit� si occupa del montaggio e della creazione di partizioni su disco e della gestione dell'orologio di sistema.
[[Immagine:Menuconfig_5.png|center|500px|thumb|''Figura 4-5. Sottomenu Generic Driver Options cambiato'']]


Se volete scaricare ed installare questo pacchetto da soli lo trovate al seguente indirizzo: http://www.kernel.org/pub/linux/utils/util-linux .
Quando avete completato le vostre modifiche in questa schermata, premete il tasto Esc o la freccia destra seguita dal tasto Invio per lasciare questo sottomenu. Tutte le opzioni del kernel possono essere esplorate in questa maniera.


La versione pi� vecchia di ''util-linux'' compatibile con il kernel 2.6.18 � la 2.10. &Egrave; consigliabile installare la pi� recente versione disponibile di questo pacchetto, perch� le ultime versioni supportano le nuove caratteristiche implementate nel kernel. I ''bind mounts'' sono un esempio di un'opzione inclusa nei kernel pi� nuovi, che necessita della versione pi� recente di ''util-linux'' per poter funzionare correttamente.
Quando avete finito di fare tutte le modifiche che desideriate apportare alla configurazione del kernel, uscite dal programma premendo il tasto Esc quando siete nel menu principale.


Per scoprire quale versione di ''util-linux'' avete installata nel vostro sistema usate il seguente comando:
[[Immagine:Menuconfig_6.png|center|500px|thumb|''Figura 4-6. Salvare le opzioni del kernel'']]


<pre>$ fdformat --version</pre>
Vi sar� mostrata la schermata in figura 4-6, che vi chiede se desiderate salvare la vostra modificata configurazione.


==='''module-init-tools'''===
Premete Invio per salvare la configurazione, o, se volete eliminare ogni modifica fatta, digitate la freccia destra per selezionare la voce <tt>< No ></tt> e premete Invio.


Il pacchetto ''module-init-tools'' necessario per poter utilizzare i moduli del kernel. Un ''modulo del kernel'' un pezzetto di codice caricabile che pu essere aggiunto o rimosso dal kernel anche mentre questo sta girando. &Egrave; comodo compilare i driver dei dispositivi come moduli per poter caricare solo quelli relativi allo hardware presente nel sistema. Tutte le distribuzioni di Linux usano i moduli per poter caricare solo i driver necessari al sistema in base allo hardware presente, invece di essere costretti a costruire tutti i possibili driver e opzioni del kernel in un unico blocco. L'uso dei moduli permette di risparmiare memoria, caricando solo il codice necessario per controllare correttamente la macchina.


Il processo di caricamento dei moduli ha subito una revisione radicale nella versione 2.6 del kernel. Il linker per i moduli (il codice che si occupa di risolvere tutti i simboli e capire come associare i pezzi di codice in memoria) adesso � compilato all'interno del kernel, e questo permette di avere degli strumenti a livello userspace molto leggeri. Le distribuzioni pi� vecchie hanno un pacchetto che si chiama ''modutils'' che non funziona correttamente con il kernel 2.6. Il pacchetto ''module-init-tools'' � quello di cui avete bisogno per lavorare correttamente con i moduli di kernel 2.6.
==='''Metodi grafici di configurazione'''===
I metodi di configurazione del kernel ''gconfig'' e ''xconfig'' usano un programma grafico per permettervi di modificare la configurazione. I due metodi sono pressoch� identici, l'unica differenza risiede nei diversi strumenti grafici attraverso i quali sono scritti. ''gconfig'' � scritto usando il toolkit GTK+ e ha uno schermo diviso in due regioni, come mostrato in figura 4-7.


Chi volesse scaricare e installare da solo questo pacchetto, pu� trovarlo all'indirizzo:
[[Immagine:Gconfig_1.png|center|500px|thumb|''Figura 4-7. Schermata di make gconfig'']]
http://www.kernel.org/pub/linux/utils/kernel/module-init-tools .


La versione pi� vecchia di ''module-init-tools'' compatibile con il kernel 2.6.18 � la 0.9.10. Si raccomanda di installare l'ultima release disponibile di ''module-init-tools'', in quanto permette di utilizzare alcune caratteristiche nuove del kernel. Ad esempio, la possibilit� di creare una blacklist dei moduli che non si vuole vengano automaticamente caricati da udev � una delle opzioni che sono presenti solo nelle versioni pi� recenti di ''module-init-tools''.
Il metodo ''xconfig'' � scritto usando il toolkit QT e ha uno schermo diviso in tre regioni, come in figura 4-8.
Per scoprire quale versione avete installata nel vostro sistema usate il comando:


<pre>$ depmod -V</pre>
[[Immagine:Xconfig_1.png|center|500px|thumb|''Figura 4-8. Schermata di make xconfig'']]


=='''Strumenti specifici per i filesystem'''==
Usate il mouse per navigare nei sottomenu e selezionare le opzioni. Per esempio, nella figura 4-8 potreste usarlo per selezionare il sottomenu <tt>Generic Driver Options</tt> del menu <tt>Device Drivers</tt>. Questo cambier� la schermata di ''xconfig'' e la far� diventare quella dell'immagine 4-9.


Per creare, formattare e riparare le partizioni dei dischi � necessario un ampio spettro di  strumenti specifici per i vari filesystem. Il pacchetto ''util-linux'' ne contiene alcuni, ma alcuni dei pi� popolari filesystem hanno dei pacchetti separati che contengono le utilit� necessarie.
[[Immagine:Xconfig_2.png|center|500px|thumb|''Figura 4-9. Generic Driver Options in make xconfig'']]


==='''ext2/ext3/ext4'''===
La corrispondente immagine di ''gconfig'' � in figura 4-10.


I filesystem ''ext3'' e quello in fase di sviluppo ''ext4'' sono evoluzioni dell' ''ext2'' e possono essere gestiti con gli stessi strumenti; la versione pi� recente di qualunque applicazione basata su ''ext2'' pu� essere impiegata anche sugli altri due filesystem.
[[Immagine:Gconfig_2.png|center|500px|thumb|''Figura 4-10. Generic Driver Options in make gconfig'']]


Per utilizzare questi filesystem dovete avere il pacchetto ''e2fsprogs''; l'indirizzo a cui trovarlo per scaricarlo e installarlo da soli �: http://e2fsprogs.sourceforge.net.
Modificare questo sottomenu per disabilitare la seconda opzione e rendere la terza opzione compilata come modulo genera le schermate apparire come nelle figure 4-11 e 4-12.


La versione pi� vecchia di ''e2fsprogs'' funzionante con il kernel 2.6.18 � la 1.29; � altamente consigliato utilizzare la release pi� recente per sfruttare al meglio le nuove caratteristiche dei filesystem ''ext3'' ed ''ext4''.
[[Immagine:Xconfig_3.png|center|500px|thumb|''Figura 4-11. Generic Driver Options in make xconfig, modificato'']]
[[Immagine:gconfig_3.png|center|500px|thumb|''Figura 4-12. Generic Driver Options in make gconfig, modificato'']]


Per scoprire quale versione di ''e2fsprogs'' � installata nel vostro sistema usate il comando:
Notate che nel metodo ''gconfig'' un riquadro con il segno di visto significa che l'opzione sar� compilata nel kernel, laddove una linea nel riquadro significa che l'opzione sar� compilata come modulo. Nel metodo ''xconfig'' un'opzione compilata come modulo sar� mostrata con un punto nel riquadro.


<pre>$ tune2fs</pre>
Entrambi questi metodi vi chiedono di salvare la configurazione quando uscite dal programma, e offrono la possibilit� di scrivere quella configurazione in un altro file. Potete cos� creare molteplici, distinte configurazioni.


==='''JFS'''===


Per usare il filesystem JFS di IBM � necessario avere il pacchetto ''jfsutils''; se volete scaricarlo e installarlo da soli lo trovate all'indirizzo: http://jfs.sourceforge.net.
=='''Compilazione del kernel'''==
Ora che avete creato la configurazione che intendete usare, dovete compilare il kernel. Questo � semplice come digitare un comando di un parola:
<pre>$ make
CHK include/linux/version.h
UPD include/linux/version.h
SYMLINK include/asm -> include/asm-i386
SPLIT include/linux/autoconf.h -> include/config/*
CC arch/i386/kernel/asm-offsets.s
GEN include/asm-i386/asm-offsets.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost.o
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
HOSTCC scripts/bin2c
CC init/main.o
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
CC init/do_mounts.o
...</pre>


La versione pi� vecchia di ''jfsutils'' utilizzabile correttamente con il kernel 2.6.18 � la 1.1.3; per verificare quale versione avete installata lanciate il comando:
Eseguire ''make'' fa s� che il sistema di compilazione del kernel usi il file di configurazione che avete selezionato per compilare un kernel e tutti i moduli necessari per supportare tale configurazione. Mentre il kernel � in compilazione, ''make'' mostra cosa sta correntemente succedendo ai singoli file, insieme a tutti gli avvertimenti ("warnings", N.d.T.) e gli errori di compilazioni.


<pre>$ fsck.jfs -V</pre>
Se la compilazione del kernel termina senza errori, avete creato con successo l'immagine di un kernel. Comunque deve essere propriamente installata prima che proviate ad avviarla. Leggete il [[LKN:_Installare_ed_Avviare_con_un_Kernel|Capitolo 5]] per sapere come fare.


==='''ReiserFS'''===
� molto raro avere errori di compilazione quando state compilando una versione del kernel rilasciata. Se vi capita, riportateli agli sviluppatori del kernel Linux cosicch� possano essere corretti.


Per usare il filesystem ReiserFS � necessario il pacchetto ''reiserfsprogs''. Per scaricarlo e installarlo da soli l'indirizzo : http://www.nemesys.com/download.html.
nota: Versioni del kernel pi� vecchie, precedenti al rilascio 2.6 richiedevano l'ulteriore passo ''make modules'' per compilare tutti i moduli necessari. Questo non pi� necessario.


La versione pi� vecchia di ''reiserfsprogs'' funzionante con il kernel 2.6.18 � la 3.6.3; il comando per controllare quale versione � installata nel sistema �:
=='''Opzioni di compilazione avanzate'''==
Il sistema di compilazione del kernel consente di fare molte altre cose, oltre a compilare l'intero kernel e i relativi moduli. Il Capitolo 10 contiene l'intero elenco delle opzioni che il sistema di compilazione fornisce. In questa sezione discuteremo alcune di queste opzioni avanzate. Per avere una descrizione completa di come usare altre opzioni avanzate, fate riferimento alla documentazione dentro il kernel stesso, che pu� essere trovata nella cartella ''Documentation/kbuild'' nei sorgenti.


<pre>$ reiserfsck -V</pre>
==='''Velocizzare la compilazione in macchine multiprocessore'''===
Il sistema di compilazione del kernel lavora molto bene come operazione che pu� essere divisa in pezzi pi� piccoli e assegnati a diversi processori. Facendo questo, potete usare la piena potenza di una macchina multiprocessore e ridurre considerevolmente il tempo di compilazione del kernel.


==='''XFS'''===
Per compilare un kernel in modo parallelo, usate l'opzione ''-j'' del comando ''make''. � meglio dare un numero all'opzione ''-j'' che corrisponda al doppio del numero di processori nel sistema. Quindi, per macchine con due processori, usate:
<pre>$ make -j4</pre>
e per macchine con quattro processori, usate:
<pre>$ make -j8</pre>
Se non passate un numero all'opzione ''-j'':
<pre>$ make -j</pre>
il sistema di compilazione creer� un nuovo filo ("thread", N.d.T.) per ogni sottocartella nell'albero delle cartelle del kernel, che pu� facilmente rendere la vostra macchina non in grado di rispondere ai comandi, e impiegare molto pi� tempo per completare la compilazione. Per questo si raccomanda di passare sempre un valore numerico all'opzione ''-j''.


Per usare il filesystem XFS di SGI � necessario avere il pacchetto ''xfsprogs''; � possibile scaricare il pacchetto da installare all'indirizzo: http://oss.sgi.com/project/xfs.
==='''Compilare solo una parte del kernel'''===
Quando ci si dedica allo sviluppo del kernel, a volte si desidera compilare solo una specifica sottocartella, o un singolo file dell'intero albero del kernel. Il sistema di compilazione lo consente agevolmente. Per compilare selettivamente una sottocartella, specificatela nel comando di compilazione. Per esempio, per compilare i file nella cartella '''drivers/usb/serial''', inserite: <pre>$ make drivers/usb/serial</pre>
Usando questa sintassi, comunque, non si compiler� l'immagine finale del modulo in quella cartella. Per fare questo, potete usare l'opzione <tt>M=</tt>argomento:<pre>$ make M=drivers/usb/serial</pre>che compiler� tutti i file necessari in quella cartella e collegher� le immagini finali dei moduli.


La release pi� vecchia di ''xfsprogs'' compatibile con il kernel 2.6.18 la 2.6.0; per verificare quale versione � installata nel sistema si utilizza:
Quando si compila una singola cartella in uno dei modi mostrati, l'immagine finale del kernel non viene ricollegata. Comunque ogni cambiamento che era stato effettuato alle sottocartelle non influenzer� l'immagine finale del kernel, che probabilmente non quello che desiderate. Eseguite alla fine un:<pre>$ make</pre> perch� il sistema di compilazione controlli tutti i file oggetto cambiati e colleghi in modo proprio l'immagine finale del kernel.


<pre>$ xfs_db -V</pre>
Per compilare un solo specifico file nell'albero del kernel, semplicemente passatelo come parametro a ''make''. Per esempio, se desiderate compilare il modulo ''drivers/usb/serial/visor.ko'', inserite:<pre>$ make drivers/usb/serial/visor.ko</pre>
Il sistema di compilazione compiler� tutti i file necessari per il modulo visor.ko, e far� il collegamento finale per creare il modulo.


==='''Quota'''===
==='''Sorgente in un posto, destinazione in un altro'''===
Alle volte � pi� semplice avere i sorgenti del kernel in un posto accessibile in sola lettura (come un CD-ROM, o in un sistema di controllo del codice sorgente), e collocare il risultato della compilazione altrove, cos� da non alterare l'albero originale del sorgente. Il sistema di compilazione lo realizza facilmente, richiedendo il solo argomento <tt>O=</tt> per specificare dove collocare l'output della compilazione. Per esempio se i sorgenti del kernel sono in un CD-ROM montato in ''/mnt/cdrom/'' e desiderate mettere i file compilati nella vostra cartella locale, inserite:<pre>$ cd /mnt/cdrom/linux-2.6.17.11
$ make O=~/linux/linux-2.6.17.11</pre>
Tutti i file compilati saranno creati nella cartella ''~/linux/linux-2.6.17.11''. Notate che questa opzione <tt>O=</tt> dovrebbe essere passata anche alle opzioni di configurazione della compilazione cosicch� la configurazione sia correttamente collocata nella cartella di destinazione e non in quella contenente il codice sorgente.


Per utilizzare le quote come funzionalit� del kernel � necessario avere installato il pacchetto ''quota-tools'';* {{Box|To do|nota a pi� di pagina: scoprire come si fa}} Questo pacchetto contiene applicazioni che permettono di fissare le quote di filesystem a disposizione di ogni utente, forniscono statistiche sull'uso delle quote dei vari utenti e diramano degli avvertimenti quando questi stanno per esaurire la loro quota di filesystem.
==='''Architetture differenti'''===
Una caratteristica molto utile � la costruzione di un kernel in una compilazione incrociata, per permettere a una macchina pi� potente di compilare un kernel per una sistema integrato pi� piccolo, o anche solo per controllare una compilazione per un'architettura diversa per assicurare che a un cambiamento nel codice sorgente non danneggi qualcosa di inaspettato. Il sistema di compilazione del kernel consente di specificare un'architettura diversa da quella della macchina corrente con il parametro <tt>ARCH=</tt>argomento. Il sistema di compilazione consente, inoltre, di specificare il compilatore che si desidera usare con il parametro <tt>CC=</tt>argomento o uno strumento per concatenare ("toolchain", N.d.T.) la compilazione incrociata con <tt>CROSS_COMPILE</tt> argomento.


Per scaricare e installare questo pacchetto da soli l'indirizzo �: http://sourceforge.net/projects/quota. La versione pi� vecchia utilizzabile con il kernel 2.6.18 � la 3.0.9; � possibile visualizzare la versione installata con il comando:
Per esempio, per avere la configurazione predefinita dell'architettura x86_64, si pu� inserire:


<pre>$ quota -V</pre>
<pre>$ make ARCH=x86_64 defconfig</pre>


==='''NFS'''===
Per compilare l'intero kernel con uno strumento per concatenare la compilazione situato in ''/usr/local/bin'', si pu� inserire:
<pre>$ make ARCH=arm CROSS_COMPILE=/usr/local/bin/arm-linux-</pre>


Per utilizzare correttamente il filesystem NFS � necessario il pacchetto ''nfs-utils''. ** {{Box|To do|nota a pi� di pagina: scoprire come si fa}} Questo pacchetto contiene dei programmi con cui � possibile montare delle partizioni NFS come client e far girare un server NFS.
� utile anche per i kernel non ottenuti con compilazione incrociata cambiare ci� che il sistema di costruzione del kernel usa per il compilatore. Esempi di questo sono l'utilizzo dei programmi ''distcc'' o ''ccache'', i quali riducono notevolmente il tempo di compilazione di un kernel. Per usare il programma ''ccache'' come parte del sistema di costruzione del kernel, digitate:


L'indirizzo da cui prelevare questo pacchetto per installarlo da soli �: http://nfs.sf.net.
<pre>$ make CC="ccache gcc"</pre>


La versione pi� vecchia funzionante con il kernel 2.6.18 � la 1.0.5; il comando per determinare la versione installata �:
Per usare contemporaneamente ''distcc'' e ''ccache'', inserite:


<pre>$ showmount --version</pre>
<pre>$ make CC="ccache distcc"</pre>
 
=='''Altri strumenti'''==
 
Ci sono pochi altri programmi che sono strettamente legati alla versione del kernel. Di solito questi programmi non sono necessari per far funzionare il kernel, ma rendono possibile l'accesso a tipi di hardware e di funzioni differenti.
 
==='''udev'''===
 
''udev'' � un programma che permette a Linux di fornire uno schema persistemte di attribuzione dei nomi dei device nella directory ''/dev''. Inoltre fornisce una ''/dev'' dinamica, molto simile a quella fornita dal pi� vecchio (ed ora non pi� utilizzato) filesystem ''devfs''. Quasi tutte le distribuzioni Linux usano ''udev'' per gestire la directory ''/dev'', per cui risulta necessario per eseguire correttamente il boot del sistema.
 
Sfortunatamente ''udev'' si appoggia alla struttura della directory ''/sys'', che � nota per cambiare continuamente con le release del kernel. Alcuni di questi cambiamenti in passato sono stati responsabili del malfunzionamento di ''udev'', cosicch� il sistema non era pi� in grado di fare il boot correttamente. Se ''udev'' non funziona correttamente nonostante abbiate l'ultima versione raccomandata per il vostro kernel, contattate gli sviluppatori tramite la mailing list [mailto:linux-hotplug-devel@list.sourceforge.net].
 
&Egrave; fortemente consigliato utilizzare l'ultima release di ''udev'' fornita con la vostra distribuzione, dato che � profondamente legata al processo di boot specifico della distribuzione stessa. In ogni caso, chi volesse aggiornare ''udev'' per conto proprio pu� trovarlo all'indirizzo: http:www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html.
 
La versione pi� vecchia di ''udev'' funzionante con il kernel 2.6.18 � la 0.81; � consigliabile usare la versione pi� recente, in quanto funziona meglio con i nuovi kernel, a causa del modo in cui ''udev'' e il kernel comunicano tra di loro.
 
Per conoscere quale versione di udev � installata nel sistema il comando �:
 
<pre>$ udevinfo -V</pre>
 
==='''Strumenti di analisi dei processi'''===
 
Il pacchetto ''procps'' contiene i programmi di uso comune ''ps'' e ''top'', come anche molti altri strumenti per gestire e tenere sotto controllo i processi in esecuzione nel sistema.
Se preferite scaricare ed installare da soli questo pacchetto potete trovarlo all'indirizzo
http://procps.sourceforge.net.
La versione 3.2.0 � la pi� vecchia compatibile con il kernel 2.6.18; per determinare quale versione � installata si usa il comando:
 
<pre>$ ps --version</pre>
 
==='''Strumenti per periferiche PCMCIA'''===
 
Per poter utilizzare correttamente le periferiche PCMCIA � necessario un programma a livello utente che permetta di configurarle. Per i kernel pi� vecchi questo programma si chiamava ''pcmcia-cs'', ma � stato sostituito con un sistema pi� semplice chiamato ''pcmciautils''. Se volete utilizzare periferiche PCMCIA dovete avere installato questo pacchetto.
 
Se preferite scaricare ed installare da soli questo pacchetto potete trovarlo all'indirizzo ftp://ftp.kernel.org/pub/utils/kernel/pcmcia.
 
La versione pi� vecchia di ''pcmciautils'' funzionante con il kernel 2.6.18 � la 004, ma � consigliabile installare la versione pi� recente, per poter sfruttare tutte le nuove funzioni del sottosistema PCMCIA, come ad esempio la possibilit� di caricare automaticamente i driver quando viene rilevata una nuova periferica. Il comando per scoprire quale versione di pcmciautils � installata �:
 
<pre>$ pccardctl -V</pre>