Repository 32bit  Forum
Repository 64bit  Wiki

Compilazione e ricompilazione Kernel su Slackware: differenze tra le versioni

Da Slacky.eu.
(aggiunta la parte 3.x.x)
m (il sonno...)
 
(5 revisioni intermedie di un utente non mostrate)
Riga 143: Riga 143:
riavviate il sistema e godetevi il vostro nuovo Kernel.
riavviate il sistema e godetevi il vostro nuovo Kernel.
= Compilazione Kernel Serie 2.6.xx: =
+
= Compilazione Kernel Serie 2.6.xx =
Slackware dalla versione 9.1 è pronta per il Kernel 2.6, infatti tutti i programmi di sviluppo necessari alla compilazione sono disponibili, quindi non dovrete fare nessun upgrade. Per comodità recuperate il file config-generic-2.6.xx di Patrick http://slackware.osuosl.org/slackware-current/source/k/ e salvatelo nella vostra home, partire con un file di configurazione sicuro è comodo e ci risparmierà diverso lavoro, poi recuperate i sorgenti del Kernel da http://www.kernel.org/pub/linux/kernel prelevando il formato tar.bz2 o tar.gz, il bz2 utilizzando una compressione migliore sarà più piccolo e quindi più veloce da trasferire.Dopo aver scaricato i sorgenti del kernel ad esempio nella vostra home, si devono copiare in /usr/src per poi decomprimerli il tutto rigorosamente da ROOT:
Slackware dalla versione 9.1 è pronta per il Kernel 2.6, infatti tutti i programmi di sviluppo necessari alla compilazione sono disponibili, quindi non dovrete fare nessun upgrade. Per comodità recuperate il file config-generic-2.6.xx di Patrick http://slackware.osuosl.org/slackware-current/source/k/ e salvatelo nella vostra home, partire con un file di configurazione sicuro è comodo e ci risparmierà diverso lavoro, poi recuperate i sorgenti del Kernel da http://www.kernel.org/pub/linux/kernel prelevando il formato tar.bz2 o tar.gz, il bz2 utilizzando una compressione migliore sarà più piccolo e quindi più veloce da trasferire.Dopo aver scaricato i sorgenti del kernel ad esempio nella vostra home, si devono copiare in /usr/src per poi decomprimerli il tutto rigorosamente da ROOT:
Riga 183: Riga 183:
ora modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori).In questo modo nel menù iniziale di lilo vi troverete a poter avviare 2 kernel, ricordatevi di tenere sempre un kernel stabile in modo che se quello compilato ha problemi si può sempre utilizzare quello di riserva.
ora modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori).In questo modo nel menù iniziale di lilo vi troverete a poter avviare 2 kernel, ricordatevi di tenere sempre un kernel stabile in modo che se quello compilato ha problemi si può sempre utilizzare quello di riserva.
image = /boot/vmlinuz
image = /boot/vmlinuz
root = /dev/hda2
+
root = /dev/sda2
label = Slack_2.4.33
label = Slack_2.4.33
read-only
read-only
image = /boot/vmlinuz-2.6.17.11
image = /boot/vmlinuz-2.6.17.11
root = /dev/hda2
+
root = /dev/sda2
label = Slack_2.6.17.11
label = Slack_2.6.17.11
read-only
read-only
Riga 234: Riga 234:
ora modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori)
ora modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori)
image = /boot/vmlinuz
image = /boot/vmlinuz
root = /dev/hda2
+
root = /dev/sda2
label = Slack_2.6.xx
label = Slack_2.6.xx
read-only
read-only
image = /boot/vmlinuz-2.6.xx-new
image = /boot/vmlinuz-2.6.xx-new
root = /dev/hda2
+
root = /dev/sda2
label = Slack_2.6.xx_New
label = Slack_2.6.xx_New
read-only
read-only
Riga 250: Riga 250:
# lilo -v
# lilo -v
riavviate il sistema e godetevi il nuovo Kernel.
riavviate il sistema e godetevi il nuovo Kernel.
 
= System.map e Patch: =
 
 
Una breve puntualizzazione sul System.map, questo file contiene la mappatura delle locazioni di memoria del kernel, se aprite con un editor di testo il file troverete una lista simile a questa (c0100000 A _text), dove la prima parte è l'indirizzo di memoria e la seconda la parola chiave associata. Quando usate il kernel e di conseguenza lo spazio di memoria del kernel, la parola chiave richiamarà l'indirizzo di memoria corrispondente ottenendo così i dati richiesti. Se in /boot avete più System.map, relativi a più Kernel, klogd eseguirà una scansione confrontando la mappatura del kernel fino a quando non troverà quello giusto per il Kernel da bootare. Un metodo molto originale per gestire l'avvio del Kernel con il suo System.map è quello di eliminare il link simbolico /boot/System.map rinominare i due System.map con la relativa versione (es. System.map-2.4.33 e System.map-2.6.17.11) e aggiungere questa riga al vostro /etc/rc.d/rc.local
 
