Compilazione Kernel · 9 min read · Nov 27, 2025
Come Compilare Un Kernel - Il Metodo Debian

Ogni distribuzione ha alcuni strumenti specifici per costruire un kernel personalizzato dai sorgenti. Questo articolo riguarda la compilazione di un kernel su un sistema Debian (Etch). Descrive come costruire un kernel personalizzato utilizzando gli ultimi sorgenti del kernel non modificati da www.kernel.org (kernel vanilla) in modo da essere indipendenti dai kernel forniti dalla tua distribuzione. Mostra anche come applicare patch ai sorgenti del kernel se hai bisogno di funzionalità che non sono presenti.
Non fornisco alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
Descriverò due modi per compilare un nuovo kernel. Utilizzando il primo metodo, otterrai un pacchetto kernel.deb che può essere installato sul sistema e che puoi condividere con altri e installare su altri sistemi Debian Etch.
Il secondo metodo è compilare un kernel nel modo “tradizionale”. Questo modo funziona su qualsiasi distribuzione Linux, ma ovviamente, non otterrai un pacchetto kernel.deb.
2 Costruire Un Pacchetto Kernel .deb
Questo capitolo mostra come costruire un kernel e ottenere un pacchetto .deb che puoi installare e condividere con altri.
2.1 Installare i Pacchetti Richiesti per la Compilazione del Kernel
Prima aggiorniamo il nostro database dei pacchetti:
apt-get updatePoi installiamo tutti i pacchetti necessari in questo modo:
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential2.2 Scaricare i Sorgenti del Kernel
Successivamente scarichiamo il nostro kernel desiderato in /usr/src. Vai su www.kernel.org e seleziona il kernel che vuoi installare, ad esempio linux-2.6.21.3.tar.bz2 (puoi trovare tutti i kernel 2.6 qui: http://www.kernel.org/pub/linux/kernel/v2.6/). Poi puoi scaricarlo in /usr/src in questo modo:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2Poi scompattiamo i sorgenti del kernel e creiamo un symlink linux alla directory dei sorgenti del kernel:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux2.3 Applicare Patch ai Sorgenti del Kernel (Opzionale)
A volte hai bisogno di driver per hardware che non è supportato dal nuovo kernel per impostazione predefinita, o hai bisogno di supporto per tecniche di virtualizzazione o qualche altra tecnologia all’avanguardia che non è ancora arrivata al kernel. In tutti questi casi devi applicare patch ai sorgenti del kernel (a condizione che sia disponibile una patch…).
Ora supponiamo che tu abbia scaricato la patch necessaria (la chiamo patch.bz2 in questo esempio) in /usr/src. Questo è come applicarla ai tuoi sorgenti del kernel (devi essere ancora nella directory /usr/src/linux):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1Il primo comando è solo un test, non fa nulla ai tuoi sorgenti. Se non mostra errori, puoi eseguire il secondo comando che applica effettivamente la patch. Non farlo se il primo comando mostra errori!
Puoi anche applicare prepatch ai sorgenti del tuo kernel. Ad esempio, se hai bisogno di una funzionalità che è disponibile solo nel kernel 2.6.22-rc3, ma i sorgenti completi non sono stati ancora rilasciati per questo kernel. Invece, è disponibile una patch-2.6.22-rc3.bz2. Puoi applicare quella patch ai sorgenti del kernel 2.6.21, ma non ai kernel 2.6.21.1 o 2.6.21.2, ecc. Questo è spiegato su http://kernel.org/patchtypes/pre.html:
I prepatch sono l’equivalente delle versioni alpha per Linux; vivono nelle directory di testing negli archivi. Dovrebbero essere applicati utilizzando l’utility patch(1) al codice sorgente della precedente versione completa con un numero di versione a 3 parti (ad esempio, il prepatch 2.6.12-rc4 dovrebbe essere applicato ai sorgenti del kernel 2.6.11, non, ad esempio, 2.6.11.10.)
Quindi, se vuoi compilare un kernel 2.6.22-rc3, devi scaricare i sorgenti del kernel 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) nel passo 3 invece del kernel 2.6.21.3!
Questo è come applicare la patch 2.6.22-rc3 al kernel 2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p12.4 Configurare il Kernel
È una buona idea utilizzare la configurazione del tuo attuale kernel funzionante come base per il tuo nuovo kernel. Pertanto, copiamo la configurazione esistente in /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.configPoi eseguiamo
make menuconfigche apre il menu di configurazione del kernel. Vai su Carica un File di Configurazione Alternativo e scegli .config (che contiene la configurazione del tuo attuale kernel funzionante) come file di configurazione:


