vanescar
28-04-06, 15:36
Come (ri)compilare il kernel di linux.
Perchè ricompilare? Ci possono essere vari buoni motivi per farlo, ve ne elenco alcuni:
ottimizzare il kernel per la propria macchina in modo da migliorare le prestazioni;
alleggerire il kernel precompilato (fornito dalla propria distribuzione) il quale, per ovvie ragioni, è probabilmente zeppo di feature per voi assolutamente inutili;
aggiornare il proprio kernel all'ultima release per fixare eventuali bug o poter disporre di nuove funzionalità;
per poter usare periferiche particolari non supportate dal kernel in uso.
Come ci procuriamo un kernel linux? Basta andare su http://www.kernel.org/ e scaricare l'intero codice sorgente compresso in archivio tar (es. linux-2.6.10.tar.bz2).
Dopo aver scaricato il tarball del kernel desiderato (40 mb circa), scompattatelo con uno dei seguenti comandi a seconda del tipo di compressione:
# tar xvjf linux-[versione].tar.bz2
# tar xvzf linux-[versione].tar.gz
Adesso nella vostra "working directory" vedrete una cartella "linux-[versione]", entrate in essa e digitate in successione:
# make mrproper
# make menuconfig
(il primo comando è superfluo se si sta smanettando con un kernel appena scaricato)
Si aprirà una schermata pseudo-grafica con tante opzioni tra cui scegliere.
(con #make xconfig o #make gtkconfig vi si presenterà¡ una finestra grafica, ovviamente va usato con X11 aperto. Il risultato è lo stesso, dipende dai gusti :P)
A questo punto non vi spaventate, la situazione è meno tragica di quanto possiate pensare, la cosa migliore da fare è caricare in memoria il file di configurazione del kernel attualmente in uso. Basta scegliere la voce "Load an Alternate Configuration File" e scrivere il percorso esatto, ad esempio:
/boot/config
Dopo aver caricato con successo il configure funzionante potete iniziare l'operazione "sacra" della scelta dei moduli.
Bisogna scegliere tra <*>, <M> e < >
<*> significa built-in, ció vuol dire che il modulo risiederà direttamente nella memoria del kernel. Si ottiene premendo Y.
<M> sta per modulo, in pratica viene creato un modulo staccato dal kernel che puó venire caricato in qualunque momento solo in caso di bisogno. Si ottiene premendo M.
< > significa che la feature non sarà contemplata nel kernel che ci accingiamo a compilare.
La cosa fondamentale è abilitare come built-in i driver indispensabili, come i moduli per il filesystem e quelli per il chipset della scheda madre. Aiutatevi con gli help in linea e se non sapete se inserire un modulo o meno: inseritelo.
Se avete un processore dual-core, hyperthreading o semplicemente piu processori, aggiungete il supporto smp, che si trova nel ramo "Processor type and features" e inserite il numero esatto di processori (di default è 8).
Per la scheda audio andate nella sezione "Sound" sotto "Device Drivers", disabilitate il support OSS (ormai deprecato) ma attivatene l'emulazione sotto ALSA (Advance Linux Sound Architecture) in questa maniera:
<*> Advanced Linux Sound Architecture
<M> Sequencer support
< > Sequencer dummy client
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
OSS Sequencer API
Fatto questo dirigetevi nella sezione relativa al vostro chip e abilitatelo (preferibilmente come modulo).
Dopo aver fatto tutti dovuti settaggi, tornate alla pagina principale selezionate "Exit" e successivamente "Yes" quando vi chiederà di salvare le modifiche.
Prima di iniziare facciamo un po' di pulizia con:
# make clean
Adesso non vi resta che lanciare la compilazione vera e propria. Se il kernel è della serie 2.6 vi basterà un:
# make -j3
Altrimenti:
# make bzImage -j3 && make modules
Il "-j3" permetterà al compilatore di eseguire piú processi in contemporanea (quando possibile) e vi farà risparmiare un po' di tempo.
Se la compilazione è andata a buon fine (come al solito sarete avvertiti solo se qualcosa va storto) dovete installare i moduli con il comando:
# make modules_install
I moduli si andranno a posizionare in "/lib/modules/[versione]/", per caricare un modulo si usa modprobe:
# modprobe [modulo]
Adesso dovrete ritoccare gli ultimi dettagli:
Prima di tutto copiate il System.map, il configure del kernel e il kernel stesso in /boot:
# cp .config /boot/config-new
# cp System.map /boot/System.map-new
# cp arch/i386/boot/bzImage /boot/vmlinuz-new
(questo ovviamente se usate un'architettura x86, se ad esempio avete un ppc il kernel risiederà nella cartella ppc)
Ora non vi resta che settare il vostro bootloader.
Se usate lilo editate il file /etc/lilo.conf aggiungendo le seguenti righe:
image = /boot/vmlinuz-new
root = /dev/[partizione]
label = linux-new
read-only
Infine battete in console:
# lilo -v
Se invece di lilo avete a che fare con GRUB, dovete aggiungere la seguente riga nel file menu.lst (generalmente /boot/grub/menu.lst)
root [partizione]
title linux-new
kernel /boot/vmlinuz-new ro
Adesso potete riavviare con "shutdown -r now" e vedere se il nuovo kernel funziona. In ogni caso conservate sempre un kernel di sicurezza, anche quando sarete esperti nella ricompilazione. :P
~Sergio Perticone aka gallows
Se avete dubbi, notate delle imprecisioni o semplicementemente volete comunicarmi qualcosa riguardo questo howto, non esitate a contattarmi al seguente indirizzo di posta elettronica:
gall0ws :at: tiscali :dot: it
enjoy! :)
Perchè ricompilare? Ci possono essere vari buoni motivi per farlo, ve ne elenco alcuni:
ottimizzare il kernel per la propria macchina in modo da migliorare le prestazioni;
alleggerire il kernel precompilato (fornito dalla propria distribuzione) il quale, per ovvie ragioni, è probabilmente zeppo di feature per voi assolutamente inutili;
aggiornare il proprio kernel all'ultima release per fixare eventuali bug o poter disporre di nuove funzionalità;
per poter usare periferiche particolari non supportate dal kernel in uso.
Come ci procuriamo un kernel linux? Basta andare su http://www.kernel.org/ e scaricare l'intero codice sorgente compresso in archivio tar (es. linux-2.6.10.tar.bz2).
Dopo aver scaricato il tarball del kernel desiderato (40 mb circa), scompattatelo con uno dei seguenti comandi a seconda del tipo di compressione:
# tar xvjf linux-[versione].tar.bz2
# tar xvzf linux-[versione].tar.gz
Adesso nella vostra "working directory" vedrete una cartella "linux-[versione]", entrate in essa e digitate in successione:
# make mrproper
# make menuconfig
(il primo comando è superfluo se si sta smanettando con un kernel appena scaricato)
Si aprirà una schermata pseudo-grafica con tante opzioni tra cui scegliere.
(con #make xconfig o #make gtkconfig vi si presenterà¡ una finestra grafica, ovviamente va usato con X11 aperto. Il risultato è lo stesso, dipende dai gusti :P)
A questo punto non vi spaventate, la situazione è meno tragica di quanto possiate pensare, la cosa migliore da fare è caricare in memoria il file di configurazione del kernel attualmente in uso. Basta scegliere la voce "Load an Alternate Configuration File" e scrivere il percorso esatto, ad esempio:
/boot/config
Dopo aver caricato con successo il configure funzionante potete iniziare l'operazione "sacra" della scelta dei moduli.
Bisogna scegliere tra <*>, <M> e < >
<*> significa built-in, ció vuol dire che il modulo risiederà direttamente nella memoria del kernel. Si ottiene premendo Y.
<M> sta per modulo, in pratica viene creato un modulo staccato dal kernel che puó venire caricato in qualunque momento solo in caso di bisogno. Si ottiene premendo M.
< > significa che la feature non sarà contemplata nel kernel che ci accingiamo a compilare.
La cosa fondamentale è abilitare come built-in i driver indispensabili, come i moduli per il filesystem e quelli per il chipset della scheda madre. Aiutatevi con gli help in linea e se non sapete se inserire un modulo o meno: inseritelo.
Se avete un processore dual-core, hyperthreading o semplicemente piu processori, aggiungete il supporto smp, che si trova nel ramo "Processor type and features" e inserite il numero esatto di processori (di default è 8).
Per la scheda audio andate nella sezione "Sound" sotto "Device Drivers", disabilitate il support OSS (ormai deprecato) ma attivatene l'emulazione sotto ALSA (Advance Linux Sound Architecture) in questa maniera:
<*> Advanced Linux Sound Architecture
<M> Sequencer support
< > Sequencer dummy client
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
OSS Sequencer API
Fatto questo dirigetevi nella sezione relativa al vostro chip e abilitatelo (preferibilmente come modulo).
Dopo aver fatto tutti dovuti settaggi, tornate alla pagina principale selezionate "Exit" e successivamente "Yes" quando vi chiederà di salvare le modifiche.
Prima di iniziare facciamo un po' di pulizia con:
# make clean
Adesso non vi resta che lanciare la compilazione vera e propria. Se il kernel è della serie 2.6 vi basterà un:
# make -j3
Altrimenti:
# make bzImage -j3 && make modules
Il "-j3" permetterà al compilatore di eseguire piú processi in contemporanea (quando possibile) e vi farà risparmiare un po' di tempo.
Se la compilazione è andata a buon fine (come al solito sarete avvertiti solo se qualcosa va storto) dovete installare i moduli con il comando:
# make modules_install
I moduli si andranno a posizionare in "/lib/modules/[versione]/", per caricare un modulo si usa modprobe:
# modprobe [modulo]
Adesso dovrete ritoccare gli ultimi dettagli:
Prima di tutto copiate il System.map, il configure del kernel e il kernel stesso in /boot:
# cp .config /boot/config-new
# cp System.map /boot/System.map-new
# cp arch/i386/boot/bzImage /boot/vmlinuz-new
(questo ovviamente se usate un'architettura x86, se ad esempio avete un ppc il kernel risiederà nella cartella ppc)
Ora non vi resta che settare il vostro bootloader.
Se usate lilo editate il file /etc/lilo.conf aggiungendo le seguenti righe:
image = /boot/vmlinuz-new
root = /dev/[partizione]
label = linux-new
read-only
Infine battete in console:
# lilo -v
Se invece di lilo avete a che fare con GRUB, dovete aggiungere la seguente riga nel file menu.lst (generalmente /boot/grub/menu.lst)
root [partizione]
title linux-new
kernel /boot/vmlinuz-new ro
Adesso potete riavviare con "shutdown -r now" e vedere se il nuovo kernel funziona. In ogni caso conservate sempre un kernel di sicurezza, anche quando sarete esperti nella ricompilazione. :P
~Sergio Perticone aka gallows
Se avete dubbi, notate delle imprecisioni o semplicementemente volete comunicarmi qualcosa riguardo questo howto, non esitate a contattarmi al seguente indirizzo di posta elettronica:
gall0ws :at: tiscali :dot: it
enjoy! :)