rm -fr /boot/System.map && ln -s /boot/System.map-$(uname -r) /boot/System.map
 
in questo modo verrà ricreato ogni volta il link simbolico System.map relativo la Kernel da bootare.<br>
 
Se dovete applicare file patch (vale sia per il Kernel 2.4.xx che per il 2.6.xx) ricordatevi che vanno installate in ordine crescente di rilascio, dal più piccolo al più grande, le trovate nei formati gzip o bzip2 e si applicano nel seguente modo:
 
# cp patch-2.6.xx.bz2 /usr/src/linux
 
# cd /usr/src/linux
 
# bzip2 -dc patch-2.6.xx.bz2 | patch -p1
 
per il formato gzip usate
 
# gzip -cd patch-2.6.xx.gz | patch -p1
 
seguite la stessa procedura per tutte le patch, controllando l'eventuale file xxx.rej che indica un rifiuto della patch. Altra nota importante riguarda alcune installazioni precedenti alla ricompilazione che vanno reinstallate, vedi Alsa, Nvidia, Lmsensors.
 
= Compilazione Kernel Serie 3.x.x =
= Compilazione Kernel Serie 3.x.x =
Riga 270: Riga 257:
# rm linux
# rm linux
decomprimete i sorgenti:
decomprimete i sorgenti:
# tar xvzf linux-3.x.x.tar.gz o tar xvjf linux-3.x.x.tar.bz2
+
# gzip -cd linux-3.X.tar.gz | tar xvf -
  +
oppure
  +
# bzip2 -dc linux-3.X.tar.bz2 | tar xvf -
ricreate il link simbolico:
ricreate il link simbolico:
# ln -s linux-3.x.x linux
# ln -s linux-3.x.x linux
Riga 276: Riga 263:
# cd linux
# cd linux
# make mrproper
# make mrproper
Ora potete incominciate la configurazione vera e propria. Gli strumenti a disposizione sono:
+
Ora potete cominciare la configurazione vera e propria. Gli strumenti a disposizione sono:
# make config
 
# make menuconfig
# make menuconfig
  +
# make config
  +
# make nconfig
# make xconfig
# make xconfig
  +
# make gconfig
# make oldconfig
# make oldconfig
I primi due si usano direttamente da shell, ed è migliore '''make menuconfig''' che usa ncurses ed è più semplice e intuitivo del primo; make xconfig invece deve essere avviato da X quindi in ambiente grafico.
+
....
Make oldconfig è molto comodo in caso di aggiornamento, e vi chiederà solo le risposte alle nuove domande di configurazione, che si aggiungono di volta in volta alle release; ovviamente, dovete avere il file .config presente in /usr/src/linux. Procediamo con la configurazione usando make menuconfig
+
  +
'''Comunque sia leggere sempre il file README'''
  +
  +
I primi due si usano direttamente da shell, il più usato è '''make menuconfig''' che usa ncurses, più semplice e intuitivo; make xconfig invece deve essere avviato da X quindi in ambiente grafico.
  +
Make oldconfig "recicla" il vecchio ''.config'' ed è molto comodo in caso di aggiornamento, vi chiederà solo le risposte alle nuove domande di configurazione, che si aggiungono di volta in volta alle release. Procediamo con la configurazione usando make menuconfig
# make menuconfig
# make menuconfig
dopo potrete creare l'immagine del kernel
+
Una volta finito lo stesso menuconfig vi suggerisce la creazione del kernel, indi, diamo un bel make!
# make -j5 (utile su una cpu con 3-4 processori reali)
# make -j5 (utile su una cpu con 3-4 processori reali)
La formula corretta sarebbe il numero delle cpu +1 unità o max +2, eccedere può provocare errori di compilazione. Oggi nelle nuove cpu sono presenti più di un processore e questo snellisce notevolmente la parte della compilazione
+
La formula corretta sarebbe il numero delle cpu +1 unità o max +2, eccedere può provocare errori di compilazione. Oggi nelle nuove cpu sono presenti più di un processore e questo snellisce notevolmente il lavoro.
  +
Procedete quindi con la compilazione ed installazione dei moduli
Procedete quindi con la compilazione ed installazione dei moduli
# make modules_install
# make modules_install
Riga 291: Riga 281:
Procediamo con l' istallazione del kernel
Procediamo con l' istallazione del kernel
# make install
# make install
  +
questo install copia direttamente il kernel nella directory /boot e lo verifica con il bootloader
Adesso modificate /etc/lilo.conf
Adesso modificate /etc/lilo.conf
image = /boot/vmlinuz
image = /boot/vmlinuz
Riga 300: Riga 291:
Riavviate il sistema e godetevi il vostro nuovo kernel.
Riavviate il sistema e godetevi il vostro nuovo kernel.
  +