Poi sfoglia il menu di configurazione del kernel e fai le tue scelte. Quando hai finito e selezioni Esci, rispondi alla seguente domanda (Vuoi salvare la tua nuova configurazione del kernel?) con Sì:

2.5 Costruire il Kernel
Per costruire il kernel, esegui questi due comandi:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headersDopo –append-to-version= puoi scrivere qualsiasi stringa che ti aiuti a identificare il kernel, ma deve iniziare con un meno (-) e non deve contenere spazi bianchi.
Ora sii paziente, la compilazione del kernel può richiedere alcune ore, a seconda della tua configurazione del kernel e della velocità del tuo processore.
2.6 Installare il Nuovo Kernel
Dopo la riuscita costruzione del kernel, puoi trovare due pacchetti .deb nella directory /usr/src.
cd /usr/src
ls -lNel mio sistema di test si chiamavano linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (che contiene il kernel effettivo) e linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (che contiene i file necessari se vuoi compilare ulteriori moduli del kernel in seguito). Li installo in questo modo:
dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb(Puoi anche trasferire i due file .deb su altri sistemi Debian Etch e installarli lì esattamente nello stesso modo, il che significa che non devi compilare di nuovo il kernel lì.)
Ecco fatto. Il file di configurazione del bootloader GRUB /boot/grub/menu.lst è stato modificato automaticamente, e un ramdisk per il nuovo kernel è stato creato in /boot.
Ora riavvia il sistema:
shutdown -r nowAl prompt di avvio, seleziona il tuo nuovo kernel (dovrebbe essere selezionato per impostazione predefinita):

