In questa pagina
- 1 Nota preliminare
- 2 Creazione di un pacchetto .deb del kernel
- 2.1 Installare i pacchetti necessari per la compilazione del kernel
- 2.2 Scarica le sorgenti del kernel
- 2.3 Applicare le patch alle sorgenti del kernel (facoltativo)
- 2.4 Configurare il kernel
- 2.5 Crea il kernel
- 2.6 Installare il nuovo kernel
- 3.1 Installare i pacchetti necessari per la compilazione del kernel
- 3.2 Scarica le sorgenti del kernel
- 3.3 Applicare le patch alle sorgenti del kernel (facoltativo)
- 3.4 Configurare il kernel
- 3.5 Crea e installa il kernel
- 3.6 Passaggi successivi all'installazione
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 usando gli ultimi sorgenti del kernel non modificati da www.kernel.org (kernel vaniglia) in modo da essere indipendenti dai kernel forniti dalla distribuzione. Mostra anche come applicare patch ai sorgenti del kernel se hai bisogno di funzionalità che non sono presenti.
Non garantisco che questo funzionerà per te!
1 Nota preliminare
Descriverò due modi per compilare un nuovo kernel. Usando il primo metodo, ti ritroverai con un pacchetto .deb del kernel che può essere installato sul sistema e che puoi condividere con altri e installare su altri sistemi Debian Etch.
Il secondo metodo consiste nel compilare un kernel nel modo "tradizionale". In questo modo funziona su qualsiasi distribuzione Linux, ma ovviamente non ti ritroverai con un pacchetto .deb del kernel.
2 Creazione di un pacchetto .deb del kernel
Questo capitolo mostra come creare un kernel e ottenere un pacchetto .deb che puoi installare e condividere con altri.
2.1 Installazione dei pacchetti necessari per la compilazione del kernel
Per prima cosa aggiorniamo il nostro database dei pacchetti:
apt-get update
Quindi installiamo tutti i pacchetti necessari come questo:
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential
2.2 Scarica le sorgenti del kernel
Quindi scarichiamo il kernel desiderato in /usr/src. Vai su www.kernel.org e seleziona il kernel che vuoi installare, ad es. linux-2.6.21.3.tar.bz2 (puoi trovare tutti i kernel 2.6 qui:http://www.kernel.org/pub/linux/kernel/v2.6/). Quindi puoi scaricarlo su /usr/src in questo modo:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
Quindi decomprimiamo i sorgenti del kernel e creiamo un collegamento simbolico 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/linux
2.3 Applicare le patch alle sorgenti del kernel (opzionale)
A volte sono necessari driver per l'hardware che non è supportato dal nuovo kernel per impostazione predefinita, oppure è necessario il supporto per le tecniche di virtualizzazione o qualche altra tecnologia all'avanguardia che non è ancora arrivata al kernel. In tutti questi casi devi patchare i sorgenti del kernel (ammesso che ci sia una patch disponibile...).
Ora supponiamo che tu abbia scaricato la patch necessaria (in questo esempio la chiamo patch.bz2) in /usr/src. Ecco come lo applichi ai sorgenti del tuo 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 -p1
Il primo comando è solo un test, non fa nulla alle tue fonti. 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 le prepatch del kernel ai sorgenti del tuo kernel. Ad esempio, se hai bisogno di una funzionalità disponibile solo nel kernel 2.6.22-rc3, ma i sorgenti completi non sono ancora stati 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 al kernel 2.6.21.1 o 2.6.21.2, ecc. Questo è spiegato su http://kernel.org/patchtypes/pre.html:
Le prepatch sono l'equivalente delle versioni alpha per Linux; vivono nelle directory di test negli archivi. Dovrebbero essere applicati utilizzando l'utilità patch(1) al codice sorgente della versione completa precedente con un numero di versione in 3 parti (ad esempio, la prepatch 2.6.12-rc4 dovrebbe essere applicata 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 passaggio 3 invece del kernel 2.6.21.3!
Ecco 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 -p1
2.4 Configura il kernel
È una buona idea usare la configurazione del tuo attuale kernel funzionante come base per il tuo nuovo kernel. Quindi copiamo la configurazione esistente in /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
Quindi corriamo
make menuconfig
che fa apparire il menu di configurazione del kernel. Vai a Carica un file di configurazione alternativo e scegli .config (che contiene la configurazione del tuo attuale kernel funzionante) come file di configurazione:
Quindi sfoglia il menu di configurazione del kernel e fai le tue scelte. Quando hai finito e seleziona Esci, rispondi alla seguente domanda (Vuoi salvare la tua nuova configurazione del kernel?) con Sì:
2.5 Crea il kernel
Per compilare il kernel, esegui questi due comandi:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
Dopo --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 configurazione del tuo kernel e della velocità del tuo processore.
2.6 Installare il nuovo kernel
Dopo la corretta compilazione del kernel, puoi trovare due pacchetti .deb nella directory /usr/src.
cd /usr/src
ls -l
Sul mio sistema di test erano chiamati linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (che contiene il kernel vero e proprio) e linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb (che contiene i file necessari se si desidera compilare moduli del kernel aggiuntivi 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
(Ora puoi anche trasferire i due file .deb su altri sistemi Debian Etch e installarli lì esattamente allo stesso modo, il che significa che non devi compilare nuovamente il kernel.)
Questo è tutto. Il file di configurazione del bootloader di GRUB /boot/grub/menu.lst è stato modificato automaticamente ed è stato creato un ramdisk per il nuovo kernel in /boot.
Ora riavvia il sistema:
shutdown -r now
Al prompt di avvio, seleziona il tuo nuovo kernel (dovrebbe essere selezionato per impostazione predefinita):
Se tutto va bene, dovrebbe venire fuori il nuovo kernel. Puoi verificare se sta davvero usando il tuo nuovo kernel eseguendo
uname -r
Questo dovrebbe visualizzare qualcosa come
2.6.21.3-custom
Se il sistema non si avvia, riavvialo e seleziona il tuo vecchio kernel al prompt di avvio. Ora puoi riprovare a compilare un kernel funzionante. Non dimenticare di rimuovere le stanze 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 ti ritroverai con un pacchetto .deb del kernel.
3.1 Installazione dei pacchetti necessari per la compilazione del kernel
Per prima cosa aggiorniamo il nostro database dei pacchetti:
apt-get update
Quindi installiamo tutti i pacchetti necessari come questo:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
3.2 Scarica le sorgenti del kernel
Successivamente, scarichiamo il kernel desiderato in /usr/src. Vai su www.kernel.org e seleziona il kernel che vuoi installare, ad es. linux-2.6.21.3.tar.bz2 (puoi trovare tutti i kernel 2.6 qui:http://www.kernel.org/pub/linux/kernel/v2.6/). Quindi puoi scaricarlo su /usr/src in questo modo:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2
Quindi decomprimiamo i sorgenti del kernel e creiamo un collegamento simbolico 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/linux
3.3 Applicare le patch alle sorgenti del kernel (opzionale)
A volte sono necessari driver per l'hardware che non è supportato dal nuovo kernel per impostazione predefinita, oppure è necessario il supporto per le tecniche di virtualizzazione o qualche altra tecnologia all'avanguardia che non è ancora arrivata al kernel. In tutti questi casi devi patchare i sorgenti del kernel (ammesso che ci sia una patch disponibile...).
Ora supponiamo che tu abbia scaricato la patch necessaria (in questo esempio la chiamo patch.bz2) in /usr/src. Ecco come lo applichi ai sorgenti del tuo 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 -p1
Il primo comando è solo un test, non fa nulla alle tue fonti. 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 le prepatch del kernel ai sorgenti del tuo kernel. Ad esempio, se hai bisogno di una funzionalità disponibile solo nel kernel 2.6.22-rc3, ma i sorgenti completi non sono ancora stati 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 al kernel 2.6.21.1 o 2.6.21.2, ecc. Questo è spiegato su http://kernel.org/patchtypes/pre.html:
Le prepatch sono l'equivalente delle versioni alpha per Linux; vivono nelle directory di test negli archivi. Dovrebbero essere applicati utilizzando l'utilità patch(1) al codice sorgente della versione completa precedente con un numero di versione in 3 parti (ad esempio, la prepatch 2.6.12-rc4 dovrebbe essere applicata 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 passaggio 3 invece del kernel 2.6.21.3!
Ecco 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 -p1
3.4 Configura il kernel
È una buona idea usare la configurazione del tuo attuale kernel funzionante come base per il tuo nuovo kernel. Quindi copiamo la configurazione esistente in /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
Quindi corriamo
make menuconfig
che fa apparire il menu di configurazione del kernel. Vai a Carica un file di configurazione alternativo e scegli .config (che contiene la configurazione del tuo attuale kernel funzionante) come file di configurazione:
Quindi sfoglia il menu di configurazione del kernel e fai le tue scelte. Quando hai finito e seleziona Esci, rispondi alla seguente domanda (Vuoi salvare la tua nuova configurazione del kernel?) con Sì:
3.5 Crea e installa il kernel
Per compilare il kernel, esegui questi comandi:
make all
make modules_install
make install
Ora sii paziente, la compilazione del kernel può richiedere alcune ore, a seconda della configurazione del tuo kernel e della velocità del tuo processore.
3.6 Passaggi successivi all'installazione
Il nuovo kernel è ora installato, ma abbiamo ancora bisogno di un ramdisk per il nostro nuovo kernel (altrimenti molto probabilmente il sistema non si avvierà!) e dobbiamo informare il bootloader GRUB del nostro nuovo kernel.
Per prima cosa, facciamo questo:
depmod 2.6.21.3
apt-get install yaird
Quindi creiamo un ramdisk con il seguente comando:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3
La configurazione di GRUB è molto semplice su Debian Etch. Non ci resta che correre
update-grub
Questo rileverà il nuovo kernel e ramdisk e aggiornerà /boot/grub/menu.lst per noi.
Ora riavvia il sistema:
shutdown -r now
Al prompt di avvio, seleziona il tuo nuovo kernel (dovrebbe essere selezionato per impostazione predefinita). Se tutto va bene, dovrebbe venire fuori il nuovo kernel. Puoi verificare se sta davvero usando il tuo nuovo kernel eseguendo
uname -r
Questo dovrebbe visualizzare qualcosa come
2.6.21.3
Se il sistema non si avvia, riavvialo e seleziona il vecchio kernel al prompt di avvio. Ora puoi provare di nuovo a compilare un kernel funzionante. Non dimenticare di rimuovere le stanze del kernel non funzionante da /boot/grub/menu.lst.
4 link
- Debian:http://www.debian.org
- Gli archivi del kernel di Linux:http://www.kernel.org