 |
Welcome
3.144.237.31 - Suggested View
1024x768 - Last Update 11/08/2004 |
 |
Compilare i kernel 2.4 (e precedenti)
1) Diventate root
.
2) Create, se non lo avete già fatto prima, un dischetto di avvio che vi
sarà utile nel caso il sistema non fosse più avviabile. Per fare ciò
è necessario conoscere con esattezza la versione attuale del kernel, quindi procedete
così:
- usate
uname -r
per conoscere la versione del kernel in uso
- eseguite
mkbootdisk --device /dev/fd0 2.4.3-20mdk
, sostituendo la vostra
versione a quella di esempio
Tenete conto che questa operazione non è molto utile se state compilando una
nuova versione del kernel affiancandola ad una già presente. In altre parole,
è bene avere almeno un kernel sicuramente funzionante nel caso in cui quello nuovo
impedisca l'avvio del sistema. Un'altra precisazione: i nuovi kernel eccedono quasi
sempre la capacità di un disco floppy e pertanto l'operazione suddetta non
è praticabile. La cosa migliore rimane perciò quella di compilare una nuova
versione del kernel lasciando inalterata quella originale.
3) Spostatevi in /usr/src/linux
in cui dovrebbero trovarsi i sorgenti
del kernel e saltate al punto 4.
Se questa directory non esiste, vuol dire che i sorgenti non sono installati. Fatelo ora
prendendo dai cdrom della vostra distribuzione i file necessari o scaricando da internet una
nuova versione, verificando quali pacchetti è necessario installare.
Eventualmente, per affiancare la nuova versione a quella vecchia usate:
rpm -ivh kernel-source.versione-kernel.rpm
rpm -ivh kernel-doc.versione-kernel.rpm
(è la documentazione
completa, non strettamente necessaria)
Se invece volete fare un aggiornamento, usate rpm -Uvh
che
sostituirà la vecchia versione con la nuova.
Nel caso usiate gli archivi tarball, decomprimeteli in /usr/src/linux
con tar xzf linux-x.x.x.tar.gz
. Se questa directory non fosse presente,
createla con md linux
, meglio ancora se il nome rispecchia la versione del
kernel (es. md linux-2.6.4
).
Fatto ciò, è bene creare un link simbolico che punti alla nuova directory dei
sorgenti (non necessario nel caso l'abbiate chiamata semplicemente linux
)
con ln -s linux-x.x.x linux
.
Ricordate che se avete in /usr/src
due directory contenenti i sorgenti di due
kernel diversi, avrete la possibilità di compilarli, configurali e testarli
indipendentemente uno dall'altro.
4) Se dovete applicare qualche patch, è il momento di
farlo: leggetevi le man pages di patch
per maggiori informazioni (qui invece trovate un esempio di
utilizzo).
Nota: prima di eseguire la patch è molto importante effettuare il backup del
file .config
e poi ripulire l'albero dei sorgenti del kernel cercando di
ripristinare lo stato puro con make mrproper
. Ciò garantisce che non vi
siano file residui che possano eventualmente intralciare la patch o interferire con la
compilazione del kernel. Successivamente è necessario ripristinare
.config
che sarà stato eliminato e avviare la successiva configurazione
del kernel con make oldconfig
.
5) Trovandovi sempre in /usr/src/linux
, è
bene dare un nome specifico al kernel inserendo qualcosa dopo la voce
EXTRAVERSION
, editando il Makefile
; questa operazione è
molto utile nel caso in cui la versione che state compilando è la stessa di quella
in uso. Infatti personalizzandone il nome sarà possibile riconoscere l'una
dall'altra e quindi verificarne il funzionamento senza rischi.
In definitiva, se NON state compilando una nuova versione, inserite qualcosa voi, viceversa
potete lasciare tutto com'è.
P.S. Con i nuovi kernel l'operazione non è piu' necessaria; ad esempio
a partire dalla Mandrake 9.1 se si compila un kernel con stesso numero di versione, viene
aggiunto in automatico il suffisso custom
. Dimenticatevi quindi questo punto e
procedete senza indugi.
6) E' ora di configurare il kernel, potete farlo utilizzando:
- Il Centro di Controllo di KDE andando nella sezione "Sistema" ->
"Linux Kernel Configurator", è molto comodo e semplice da usare,
provatelo.
- Con
make xconfig
o make menuconfig
per avere
un'interfaccia grafica più essenziale.
- Con
make config
che modifica riga per riga, rigorosamente per
masochisti.
Ogni funzionalità può essere impostata in uno dei 3 seguenti modi:
- Y = per compilarla inserendola all'interno del kernel .
- M = per compilarla come modulo, quindi fuori dal kernel, con la
possibilità di abilitarla/disabilitarla in qualsiasi momento.
- N = per escluderla del tutto.
IMPORTANTE In linea di massima, le seguenti regole sono sempre valide ed
è bene rispettarle:
- è sempre bene evitare di appesantire il kernel con funzionalità e
drivers non necessari, al fine di garantirne prestazioni e stabilità. Quando
possibile compilare i compenenti del kernel come moduli.
- se avete o intendete usare un masterizzatore CD IDE, compilate "Supporto per i
lettori CDROM IDE", "Supporto generico SCSI" e
"Emulazione SCSI per dispositivi IDE" come moduli
- se usate schede di rete, compilate i rispettivi driver come moduli
- nel dubbio, lasciate le impostazioni di default.
Infine consultate /usr/src/linux/Documentation/Configure.help
per avere
informazioni su ciascuna possibile impostazione delle voci del kernel. Cosa volete di
più?
7) Eseguite make oldconfig
per evitare che qualche opzione vi sia
sfuggita. In particolare questa operazione è indispensabile se state usando un file
.config
vecchio, perchè potrebbero esserci funzionalità nel nuovo
kernel che altrimenti rimarrebbero escluse. Così facendo, invece, il sistema vi
chiederà cosa fare per ogni nuova opzione disponibile.
8) Ora il file .config
generato rappresenta la vostra nuova
configurazione. Fatene una copia di backup, ad esempio con cp .config
/root/config-x.x.x
.
9) Rullo di tamburi: è arrivato il momento di compilare il kernel, o quasi.
Prima dovete considerare se state compilando la stessa identica versione del kernel
già presente nel vostro sistema; in caso affermativo, prima di procedere
dovete cancellare o meglio ancora rinominare (mv /lib/modules/x.x.x
/lib/modules/x.x.x-OLD
) la directory contenente i vecchi moduli. Se invece compilate
una versione diversa (o avete modificato il nome della versione come spiegato al
punto 5), allora potete lasciare tutto com'è salvo
ricordarvi di rimuovere la vecchia directory dei moduli una volta stabilito che il vecchio
kernel non serve più. Consiglio sempre di aspettare a rimuovere i sorgenti
(/usr/src/linux
), i moduli (/lib/modules/x.x.x
) e i file relativi
al vecchio kernel (a parte i link simbolici ovviamente) in /boot/
, quali ad
esempio System.map, vmlinux, initrd.img
, fino a quando non si è sicuri
che il nuovo kernel compilato funzioni correttamente.
P.S. Anche qui, analogamente al punto 5, potete ignorare il tutto se state usando un
kernel recente; infatti grazie al suffisso custom
aggiunto in automatico,
è impossibile sovrascrivere la nuova versione compilata su quella vecchia (a meno che
non esista già una stessa identica versione custom
).
10) Ci siamo: date make dep clean bzImage
per calcolare le dipendenze,
ripulire l'albero da eventuali compilazioni precedenti e compilare il kernel
(bzImage
è valida solo per i processori Intel e compatibili).
Incrociate le dita e aspettate che le operazioni vengano ultimate; ci può volere un
po' di tempo, a seconda del vostro hardware e delle dimensioni del kernel che state
compilando.
Se non vengono mostrati messaggi di errore, con conseguente interruzione delle operazioni,
andate al prossimo punto.
Diversamente, o avete trovato un bug nel kernel (improbabile) o avete sbagliato qualcosa
nella configurazione.
11) E' ora di compilare e installare i moduli con make modules
modules_install
(ci vorrà molto più tempo che per il kernel). In caso
di errore è molto probabile che ci siano dei problemi di dipendenze dei moduli;
può capitare infatti che qualche impostazione del kernel non sia coerente, ad esempio
se avete dimenticato di attivare un modulo richiesto. Rivedete la configurazione del kernel
aiutandovi con i messaggi di errore mostrati a video.
12) Ora installate il kernel prodotto con make install
stando sempre in
/usr/src/linux/
e saltate al punto 14. Se preferite eseguire
questa operazione manualmente (quella automatica è comunque sicura e molto comoda)
seguite invece le seguenti istruzioni:
copiate il nuovo kernel
cp /usr/src/linux/arch/i386/boot/bzImage /boot/linux-x.x.x
come pure un altro file prodotto dalla compilazione
cp /usr/src/linux/System.map /boot/System.map-x.x.x
Consiglio infine di creare un nuovo file ram disk mediante
mkinitrd /boot/initrd-2.4.19-16mdkcustom.img 2.4.19-16mdkcustom
Il file initrd contiene i driver necessari (in genere relativi all'accesso ai dischi
IDE, SCSI, RAID) che permettono l'avvio del sistema e sarà caricato in memoria
insieme al kernel, che ne sfrutterà i moduli contenuti e specificati nel file
/etc/conf.modules
oltre a quelli eventualmente aggiunti come argomenti sulla
linea di comando di mkinitrd
. Normalmente non è necessario apportare
modifiche a questo file.
Nota: i nomi dei file System.map e initrd.img dovrebbero rispecchiare quanto
più è possibile il numero di versione del kernel a cui si riferiscono (es.
linux-2.4.18 e System.map-2.4.18). Il numero di versione "2.4.19-16mdkcustom"
usato sopra per initrd
deve invece coincidere con quello del kernel compilato e
quindi al nome della directory dei moduli, presente in /lib/modules/
.
Inoltre evitate di cancellare, sovrascrivere o rinominare i file già presenti nella
directory /boot/
, altrimenti non potrete più usare il kernel attuale nel
caso in cui il nuovo non funzionasse.
Bene, ora troverete due link simbolici in /boot
, e cioè
System.map
e initrd.img
che però fanno ancora riferimento
al vecchio kernel; eliminateli (rm System.map initrd.img
) e createne di nuovi
che puntino a quelli appena generati (es. ln -s System.map-2.4.18
System.map
).
13) Ora dovete modificare il file /etc/lilo.conf
per informare il
sistema che avete un nuovo kernel, da caricare all'avvio.
Fatelo aggiungendo le seguenti righe che vi permetteranno di scegliere con quale kernel
lavorare (nulla vi impedisce di mantenerne più versioni contemporaneamente):
image=/boot/linux-x.x.x
label=Nuovo_Kernel
root=/dev/hda1
initrd=/boot/initrd.img
read-only
Dovete fare attenzione più che altro alla terza riga, che specifica la partizione
dove andare a prendere il sistema operativo. Per non sbagliare, potete copiare da un'altra
direttiva che è sicuramente già presente nel lilo.conf
.
Ora eseguite /sbin/lilo -v
per aggiornare il settore di boot; il parametro -v
non è obbligatorio, ma è utile per verificare le operazioni compiute. Se
lilo mostra degli errori, con ogni probabilità avete specificato
un'immagine del kernel o una partizione sbagliata (prima e terza riga nell'esempio).
Attenzione inoltre alla quarta riga: non è necessario inserirla, ma se lo fate
accertatevi che punti al giusto file di ram disk (spesso è presente un link simbolico
/boot/initrd.img
che punta al vero file initrd, potete usarlo se non ne avete
creato uno nuovo come spiegato al punto precedente).
14) Infine potete liberare un po' di spazio su disco
dando make clean
sempre da /usr/src/linux
, per rimuovere i files
generati dalla compilazione.
Questo è tutto; per problemi, commenti, suggerimenti e quant'altro vi rimando al
Guestbook.