Compilazione di un nuovo kernel
Perché qualcuno dovrebbe compilarsi un nuovo kernel? Spesso non è
necessario dato che il kernel inserito in Debian gestisce la
maggior parte delle configurazioni. Inoltre Debian offre parecchi kernel
alternativi, quindi si dovrebbe come prima cosa controllare se fra i
pacchetti con kernel alternativi ce n'è uno che si adatta meglio al proprio
hardware. Comunque può essere utile compilare un nuovo kernel per poter:
gestire hardware particolare o gestire conflitti hardware con kernel
preconfezionati
usare opzioni del kernel che non sono supportate dai kernel preconfezionati
(per esempio il supporto per la memoria alta)
ottimizzare il kernel rimuovendo i driver inutili in modo da velocizzare
l'avvio del sistema
creare un kernel monolitico al posto di uno modulare
usare un kernel aggiornato o di sviluppo
imparare cose nuove sui kernel linux
Gestione dell'immagine del kernel
Non ci si deve impaurire nel provare a compilare il kernel. È
divertente e utile.
Per compilare il kernel con il metodo seguito da Debian sono necessari
alcuni pacchetti: fakeroot,
kernel-package,
kernel-source-&kernelversion; (la versione più
recente al momento della scrittura),
linux-source-2.6
e pochi altri che probabilmente sono già installati (si consulti
/usr/share/doc/kernel-package/README.gz per
l'elenco completo).
Questo metodo crea un .deb dai sorgenti del kernel e, se si hanno dei
moduli non-standard, crea anche un .deb di questi moduli sincronizzato
con il precedente. Questo è il miglior modo di gestire le immagini del
kernel; in /boot vengono inseriti il kernel, il file
System.map e un log con le configurazioni attive durante la compilazione.
Notare che non è obbligatorio compilare il kernel
alla Debian
; ma l'uso del sistema di pacchetti per gestire
il kernel è realmente più sicuro e più semplice. In pratica si possono
anche reperire i sorgenti del kernel direttamente da Linus anziché da
kernel-source-&kernelversion;
linux-source-2.6
e comunque usare il metodo di compilazione con
kernel-package.
Notare che è possibile trovare la documentazione completa sull'uso di
kernel-package in
/usr/share/doc/kernel-package. Questa sezione
contiene solo un breve manuale introduttivo.
D'ora in avanti si suppone che si abbia il controllo completo della
macchina e che i sorgenti del kernel siano da qualche parte all'interno
della propria home directory
Ci sono molti altri posti in cui è possibile estrarre i sorgenti del
kernel e compilare un kernel personalizzato, ma è molto più semplice
se questa operazione non richiede dei permessi speciali.
. Si suppone anche che la versione del kernel sia
&kernelversion;. Assicurarsi di trovarsi nella directory in cui si vuole
scompattare i sorgenti del kernel, estrarli usando
tar xjf
/usr/src/kernel-source-&kernelversion;.tar.bz2
tar xjf
/usr/src/linux-source-&kernelversion;.tar.bz2
e cambiare la directory corrente in
kernel-source-&kernelversion;
linux-source-&kernelversion;
che è stata appena creata.
Adesso si può configurare il kernel. Eseguire make
xconfig se X11 è installato, configurato e in esecuzione;
altrimenti eseguire make menuconfig (è necessario
che sia installato il pacchetto libncurses5-dev).
Prendersi tutto il tempo necessario per leggere l'aiuto in linea e
scegliere con attenzione; in caso di dubbi di solito è consigliabile
includere i driver dei dispositivi (il software che gestisce le
periferiche hardware come le schede Ethernet, i controller SCSI e così
via) se non si è sicuri. Attenzione: se non si capisce il significato
delle altre opzioni non legate a un hardware specifico si dovrebbero
lasciare al valore predefinito. Non ci si deve dimenticare di selezionare
Kernel module loader
in Loadable module
support
(normalmente non è selezionato), altrimenti il proprio
sistema Debian rischia di avere dei seri problemi.
Ripulire i sorgenti e ripristinare i parametri di
kernel-package usando make-kpkg
clean.
Adesso compilare il kernel con: fakeroot make-kpkg
--revision=custom.1.0 kernel_image. Il numero di versione
1.0
può essere cambiato secondo le necessità;
questo è semplicemente il numero di versione che si può usare per
tener traccia delle compilazioni del kernel. Allo stesso modo si può
inserire qualsiasi parola al posto di custom
(p.e. il
nome dell'host). La compilazione del kernel richiede un po' di tempo,
in base alla potenza della macchina.
Se si ha bisogno del supporto PCMCIA è necessario installare il
pacchetto pcmcia-source. Estrarre il file tar
compresso con gzip nella directory /usr/src (è
importante che i moduli si trovino esattamente dove il sistema si
aspetta che siano, ovvero in /usr/src/modules).
Poi, da root, eseguire make-kpkg modules_image.
Finita la compilazione è possibile installare il proprio kernel
personalizzato come qualsiasi altro pacchetto. Da root eseguire
dpkg -i ../kernel-image-&kernelversion;-sottoarchitettura_custom.1.0_&architecture;.deb.
La parte sottoarchitettura è opzionale e
indica la sottoarchitettura,
per esempio i586
,
in base alle opzioni del kernel sono state attivate.
dpkg -i kernel-image... installa il kernel più
alcuni file di supporto. Per esempio sono installati i file
System.map (utile per il debug del kernel) e
/boot/config-&kernelversion; che contiene la
configurazione. Il nuovo pacchetto
kernel-image-&kernelversion; è anche in grado
di riconoscere, in base alla piattaforma, il bootloader ed eseguire
un aggiornamento in modo da poter riavviare la macchina senza dover
rieseguire il bootloader. Se si è creato anche un pacchetto con i
moduli, per esempio se si usa PCMCIA, è necessario installare anche
questo pacchetto.
Adesso si deve riavviare il sistema: leggere attentamente tutti gli
avvertimenti che potrebbero apparire durante il passo precedente e
poi eseguire shutdown -r now.
Per ulteriori informazioni sui kernel Debian e sulla
compilazione del kernel si consulti il
Debian Linux Kernel Handbook.
Per ulteriori informazioni su kernel-package
si consulti l'eccellente documentazione in
/usr/share/doc/kernel-package.