Essendo un programma che deve essere eseguito come programma di base (senza potersi avvalere dell’ausilio di altri programmi già in esecuzione) è necessario che il kernel sia un programma comprensibile al computer, ovvero in linguaggio macchina. Vista la complessità della scrittura di un programma come il kernel, risulterebbe ancora più complesso scriverlo direttamente in linguaggio macchina. Per questo, anche se parti più critiche sono scritte in assembly (un linguaggio di programmazione che molto si avvicina al linguaggio macchina), la maggior parte del kernel è scritto in un linguaggio di programmazione a più alto livello (ma non troppo): il C. Dunque l’immagine del kernel è il risultato di una compilazione dei suoi sorgenti.
|
Poiché il kernel deve offrire anche performance elevate, non sarebbe pensabile di utilizzare un programma interpretato, che per la presenza dell’interpretazione delle istruzioni avrebbe performance decisamente inferiori all’analogo compilato. |
Poiché questa operazione potrebbe compromettere il funzionamento dell’intero sistema (si ricordi che il kernel è il nucleo di base del sistema) si consiglia di farlo seguendo opportune indicazioni che comunque permetteranno di ripristinare facilmente la situazione precedente.
Per la compilazione del kernel è necessario avere installato sul sistema i tool per la compilazione, cioè i pacchetti necessari per compilare i sorgenti C (compilatore e librerie), nonché i file sorgenti del kernel.
La procedura di seguito descritta non modificherà né distruggerà il kernel già presente sul sistema, ma si limiterà a produrre un altro kernel. In un sistema GNU/Linux è possibile infatti avere più immagini del kernel sul filesystem e scegliere in fase di boot quale kernel avviare.
I file sorgenti del kernel di GNU/Linux possono essere reperiti in vari modi. Bisogna fare molta attenzione a reperire i sorgenti del kernel opportuno, poiché, in genere, le varie distribuzioni di GNU/Linux modificano il kernel Linux ufficiale (il cosiddetto vanilla kernel) secondo le proprie esigenze. Ad esempio, i sorgenti del kernel di una distribuzione RedHat sono contenuti in pacchetti rpm presenti nella directory RedHat/RPMS sui CD della distribuzione, che viene generalmente montata come /mnt/cdrom/RedHat/RPMS, e possono quindi essere installati sul sistema con i seguenti comandi
# cd /mnt/cdrom/RedHat/RPMS
# rpm -i kernel-headers*.rpm
# rpm -i kernel-source*.rpm
# rpm -i dev86*.rpm
# rpm -i bin86*.rpm
Se si vuole compilare un nuovo kernel con le stesse impostazioni di uno eventualmente già compilato in precedenza, si può copiare il file di configurazione.
# cd /usr/src/linux # cp ../linux-old-tree/.config .
# cd /usr/src/linux # make clean # make mrproper
|
Mr Proper è un prodotto finlandese per pulizie, che probabilmente ha ispirato Linus Torvalds. |
_______________________________________________________________
Comando: make
Path: /usr/bin/make
SINTASSI
$ make [option]
DESCRIZIONE
[da completare ...]
La configurazione dei parametri di configurazione può essere effettuata sia da shell che dall’ambiente grafico.
Per avviare l’ambiente grafico si può utilizzare il comando
# startx
# cd /usr/src/linux # make xconfig
Alternativamente, da una shell non grafica, si possono configurare i parametri di compilazione con il comando
# make menuconfig
Se tale comando non funziona, si deve utilizzare la sua versione più vecchia, con il comando
# make config
In generale è consigliabile, dove possibile (specialmente nel caso di configurazione dall’ambiente grafico), impostare la configurazione come quella precedente, cioè con i valori contenuti nel file /usr/src/linux/.config (dall’ambiente grafico premere il pulsante Load Configuration from File), per poi eventualmente modificare soltanto le impostazioni che interessano.
Alla fine dell’operazione di impostazione della configurazione scegliere il salvataggio dei dati, in modo tale che la configurazione venga scritta nel file /usr/src/linux/.config.
# make dep
È consigliabile assegnare un nome all’immaine del kernel da creare in modo tale che questa sia differente da altre eventualmente presenti sul sistema e non interferisca pertanto con le altre. Una buona idea è quella di identificare l’immagine del kernel con la sua versione. Per far questo è sufficiente modificare il contenuto del file /usr/src/linux/Makefile con un qualsiasi text editor (in questo caso è utilizzato vi)
# cd /usr/src/linux
# vi Makefile
EXTRAVERSION = -2.4.2XXXXXXXXX
EXTRAVERSION = -2.4.15MyKernel.10Jan2003
Questo passo è necessario soltanto se è stato abilitato il supporto per i moduli (Loadable Kernel Module support) al passo 3, altrimenti si incorrerà n un messaggio di errore analogo a “unresolved symbols” durante la fase di caricamento del kernel.
# cd /usr/src/linux # make modules # make modules_install
Prima di procedere con la compilazione dei sorgenti si può visualizzare il contenuto del file /usr/src/linux/arch/i386/config.in che contiene delle informazioni sulla compilazione dei sorgenti del kernel. Quindi si procede con la compilazione
# cd /usr/src/linux # nohup make bzImage &
_______________________________________________________________
Comando: hohup
Path: /usr/bin/nohup
SINTASSI
# nohup [option] [command] [args]
DESCRIZIONE
Per controllare il progredire dell’ultimo comando impartito (in esecuzione in background per la presenza di ‘&’), si può utilizzare il seguente comando
# tail -f nohup.out
Il file contenente l’immagine del kernel deve essere copiato nella dierctory /boot altrimenti non potrà essere caricato durante la fase di boot del sistema. Questo può essere fatto con il comando
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage.myker.26mar2001
[da completare ...]
Riavviare la macchina con il comando
# shutdown -r now
Se il nuovo kernel funziona, si può creare un floppy per l’avvio del sistema col nuovo kernel.
# cd /usr/src/linux # make bzdisk
Una volta completato il tutto, si può ripulire l’ambiente di compilazione liberando spazio sul filesystem.
# cd /usr/src/linux # make clean
[da completare ...]