= System.map e Patch: =
  +
  +
Una breve puntualizzazione sul System.map, questo file contiene la mappatura delle locazioni di memoria del kernel, se aprite con un editor di testo il file troverete una lista simile a questa (c0100000 A _text), dove la prima parte è l'indirizzo di memoria e la seconda la parola chiave associata. Quando usate il kernel e di conseguenza lo spazio di memoria del kernel, la parola chiave richiamarà l'indirizzo di memoria corrispondente ottenendo così i dati richiesti. Se in /boot avete più System.map, relativi a più Kernel, klogd eseguirà una scansione confrontando la mappatura del kernel fino a quando non troverà quello giusto per il Kernel da bootare. Un metodo molto originale per gestire l'avvio del Kernel con il suo System.map è quello di eliminare il link simbolico /boot/System.map rinominare i due System.map con la relativa versione (es. System.map-2.4.33 e System.map-2.6.17.11) e aggiungere questa riga al vostro /etc/rc.d/rc.local
  +
rm -fr /boot/System.map && ln -s /boot/System.map-$(uname -r) /boot/System.map
  +
in questo modo verrà ricreato ogni volta il link simbolico System.map relativo la Kernel da bootare.<br>
  +
Se dovete applicare file patch (vale sia per il Kernel 2.4.xx che per il 2.6.xx) ricordatevi che vanno installate in ordine crescente di rilascio, dal più piccolo al più grande, le trovate nei formati gzip o bzip2 e si applicano nel seguente modo:
  +
# cp patch-3.x.bz2 /usr/src/linux
  +
# cd /usr/src/linux
  +
# bzip2 -dc patch-3.x.bz2 | patch -p1
  +
per il formato gzip usate
  +
# gzip -cd patch-3.x.gz | patch -p1
  +
seguite la stessa procedura per tutte le patch, controllando l'eventuale file xxx.rej che indica un rifiuto della patch. Altra nota importante riguarda alcune installazioni precedenti alla ricompilazione che vanno reinstallate, vedi Alsa, Nvidia, Lmsensors.
= Conclusioni: =
= Conclusioni: =

Versione attuale delle 11:52, 29 set 2012


Attenzione
Nelle ultime release il kernel ha cambiato alcune cose, prestare molta attenzione nel seguire questa guida. E ricordarsi sempre che sono indicazioni e non comandi da scrivere senza prima capire cosa si sta facendo

Questo articolo spiega con compilare e ricompilare il Kernel Linux su distribuzioni GNU/Linux Slackware

Indice

[modifica] Introduzione

Il kernel è il nucleo del sistema operativo, fornisce le funzionalità di base al nostro sistema, gestisce in primis la memoria delle risorse del sistema e delle periferiche. L'interfaccia utente del kernel è la shell. Quando un utente usa un programma, richiede le risorse al kernel attraverso le system call e non accede mai direttamente all'hardware (CPU). Quindi il kernel si occupa di gestire il tempo processore, la memoria e le comunicazioni organizzandole in processi a seconda della priorità. Il kernel Linux è stato iniziato da Linus Torvalds nel 1991, ed è in continua evoluzione: pensate che uno dei primi kernel (0.10) pesava circa 0.2MB con 10.000 righe di codice, mentre ora siamo attorno ai 150MB con più di 5.000.000 di righe di codice.
Il sito di riferimento è http://www.kernel.org. I kernel recenti hanno sempre di più la capacità di supportare hardware nuovo, di gestire in modo ottimale i processi e, perché no, anche risultare più veloci e stabili, senza contare che a ogni rilascio vengono corretti noiosi bug di sicurezza. Personalizzazione, adattamento e snellimento sono i motivi principali che ci spingono a ricompilare il kernel solitamente fornito con la nostra distribuzione.

[modifica] Floppy di avvio

La prima cosa da fare è creare un floppy di avvio, di solito creato in fase di installazione. Spesso però i floppy fanno una brutta fine: quindi create il vostro floppy di emergenza con mkrescue o makebootdisk, oppure ancora ricorrendo a pkgtool/setup, molto comodo.

[modifica] Kernel precompilato Slackware

Nei CD o nei vari Mirror di Slackware, nella dir /kernels sono presenti molti kernel precompilati subito disponibili all'uso. Ovviamente dovete avere le idee chiare su quale kernel usare, considerando quindi il supporto all'hardware e le esigenze del vostro sistema. Ricordatevi che i kernel che finiscono con .i sono Kernel IDE e quindi senza supporto SCSI, mentre quelli che finiscono con .s includono tutti i supporti IDE e in più anche quelli SCSI. All'interno delle sottodirectory dei vari kernel troverete questi 3 file:

