Guida alla compilazione del kernel Linux 3.x

Generalmente, compilare il kernel è un’operazione abbastaza inutile su quasi tutti i computer desktop. Le distribuzioni Linux vengono distribuite con kernel precompilati che girano su una incredibile varietà di piattaforme. Può capitare tuttavia che la nostra distribuzione abbia un kernel che non funziona bene con il proprio hardware e siamo a conoscenza del fatto che una versione più recente sia in grado di risolvere il problema.

O magari volete semplicemente studiare un po’ com’è fatto il kernel ed ottimizzarlo un pochino per la vostra macchina.

In ogni caso, siete nel posto giusto.

Innanzi tutto, scarichiamo l’ultima versione stabile del kernel, al momento in cui scrivo la 3.5.3 e decomprimiamo l’archivio:

 

Per essere sicuri di lavorare in un ambiente pulito (anche se è ovvio che l’ambiente sia pulito se avete appena scaricato il sorgente, tuttavia non dimenticate mai questo passaggio per eventuali ricompilazioni) diamo il seguente comando:

cd linux-3.5.3
make mrproper

In pochi probabilmente sapranno cos’è mrproper, che si legge Mister Proper… conosciuto in Italia come Mastro Lindo. Ecco una pagina di wikipedia dove potete anche leggere il riferimento alla compilazione del kernel Linux.

A questo punto siamo pronti per cominciare la parte più faticosa della compilazione del kernel: la configurazione.

Per facilitarci il compito, possiamo partire da una configurazione già pronta. L’ideale è prendere l’attuale configurazione del kernel attualmente in esecuzione sulla nostra macchina. In questo modo, possiamo limitarci a modificare solo le nuove voci che sono state aggiunte al kernel al variare di versione. Copiamo quindi il vecchio file di configurazione all’interno della nuova cartella.

cp /boot/config .config

Il file di configurazione del kernel si trova all’interno della cartella /boot ma è possibile che abbia un nome differente da config, magari si chiama config-3.0.2-generic o qualcosa di simile. Diamo adesso il seguente comando:

make oldconfig

Con questo comando, make esaminerà il vecchio file di configurazione e vi proporrà soltanto le voci che sono cambiate. Attenzione perchè tra una versione del kernel e l’altra ci possono essere decine e decine di voci differenti.

Alla fine di questo procedimento, potete dare un’occhiata alla configurazione globale del kernel. Ci sono tre modi per proseguire:

make menuconfig
make xconfig
make gconfig

Il primo comando avvia un’interfaccia da terminale basata su ncurses e funziona senza problemi su tutti i sistemi. Gli altri due comandi avviano delle interfacce grafice basate rispettivamente sulle librerie Qt e sulle librerie GTK. Ad ogni modo, adesso potrete modificare ogni singolo parametro del kernel, avendo la certezza che tutte le configurazioni fondamentali per far funzionare il kernel sul vostro computer sono state ereditate dal vecchio file di configurazione.

Una volta che avete finito, si può partire con la compilazione vera e propria:

make

Se volete accelerare il processo di compilazione (specie se avete computer con processore multi core, com’è probabile che sia al giorno d’oggi), potete lanciare make -jNUM, dove NUM rappresenta il numero di processi paralleli che volete far partire.

A questo punto potete andare a prendervi un caffè, farvi una doccia o vedervi l’inizio di un film. Io sul mio computer quad core e make -j5 ci ho messo 58 minuti a compilare il kernel. Se siete interessati a scoprire quanto tempo ci mette il vostro computer, potreste usare il comando time:

time make

E alla fine della compilazione, il terminale vi dirà quanto tempo ci è voluto per portare a termine il comando.

Adesso che il kernel è stato compilato, dobbiamo installare i moduli:

make modules_install

Il kernel è finalmente pronto. Non ci resta altro da fare che copiare i file nella cartella /boot e aggiornare le impostazioni del nostro bootloader.

cp .config /boot/config-3.5.3-custom
cp System.map /boot/System.map-3.5.3-custom
cp arch/x86_64/boot/bzImage /boot/vmlinuz-3.5.3-custom

Io ho utilizzato un kernel huge e quindi non avevo bisogno di nessun initrd, se invece la configurazione del vostro kernel prevede l’utilizzo di un initrd, questo è il momento di dare un comando in più:

mkintrd /boot/initrd-3.5.3custom.img 3.5.3custom 

Riavviate e dovreste essere in grado di utilizzare il nuovo kernel.