CONFIGURAZIONI PC E RETI
ovvero... come abbiamo fatto dalla A alla Z.
 
HOME DOCUMENTI PROGETTI RISORSE DOMANDE ARTICOLI

 RICOMPILAZIONE KERNEL
 ultimo aggiornamento: 26 febbraio 2002 ore 15.00
 
 
PROBLEMATICA
configurazione e ricompilazione del kernel.
 
COSA SONO I SORGENTI DEL KERNEL
I sorgenti del kernel sono l'insieme dei files, scritti nel linguaggio c, che permettono di creare un kernel, ossia il file principale per un sistema Linux. I sorgenti del kernel non devono, quindi, essere confusi con il kernel che si sta utilizzando su una macchina Linux.
Per fare un'analogia culinaria, i sorgenti del kernel sono gli ingredienti e la ricetta per una torta, il kernel è la torta!
Configurare il kernel significa "scegliere e modificare la ricetta" a seconda di cio' che ci piace: possiamo scegliere di fare la torta con le mele o con le noci, metterci la marmellata o il cioccolato.
Compilare il kernel significa "eseguire la ricetta", ossia mescolare gli ingredienti e mettere l'impasto nel forno, in modo da ottenere la torta.

 
DOVE TROVARE I SORGENTI DEL KERNEL
Il kernel puo' essere trovato:
a) nei CD relativi alla propria distribuzione;
b) sul sito (e ftp) relativo alla propria distribuzione;
c) sul sito (e ftp) www.kernel.org.

a) le distribuzioni, se complete, contengono i sorgenti del kernel (relativi al kernel di default che viene installato su PC) come pacchetto installabile. Alcune distribuzioni installano i sorgenti anche nell'installazione standard, altre lasciano la scelta all'utente. Se installati, di solito i sorgenti si trovano nella directory /usr/src/linux.

 
FONTE PRINCIPALE DEL DOCUMENTO
Le informazioni seguenti sono state tratte leggendo il manuale Reference Guide di RedHat 7. Il manuale è reperibile su www.redhat.com.
Attenzione: non è la traduzione del documento, è solo una nostra descrizione di come si possa ricompilare il kernel dopo aver letto la Reference Guide.

 
COMPILATORE DA UTILIZZARE IN VECCHIE DISTRIBUZIONI
In alcune vecchie distribuzioni per ricompilare il kernel c'è bisogno di kgcc (compilatore C). La versione RedHat 7 lo contiene e lo installa subito. Chi non lo avesse, dovrebbe installarlo. Bisogna poi eseguire l'istruzione

export CC=kgcc

in modo che il make usi tale compilatore. Io eseguivo questa istruzione dopo aver eseguito make mrproper.

 
FASI
1) entrata in directory di ricompilazione;
2) creazione disco di boot di emergenza;
3) inizializzazione dell'albero dei sorgenti;
4) utilizzo di kgcc;
5) configurazione del kernel;
6) indicazione della EXTRAVERSION;
7) creazione di bzImage;
8) creazione dei moduli;
9) installazione dei moduli;
10) copia di bzImage in directory /boot;
11) creazione di una immagine initrd;
12) modifica di LILO;
13) attivazione di LILO con le modifiche;
14) boot di Linux con la nuova configurazione.

 
FASE 1: ENTRATA IN DIRECTORY DI RICOMPILAZIONE
Bisogna eseguire

cd /usr/src/local

per entrare nella directory dove risiedono i file necessari per la ricompilazione.

 
FASE 2: CREAZIONE DISCO DI BOOT DI EMERGENZA
Se non è stato fatto in fase di installazione, è necessario creare un dischetto di boot di emergenza. L'istruzione per crearlo è simile alla seguente:

mkbootdisk --device /dev/fd0 2.2.16

dove /dev/fd0 identifica il lettore di dischetti e al posto di 2.2.16 è necessario mettere la versione del kernel installata sul proprio pc. Per sapere la versiona installata di Linux, digitare
uname -r
Dopo la creazione del disco di boot, è necessario provarlo (ossia, riavviare la macchina con il dischetto inserito!!!). Se linux parte, eseguire il reboot senza dischetto e tornare nella directory /usr/src/local.

 
FASE 3: INIZIALIZZAZIONE DELL'ALBERO DEI SORGENTI
Si puo' reinizializzare l'installazione in modo da partire da una configurazione conosciuta (salvata in precedenza con make oldconfig), che in generale è quella corrispondente all'installazione iniziale. Per reinizializzare occorre eseguire il comando

make mrproper

 
FASE 4: UTILIZZO DI kgcc
Affinchè venga utilizzato il compilatore kgcc, è necessario eseguire il comando

export CC=kgcc

(questa indicazione non è segnalata sul reference Guide di RedHat 7). Come prima indicato, RedHat 7 installa kgcc. Se kgcc non è presente nel sistema, occorre installarlo.

 
FASE 5: CONFIGURAZIONE DEL KERNEL
Attraverso il comando

make menuconfig