System.map.gz, che è la mappa per questo kernel
bzImage (o zImage), che è l'immagine per questo kernel
config, che è il file di configurazione per questo kernel.

Collocati normalmente in /boot, questi file avranno qui nomi diversi: System.map sarà System.map-ide-2.4.xx, config sarà config-ide-2.4.xx, l'immagine del Kernel sarà vmlinuz-ide-2.4.xx, e tutti quanti avranno un link simbolico:

config -> config-ide-2.4.xx
System.map -> System.map-ide-2.4.xx
vmlinuz -> vmlinuz-ide-2.4.xx.

Scaricate i 3 file in /tmp e procedete con questi comandi:

# cd /tmp
# rm /boot/config System.map vmlinuz
per rimuovere i link simbolici
# gzip -d System.map.gz | mv System.map /boot/System.map-new | ln -s /boot/System.map-new /boot/System.map
per decomprimere spostare in /boot il file System.map e ricreare il link
# mv bzImage /boot/vmlinuz-new | ln -s /boot/vmlinuz-new /boot/vmlinuz
per spostare il nuovo kernel in /boot e ricreare il link simbolico vmlinuz
# mv config /boot/config-new | ln -s /boot/config-new /boot/config
per spostare il nuovo config e ricreare il link
# lilo -v per
aggiornare la configurazione

Riavviate, e se tutto funziona potete anche eliminare la vecchia immagine del kernel, nonché i vecchi system.map e config.

[modifica] Compilazione Kernel Serie 2.4.xx

Prima di tutto controllate l'installazione dei programmi di sviluppo della serie D indispensabili in caso di compilazione; potete trovarli nei CD di Slackware, ma con installazione classica sicuramente saranno già presenti nel vostro sistema. Recuperate i sorgenti del kernel da (http://www.kernel.org/pub/linux/kernel) prelevando il formato tar.bz2 o tar.gz (il formato .bz2, utilizzando una compressione migliore, sarà più piccolo e quindi più veloce da trasferire). Scaricate i sorgenti in /usr/src e cancellate il link simbolico linux:

# cd /usr/src
# rm linux

decomprimete i sorgenti:

# tar xvzf linux-2.4.xx.tar.gz o tar xvjf linux-2.4.xx.tar.bz2

ricreate il link simbolico:

# ln -s linux-2.4.xx linux

preparate l'ambiente:

# cd linux
# make mrproper

Ora potete incominciate la configurazione vera e propria. Gli strumenti a disposizione sono:

# make config
# make menuconfig
# make xconfig
# make oldconfig

I primi due si usano direttamente da shell, ed è migliore make menuconfig che usa ncurses ed è più semplice e intuitivo del primo; make xconfig invece deve essere avviato da X quindi in ambiente grafico. Make oldconfig è molto comodo in caso di aggiornamento, e vi chiederà solo le risposte alle nuove domande di configurazione, che si aggiungono di volta in volta alle release; ovviamente, dovete avere il file .config presente in /usr/src/linux. Procediamo con la configurazione usando make menuconfig

# make menuconfig

Da qui potrete configurare il kernel da zero, troverete un esaustivo < Help > che vi aiuterà nella configurazione. Terminate le modifiche uscire con < Exit > e alla domanda "Do you wish to save your new kernel configuration?" decidete se salvare la configurazione o ripeterla. Iin caso affermativo verrà creato in /usr/src/linux il file .config che contiene appunto tutta la configurazione del kernel. Con versioni di kernel uguale (2.4.22 --> 2.4.26 e non 2.4.xx --> 2.6.xx) potete anche caricare una configurazione nota usando la funzione Load an Alternate Configuration File (la trovate in fondo al menu), ripescando il file di configurazione salvato (ad esempio) in /boot... Attenzione !! se usate questo metodo dovete salvare il nuovo file di configurazione con la funzione Save Configuration to an Alternate File, questo per non sovrascrivere il config funzionante. Anche in questo caso, terminate le modifiche uscite con < Exit > e salvate la configurazione. Incominciate la compilazione preparando la struttura delle dipendenze

# make dep

rimuovete i file temporanei e di debug

# make clean

dopo potrete creare l'immagine del kernel

# make -j5 bzImage

Potevate usare anche zImage, ma ormai si tende a usare questo tipo di algoritmo. Terminato il make bzImage vi troverete il kernel compilato in /usr/scr/linux/arch/i386/boot. Procedete quindi con la compilazione e installazione dei moduli

# make -j5 modules
# make modules_install

I moduli saranno installati regolarmente in /lib/modules/versione-kernel. Poiché Siete ancora in /usr/src/linux, il comando ls -a vi mostrerà il contenuto della directory: noterete un file .config e un file System.map. Questi due file vanno copiati in /boot, ma la cosa migliore è rinominarli gestendo una nuova direttiva in LILO