Se tutto va bene, dovrebbe avviarsi con il nuovo kernel. Puoi controllare se sta realmente utilizzando il tuo nuovo kernel eseguendo
uname -rQuesto dovrebbe visualizzare qualcosa come
2.6.21.3-customSe il sistema non si avvia, riavvialo e seleziona il tuo vecchio kernel al prompt di avvio. Puoi ora riprovare a compilare un kernel funzionante. Non dimenticare di rimuovere la/le riga/e del kernel non funzionante da /boot/grub/menu.lst.
3 Costruire Un Kernel Nel Modo Tradizionale
Questo capitolo descrive un approccio diverso che può essere utilizzato su qualsiasi sistema Linux (a parte dettagli come la creazione di un ramdisk o l’aggiornamento del bootloader). Ovviamente non otterrai un pacchetto kernel.deb.
3.1 Installare i Pacchetti Richiesti per la Compilazione del Kernel
Prima aggiorniamo il nostro database dei pacchetti:
apt-get updatePoi installiamo tutti i pacchetti necessari in questo modo:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential3.2 Scaricare i Sorgenti del Kernel
Successivamente, scarichiamo il nostro kernel desiderato in /usr/src. Vai su www.kernel.org e seleziona il kernel che vuoi installare, ad esempio linux-2.6.21.3.tar.bz2 (puoi trovare tutti i kernel 2.6 qui: http://www.kernel.org/pub/linux/kernel/v2.6/). Poi puoi scaricarlo in /usr/src in questo modo:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2Poi scompattiamo i sorgenti del kernel e creiamo un symlink linux alla directory dei sorgenti del kernel:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux3.3 Applicare Patch ai Sorgenti del Kernel (Opzionale)
A volte hai bisogno di driver per hardware che non è supportato dal nuovo kernel per impostazione predefinita, o hai bisogno di supporto per tecniche di virtualizzazione o qualche altra tecnologia all’avanguardia che non è ancora arrivata al kernel. In tutti questi casi devi applicare patch ai sorgenti del kernel (a condizione che sia disponibile una patch…).
Ora supponiamo che tu abbia scaricato la patch necessaria (la chiamo patch.bz2 in questo esempio) in /usr/src. Questo è come applicarla ai tuoi sorgenti del kernel (devi essere ancora nella directory /usr/src/linux):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1Il primo comando è solo un test, non fa nulla ai tuoi sorgenti. Se non mostra errori, puoi eseguire il secondo comando che applica effettivamente la patch. Non farlo se il primo comando mostra errori!
Puoi anche applicare prepatch ai sorgenti del tuo kernel. Ad esempio, se hai bisogno di una funzionalità che è disponibile solo nel kernel 2.6.22-rc3, ma i sorgenti completi non sono stati ancora rilasciati per questo kernel. Invece, è disponibile una patch-2.6.22-rc3.bz2. Puoi applicare quella patch ai sorgenti del kernel 2.6.21, ma non ai kernel 2.6.21.1 o 2.6.21.2, ecc. Questo è spiegato su http://kernel.org/patchtypes/pre.html:
I prepatch sono l’equivalente delle versioni alpha per Linux; vivono nelle directory di testing negli archivi. Dovrebbero essere applicati utilizzando l’utility patch(1) al codice sorgente della precedente versione completa con un numero di versione a 3 parti (ad esempio, il prepatch 2.6.12-rc4 dovrebbe essere applicato ai sorgenti del kernel 2.6.11, non, ad esempio, 2.6.11.10.)
Quindi, se vuoi compilare un kernel 2.6.22-rc3, devi scaricare i sorgenti del kernel 2.6.21 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) nel passo 3 invece del kernel 2.6.21.3!
Questo è come applicare la patch 2.6.22-rc3 al kernel 2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p13.4 Configurare il Kernel
È una buona idea utilizzare la configurazione del tuo attuale kernel funzionante come base per il tuo nuovo kernel. Pertanto, copiamo la configurazione esistente in /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.configPoi eseguiamo
make menuconfigche apre il menu di configurazione del kernel. Vai su Carica un File di Configurazione Alternativo e scegli .config (che contiene la configurazione del tuo attuale kernel funzionante) come file di configurazione:


Poi sfoglia il menu di configurazione del kernel e fai le tue scelte. Quando hai finito e selezioni Esci, rispondi alla seguente domanda (Vuoi salvare la tua nuova configurazione del kernel?) con Sì:

3.5 Costruire e Installare il Kernel
Per costruire il kernel, esegui questi comandi:
make all
make modules_install
make installOra sii paziente, la compilazione del kernel può richiedere alcune ore, a seconda della tua configurazione del kernel e della velocità del tuo processore.
3.6 Passi Post-Installazione
Il nuovo kernel è ora installato, ma abbiamo ancora bisogno di un ramdisk per il nostro nuovo kernel (altrimenti il sistema probabilmente non si avvierà!), e dobbiamo informare il bootloader GRUB del nostro nuovo kernel.
Prima, facciamo questo:
depmod 2.6.21.3
apt-get install yairdPoi creiamo un ramdisk con il seguente comando:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3La configurazione di GRUB è molto semplice su Debian Etch. Tutto ciò che dobbiamo fare è eseguire
update-grubQuesto rileverà il nuovo kernel e il ramdisk e aggiornerà /boot/grub/menu.lst per noi.
Ora riavvia il sistema:
shutdown -r nowAl prompt di avvio, seleziona il tuo nuovo kernel (dovrebbe essere selezionato per impostazione predefinita). Se tutto va bene, dovrebbe avviarsi con il nuovo kernel. Puoi controllare se sta realmente utilizzando il tuo nuovo kernel eseguendo
uname -rQuesto dovrebbe visualizzare qualcosa come
2.6.21.3Se il sistema non si avvia, riavvialo e seleziona il tuo vecchio kernel al prompt di avvio. Puoi ora riprovare a compilare un kernel funzionante. Non dimenticare di rimuovere la/le riga/e del kernel non funzionante da /boot/grub/menu.lst.
4 Link
- Debian: http://www.debian.org
- The Linux Kernel Archives: http://www.kernel.org
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.