è possibile configurare il kernel. In alternativa si puo' usare make xconfig in ambiente XWindow, o make config. Si dovrà abilitare con Y (Yes) o M (modulo) i moduli necessari alla configurazione voluta. Alla fine si dovrà salvare la configurazione.

 
FASE 6: INDICAZIONE DELLA EXTRAVERSION
E' necessario indicare una EXTRAVESION univoca per la versione del kernel compilata. L'extraversion è accodata alla versione del kernel. Ad esempio, se il mio kernel ha version=2.2.16 e extraversion=-ric01, la versione del kernel ricompilata sarà identificata da 2.2.16-ric01.
Per modificare l'extraversion, occorre editare nel file Makefile (in /usr/src/local) la riga

EXTRAVERSION=-ric01

(dove -ric01 è un esempio: immettere qualsiasi valore voluto di extraversion).

 
FASE 7: CREAZIONE DI bzImage
La compilazione del kernel avviene attraverso i seguenti comandi (da eseguire nell'ordine indicato):

make dep
make clean
make bzImage

 
FASE 8: CREAZIONE DEI MODULI
Occorre ricreare i moduli con la configurazione indicata in make menuconfig (o in make xconfig, make config). Per far questo, occorre eseguire il comando

make modules

 
FASE 9: INSTALLAZIONE DEI MODULI
I nuovi moduli vengono installati con il comando

make modules_install

Nel nostro esempio, i moduli vengono installati nella directory /lib/modules/2.2.16-ric01, indicata in nel file Makefile.

 
FASE 10: COPIA DI bzImage IN DIRECTORY /boot
Occorre copiare nella directory di /boot e rinominare il file bzImage, immagine del kernel, che è stato creato dal comando make bzImage nella directory /usr/src/linux/arch/i386/boot/. Attraverso il comando

cp -p /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.16-ric01

si copia tale file nella directory di boot e lo si rinomina come vmlinuz-2.2.16-ric01. Tale file dovrà essere indicato nel file /etc/lilo.conf come indicato nella fase modifica di LILO (di seguito in questo documento).

 
FASE 11: CREAZIONE DI UNA IMMAGINE initrd
Solo se si ha un adattatore SCSI (o, come indicato da Crazy Rubens, dei controller che pur non essendo SCSI si spacciano per tali come, ad esempio, i ctrl ata100 e raid): se non si hanno adattatori SCSI, saltare questa fase!!!
Se si hanno adattatori SCSI, occorre creare un'immagine initrd. Le precondizioni indicate da RedHat per la creazione di initird sono le seguenti:
a) deve essere disponibile la loopback block device;
b) nel file /etc/conf.modules (o modules.conf) deve essere presente una riga del tipo alias scsi_hostadapter BusLogic per l'adattaore SCSI.
Per creare una nuova immagine initrd occorre eseguire il comando

/sbin/mkinitrd /boot/initrd-2.2.16-ric01 2.2.16-ric01

dove 2.2.16-ric01 è sempre indicato come esempio, come lo è il nome del file newinird-image! La nuova immagine initrd sarà contenuta nel file /boot/initrd-2.2.16-ric01 Attenzione: mentre si puo' indicare qualsiasi nome per il file immagine (invece di /boot/initrd-2.2.16-ric01, potevo mettere /boot/pongo), il parametro relativo alla versione e extraversion del kernel deve corrispondere a quello indicate nei passi precedenti, in quanto deve essere presente, nel nostro caso, la dirctory /lib/modules/2.2.16-ric01.
Il file creato dovrà poi essere indicato nel file /etc/lilo.conf, nella parte relativa alla configurazione da lanciare per il suo utilizzo. Vedere la fase modifica di LILO (di seguito in questo documento) per ulteriori spiegazioni.

 
FASE 12: MODIFICA DI LILO
Per eseguire il boot di Linux con la configurazione creata, occorre modificare il file /etc/lilo.conf, indicando i nuovi files creati in una nuova sezione. Chiamando come LinuxRic01 la nuova sezione, si dovranno aggiungere le linee indicate come parte da aggiungere a /etc/lilo.conf (le altre linee di seguito riportate variano a seconda della configurazione precedente, e quindi sono indicate solo a scopo di esempio) :

# modifiche /etc/lilo.conf

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
linear
default=linux

image=/boot/vmlinuz-2.2.16-12
label=linux
initrd=/boot/initrd-2.2.16-12.img
read-only
root=/dev/hda8

# da qui inizia la parte da aggiungere
image=/boot/vmlinuz-2.2.16-ric01 # nome file come indicato in fase 'copia di bzImage in directory /boot'
label=LinuxRic01 # nuova label indicata da LILO all'avvio del PC
initrd=/boot/initrd-2.2.16-ric01 # ATTENZIONE: aggiungere questa riga solo se è stata creata la nuova immagine initrd!
read-only
root=/dev/hda8 # come già indicato nella parte precedente (label 'linux')

# qui finisce la parte da aggiungere

other=/dev/hda1
label=dos

 
FASE 13: ATTIVAZIONE DI LILO CON LE MODIFICHE
Per rendere attiva la nuova configurazione di LILO, occorre eseguire il comando

/sbin/lilo

 
FASE 14: BOOT DI LINUX CON LA NUOVA CONFIGURAZIONE
Eseguire il reboot e scegliere LinuxRic01. In questo modo si utilizzerà la nuova configurazione.
 
RIFERIMENTI
www.redhat.com
CAMBIAMENTI
--. 26 febbraio 2002 15.00: precisazioni su initrd indicate da Crazy Rubens.
--. 26 febbraio 2001 17.40: creazione documento
 
 
 redazione@retelinux.com