# mv System.map /boot/System.map-2.4.xx
# cp .config /boot/config-2.4.xx

Occupiamoci ora del kernel

# mv /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.xx

Adesso modificate /etc/lilo.conf. Potete prendete come riferimento questo esempio (man lilo per info maggiori)

image = /boot/vmlinuz
root = /dev/hda2
label = Slack_2.4.22
read-only
image = /boot/vmlinuz-2.4.26
root = /dev/hda2
label = Slack_2.4.26
read-only

Volendo potete anche rimuovete i link simbolici che puntano ai vecchi file

# rm /boot/System.map config vmlinuz

e ricreare quelli nuovi che puntano ai nuovi file

# ln -s /boot/System.map-2.4.xx /boot/System.map
# ln -s /boot/config-2.4.xx /boot/config
# ln -s /boot/bzImage-2.4.xx /boot/vmlinuz

In questo modo il kernel appena compilato sarà quello di default, perché la direttiva di lilo punta direttamente al link simbolico vmlinuz. Terminato questo, impartite il comando lilo per aggiornare la nuova configurazione

# lilo -v

Riavviate il sistema e godetevi il vostro nuovo kernel.

[modifica] Ricompilazione Kernel Serie 2.4.xx:

Se non avete la necessità di compilare un nuovo Kernel e volete solo apportare delle modifiche, magari di snellimento o di ottimizzazione dovete avere i sorgenti regolarmente installati in /usr/src, eventualmente recuperateli dal CD o da un mirror Slackware (slackware/k/), li potrete installare con il comando:

# installpkg kernel-source-2.4.xx-noarch-x.tgz

prima di procedere fate il backup della vostra /lib/modules/versione-kernel, questa dir viene sovrascritta in fase di installazione dei moduli, e vi assicura dei moduli funzionanti in caso di ripristino

# cd /lib/modules/
# tar cf 2.4.xx.tar 2.4.xx 

entrate in /usr/src/linux e preparate l'ambiente

# cd /usr/src/linux
# make mrproper

ora apportate le vostre modifiche usando uno dei tre tool

# make config
# make menuconfig
# make xconfig

i primi due si usano direttamente da shell, meglio make menuconfig che usa ncurses ed è più semplice e intuitivo del primo, make xconfig invece deve essere avviato da X quindi in ambiente grafico

# make menuconfig

scorrete il men fino in fondo e con la funzione Load an Alternate Configuration File caricare il file di configurazione salvato in /boot (config-ide-2.4.33 per esempio) eseguite le modifiche e salvate la nuova configurazione usando la funzione Save Configuration to an Alternate File così da non sovrascrivere il config funzionante. Eventualmente per non fare la ricerca del file config invece di usare make mrproper usate make clean che elimina la maggior parte dei files ma non il config. Terminate le modifiche, uscite con < Exit > e salvate la configurazione. Create la struttura delle dipendenze e rimuovete i file temporanei e di debug

# make dep
# make clean

create il Kernel

# make -j5 bzImage

vi troverete il Kernel pronto in /usr/scr/linux/arch/i386/boot. Compilate e installate i moduli

# make -j5 modules
# make modules_install

i moduli saranno reinstallati regolarmente in /lib/modules/versione-kernel.
Siete ancora in /usr/src/linux un ls -a vi mostrerà il contenuto della dir, noterete un file .config e un file System.map questi due file vanno copiati in /boot ma la cosa migliore è rinominarli gestendo una nuova direttiva in LILO

# mv System.map /boot/System.map-2.4.xx-new
# cp .config /boot/config-2.4.xx-new

ora il Kernel

# mv /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.xx-new

ora modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori)

image = /boot/vmlinuz
root = /dev/hda2
label = Slack_2.4.26
read-only
image = /boot/vmlinuz-2.4.26-new
root = /dev/hda2
label = Slack_2.4.26_New
read-only

volendo potete anche rimuovete i link simbolici che puntano ai vecchi file

# rm /boot/System.map config vmlinuz

e ricreare quelli nuovi che puntano ai nuovi file

# ln -s /boot/System.map-2.4.xx-new /boot/System.map
# ln -s /boot/config-2.4.xx-new /boot/config
# ln -s /boot/vmlinuz-2.4.xx-new /boot/vmlinuz

in questo modo il Kernel appena compilato sarà quello di default perché la direttiva di lilo punta direttamente al link simbolico vmlinuz. Terminato questo impartite il comando lilo per aggiornare la nuova configurazione

# lilo -v

riavviate il sistema e godetevi il vostro nuovo Kernel.

[modifica] Compilazione Kernel Serie 2.6.xx

Slackware dalla versione 9.1 è pronta per il Kernel 2.6, infatti tutti i programmi di sviluppo necessari alla compilazione sono disponibili, quindi non dovrete fare nessun upgrade. Per comodità recuperate il file config-generic-2.6.xx di Patrick http://slackware.osuosl.org/slackware-current/source/k/ e salvatelo nella vostra home, partire con un file di configurazione sicuro è comodo e ci risparmierà diverso lavoro, poi recuperate i sorgenti del Kernel da http://www.kernel.org/pub/linux/kernel prelevando il formato tar.bz2 o tar.gz, il bz2 utilizzando una compressione migliore sarà più piccolo e quindi più veloce da trasferire.Dopo aver scaricato i sorgenti del kernel ad esempio nella vostra home, si devono copiare in /usr/src per poi decomprimerli il tutto rigorosamente da ROOT:

#cp linux-2.6.xx.tar.bz2 /usr/src

entriamo nella directory /usr/src e decomprimiamo il file

# cd /usr/src
# tar xjvf linux-2.6.xx.tar.bz2

cancellate e ricreate il link simbolico

# rm linux ; ln -s linux-2.6.xx linux

spostatevi in linux

# cd linux

preparate l'ambiente

# make mrproper

è buona cosa a questo punto, copiarsi il file config-generic per avere una configurazione ottimale e per essere sicuri che il nuovo kernel funzioni senza problemi:

# cp /boot/config-huge-smp-2.6.xx-smp /usr/src/linux-2.6.xx/.config 

io uso questo file config voi potete comunque mettere quello che utilizzate. A questo punto il file di configurazione sarà copiato in 2.6.xx .config del nuovo kernel,procediamo con la configurazione digitando:

# make oldconfig

rispondete alle domande senza preoccuparvi di sbagliare, le configurazioni poi le ritroverete nei tool grafici se vorrete modificare qualche cosa continuate la configurazione del Kernel utilizzando uno dei seguenti tool:

make menuconfig
make xconfig
make gconfig

make menuconfig che usa ncurses si basa su un menù testuale, xconfig e gconfig devono essere avviati da X e usano rispettivamente le lib QT e GTK. Make oldconfig è molto comodo in caso di aggiornamento, e vi chiederà solo le risposte alle nuove domande di configurazione, che si aggiungono di volta in volta alle release, ovviamente dovete avere il file .config presente in /usr/src/linux. Procedete con la configurazione usando make menuconfig

# make menuconfig

a questo punto potrete o configurare il Kernel da zero, usando l'esaustivo < Help > che vi aiuterà nella configurazione, oppure, scelta più sensata, usare il file di configurazione dal grande PJV. Nel primo caso terminate le modifiche uscire con < Exit > e alla domanda Do you wish to save your new kernel configuration decidete se salvare la configurazione o ripeterla, se invece optate per la seconda caricate la configurazione nota di Patrik usando la funzione Load an Alternate Configuration File (la trovate in fondo al men), apportate le modifiche e salvate con la funzione Save Configuration to an Alternate File, questo per non sovrascrivere il config funzionante. Importante, non usate i config della versione 2.4.xx è sconsigliato !
Uscite con < Exit > e salvate la configurazione. In entrambi i casi verrà creato in /usr/src/linux il file .config che contiene appunto tutta la configurazione del Kernel. Terminata la configurazione create l'immagine del Kernel compresso usando

# make 

Il make è il comando che compila realmente il kernel, a questo comando si può passare l'opzione -j2 o -j3 che indicano il numero di processi da lanciare in parallelo durante la compilazione;con questa opzione non si fa altro che velocizzare il tempo per la compilazione:una singola compilazione non occupa la cpu al 100%, mentre due o più processi permettono di sfruttare meglio la macchina e di diminuire il tempo totale di compilazione.(ricordatevi che non ha senso usare un numero di processi maggiore di 2 o 3 su macchine che usano una sola CPU.)

Per fare direttamente un boot disk (senza filesystem di root o LILO) inserite un floppy nuovo e impartite il comando
# make bzdisk

dopo un certo periodo che dipende ovviamente dalla velocità del vostro sistema vi troverete l'immagine del Kernel pronta in /usr/src/linux/arch/i386/boot/. Procedete con la compilazione e installazione dei moduli con i seguenti comandi

# make modules_install

i moduli saranno installati regolarmente in /lib/modules/versione-kernel. Siete ancora in /usr/src/linux un ls -a vi mostrerà il contenuto della dir, noterete il file .config e un file System.map questi due file vanno copiati in /boot ma la cosa migliore è rinominarli gestendo una nuova direttiva in LILO

# cp System.map /boot/System.map-2.6.xx
# cp .config /boot/config-2.6.xx

ora il Kernel

# cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.xx

ora modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori).In questo modo nel menù iniziale di lilo vi troverete a poter avviare 2 kernel, ricordatevi di tenere sempre un kernel stabile in modo che se quello compilato ha problemi si può sempre utilizzare quello di riserva.

image = /boot/vmlinuz
root = /dev/sda2
label = Slack_2.4.33
read-only
image = /boot/vmlinuz-2.6.17.11
root = /dev/sda2
label = Slack_2.6.17.11
read-only

terminato questo impartite il comando lilo per aggiornare la nuova configurazione

# lilo -v

volendo potete anche rimuovete i link simbolici che puntano ai vecchi file

# rm /boot/System.map config vmlinuz

e ricreate quelli nuovi che puntano ai nuovi file

# ln -s /boot/System.map-2.6.xx /boot/System.map
# ln -s /boot/config-2.6.xx /boot/config
# ln -s /boot/vmlinuz-2.6.xx /boot/vmlinuz

in questo modo il Kernel appena compilato sarà quello di default perché la direttiva di lilo punta direttamente al link simbolico vmlinuz. Se mancante create il file modprobe.conf, infatti dal 2.6.xx modules.conf è superato da modprobe.conf

# generate-modprobe.conf /etc/modprobe.conf

ora dovete modificare il file /etc/fstab per inserire il filesystem virtuale Sysfs, il quale si occupa delle informazioni sui dispositivi lasciando a Procfs il compito delle informazioni sui processi, quindi se non presente create nella root principale la dir sys

# mkdir /sys

e poi inserite in /etc/fstab (mantenendo la giusta formattazione) una riga come questa

none /sys sysfs defaults 0 0

riavviate il sistema e godetevi il nuovo Kernel.

[modifica] Ricompilazione Kernel Serie 2.6.xx:

Sicuramente con l'arrivo del nuovo Kernel vi troverete a ricompilare e ricompilare, magari per studiare o per ottimizzare la configurazione. Si presume che i sorgenti del Kernel siano regolarmente installati in /usr/src e collegali al link simbolico linux. Prima cosa fate un backup della vostra /lib/modules/versione-kernel, questa dir viene sovrascritta in fase di installazione dei moduli, e vi assicura dei moduli funzionanti in caso di ripristino

# cd /lib/modules/
# tar cf 2.6.xx.tar 2.6.xx

spostatevi in /usr/scr/linux e preparate l'ambiente

# cd /usr/src/linux
# make mrproper

ora apportate le vostre modifiche usando uno dei tre tool

# make menuconfig
# make xconfig
# make gconfig

make menuconfig che usa ncurses si basa su un men testuale, xconfig e gconfig devono essere avviati da X e usano rispettivamente le lib QT e GTK

# make menuconfig

scorrete il men fino in fondo e con la funzione Load an Alternate Configuration File caricare il file di configurazione salvato in /boot (config-2.6.xx per esempio) eseguite le modifiche e salvate la nuova configurazione usando la funzione Save Configuration to an Alternate File così da non sovrascrivere il config funzionante. Eventualmente per non fare la ricerca del file config invece di usare make mrproper usate make clean che elimina la maggior parte dei files ma non il config. Terminate le modifiche, uscite con < Exit > e salvate la configurazione. Ora create l'immagine del Kernel

# make -j5 bzImage

dopo un certo periodo che dipende ovviamente dalla velocità del vostro sistema vi troverete l'immagine del Kernel pronta in /usr/src/linux/arch/i386/boot/. Procedete con la compilazione e installazione dei moduli con i seguenti comandi

# make -j5 modules
# make modules_install

i moduli saranno reinstallati in /lib/modules/versione-kernel. Siete ancora in /usr/src/linux un ls -a vi mostrerà il contenuto della dir, noterete un file .config e un file System.map questi due file vanno copiati in /boot ma la cosa migliore è rinominarli gestendo una nuova direttiva in LILO

# mv System.map /boot/System.map-2.6.xx-new
# cp .config /boot/config-2.6.xx-new

ora il Kernel

# mv /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.xx-new

ora modificate /etc/lilo.conf, potete prendete come riferimento questo esempio (man lilo per info maggiori)

image = /boot/vmlinuz
root = /dev/sda2
label = Slack_2.6.xx
read-only
image = /boot/vmlinuz-2.6.xx-new
root = /dev/sda2
label = Slack_2.6.xx_New
read-only

volendo potete anche rimuovete i link simbolici che puntano ai vecchi file

# rm /boot/System.map config vmlinuz

e ricreare quelli nuovi che puntano ai nuovi file

# ln -s /boot/System.map-2.6.xx-new /boot/System.map
# ln -s /boot/config-2.6.xx-new /boot/config
# ln -s /boot/vmlinuz-2.6.xx-new /boot/vmlinuz

in questo modo il Kernel appena compilato sarà quello di default perché la direttiva di lilo punta direttamente al link simbolico vmlinuz. Terminato questo impartite il comando lilo per aggiornare la nuova configurazione

# lilo -v

riavviate il sistema e godetevi il nuovo Kernel.

[modifica] Compilazione Kernel Serie 3.x.x

Recuperate i sorgenti del kernel da (http://www.kernel.org/pub/linux/kernel) prelevando il formato tar.bz2 o tar.gz (il formato .bz2, utilizzando una compressione migliore, sarà più piccolo e quindi più veloce da trasferire). Scaricate i sorgenti in /usr/src e cancellate il link simbolico linux:

# cd /usr/src
# rm linux

decomprimete i sorgenti:

# gzip -cd linux-3.X.tar.gz | tar xvf -

oppure

# bzip2 -dc linux-3.X.tar.bz2 | tar xvf -

ricreate il link simbolico:

# ln -s linux-3.x.x linux

preparate l'ambiente:

# cd linux
# make mrproper

Ora potete cominciare la configurazione vera e propria. Gli strumenti a disposizione sono:

# make menuconfig
# make config
# make nconfig
# make xconfig
# make gconfig
# make oldconfig
....

Comunque sia leggere sempre il file README

I primi due si usano direttamente da shell, il più usato è make menuconfig che usa ncurses, più semplice e intuitivo; make xconfig invece deve essere avviato da X quindi in ambiente grafico. Make oldconfig "recicla" il vecchio .config ed è molto comodo in caso di aggiornamento, vi chiederà solo le risposte alle nuove domande di configurazione, che si aggiungono di volta in volta alle release. Procediamo con la configurazione usando make menuconfig

# make menuconfig

Una volta finito lo stesso menuconfig vi suggerisce la creazione del kernel, indi, diamo un bel make!

# make -j5 (utile su una cpu con 3-4 processori reali)

La formula corretta sarebbe il numero delle cpu +1 unità o max +2, eccedere può provocare errori di compilazione. Oggi nelle nuove cpu sono presenti più di un processore e questo snellisce notevolmente il lavoro.

Procedete quindi con la compilazione ed installazione dei moduli

# make modules_install

I moduli saranno installati regolarmente in /lib/modules/versione-kernel. Procediamo con l' istallazione del kernel

# make install

questo install copia direttamente il kernel nella directory /boot e lo verifica con il bootloader Adesso modificate /etc/lilo.conf

image = /boot/vmlinuz
root = /dev/sda1
label = Slack_3.x.x
read-only

Eseguire dal terminale

# lilo -v

Riavviate il sistema e godetevi il vostro nuovo kernel.

[modifica] System.map e Patch:

Una breve puntualizzazione sul System.map, questo file contiene la mappatura delle locazioni di memoria del kernel, se aprite con un editor di testo il file troverete una lista simile a questa (c0100000 A _text), dove la prima parte è l'indirizzo di memoria e la seconda la parola chiave associata. Quando usate il kernel e di conseguenza lo spazio di memoria del kernel, la parola chiave richiamarà l'indirizzo di memoria corrispondente ottenendo così i dati richiesti. Se in /boot avete più System.map, relativi a più Kernel, klogd eseguirà una scansione confrontando la mappatura del kernel fino a quando non troverà quello giusto per il Kernel da bootare. Un metodo molto originale per gestire l'avvio del Kernel con il suo System.map è quello di eliminare il link simbolico /boot/System.map rinominare i due System.map con la relativa versione (es. System.map-2.4.33 e System.map-2.6.17.11) e aggiungere questa riga al vostro /etc/rc.d/rc.local

rm -fr /boot/System.map && ln -s /boot/System.map-$(uname -r) /boot/System.map

in questo modo verrà ricreato ogni volta il link simbolico System.map relativo la Kernel da bootare.
Se dovete applicare file patch (vale sia per il Kernel 2.4.xx che per il 2.6.xx) ricordatevi che vanno installate in ordine crescente di rilascio, dal più piccolo al più grande, le trovate nei formati gzip o bzip2 e si applicano nel seguente modo:

# cp patch-3.x.bz2 /usr/src/linux
# cd /usr/src/linux
# bzip2 -dc patch-3.x.bz2 | patch -p1

per il formato gzip usate

# gzip -cd patch-3.x.gz | patch -p1

seguite la stessa procedura per tutte le patch, controllando l'eventuale file xxx.rej che indica un rifiuto della patch. Altra nota importante riguarda alcune installazioni precedenti alla ricompilazione che vanno reinstallate, vedi Alsa, Nvidia, Lmsensors.

[modifica] Conclusioni:

Sicuramente vi resteranno molti dubbi che potete facilmente risolvere leggendo i man in linea e la documentazione fornita con i sorgenti del Kernel, in aiuto c'è anche la rete, Google vi aiuterà. Questa è la mia esperienza e non vuole essere una guida di riferimento.
Ringrazio Pierluigi (www.slack.z00.it) e i ragazzi di Slacky.it

Autore: Loris

Strumenti personali
Namespace

Varianti