continua...
codice:
Per essere sicuri che la compilazione parta in ambiente libero da file inutili
possiamo digitare
  cd /usr/src/linux
  make mrproper
Attenzione perche' questo garantira' si un ambiente integro, ma nel caso di 
ricompilazione cancellera' il file di configurazione ".config" per cui non sara'
posssibile eseguire il comando "oldconfig" che ci permette di ricompilare con i
parametri dell'ultima configurazione, vedremo subito come evitarlo. Prima di
iniziare portiamoci nella directory dei sorgenti e facciamo una copia del file:
  cd /usr/src/linux
e controlliamo il file con l'opzione -a perche' avendo il punto davanti e' 
nascosto  
  ls -a
facciamocene una copia  
  cp .config vecchia.conf
adesso potremo richiamare la vecchia configurazione caricando il file.
Tenete presente che una copia della configurazione predefinita del kernel (non
della distribuzione) e' presente in
  /usr/src/linux/arch/i386/defconfig 
ma se il kernel e' stato modificato dalla distribuzione dobbiamo riferirci al
file in /usr/src/linux per partire da una base certa. Spesso stiamo compilando
in kernel con poche differenze di versione rispetto a quello installato, e
altrettanto spesso nella directory dei sorgenti (ma anche sul cd di 
installazione nel caso della Slackware) e' presente il file .config usato per la
compilazione. In questo caso e' possibile caricarlo durante la configurazione 
per usare quei settaggi come base funzionante, e da li' cominciare a ottimizzare
per la propria macchina.
Per iniziare la configurazione si possono usare tre comandi
make config
make menuconfig
make xconfig
mentre i primi due sono avviabili da shell, il terzo deve essere lanciato da un
terminale X di XFree. Il primo inoltre non consente di modificare scelte gia'
fatte, e' consigliabile usare i restanti due, preferendo il terzo.
A questo punto ci dobbiamo portare, se gia' non ci siamo, nella directory dei
sorgenti, perche' i suddetti comandi possono essere eseguiti solo da quella 
posizione. Per cui digitiamo da un terminale X
  cd /usr/src/linux
  make xconfig
vi apparira' la finestra del programma, in basso ci sono i pulsanti per salvare
o come abbiamo visto prima per caricare un file di configurazione. Da questo
momento tutte o quasi tutte le opzioni sono documentate dal tasto info e non
avrei nulla da aggiungere che non rappresenti una ripetizione o traduzione di
quanto e' scritto, scegliete voi se volete che un determinato elemento sia
compilato internamente al kernel, oppure compilato esternamente come modulo
caricabile.
Per partire da una configurazione nota, come ho gia' detto cercate il vecchio
".config"(a patto di aver installato i sorgenti durante la prima installazione)
e caricatelo in xconfig con l'apposito tasto, partirete con un kernel 
funzionante. Quando avete finito di fare le vostre scelte, invece di salvare e
uscire, salvatevi la configurazione con il Save as.. , cosi' potrete ripartire
in una nuova configurazione sebza ricominciare tutto da capo, fatto questo
salvate e uscite.
Finita la configurazione si inizia con la compilazione vera e propria digitando:
  make dep && make clean
che crea le strutture delle dipendenze per il compilatore e rimuove alcuni file
temporanei o di debug, vi passera' davanti l'intera compilazione del kernel, la
velocita' dipende ovviamente dalla macchina, il mio pentium 100 ci mette delle
ore, il mio pentium 700 alcuni minuti. Se non ci sono errori possiamo andare
avanti altrimenti dovremo ricominciare da capo, e puo' capitare. Se la 
compilazione e' andata a buon fine possiamo creare il file del kernel con:
  make bzImage
Ormai visto la crescita in occupazione di spazio questo e' il formato piu' usato
ma avremmo potuto anche usare
 make zImage
ambedue i comandi generano un'immagine compressa del kernel ma usano algoritmi
differenti di strutturazione dei dati. Tutti e due usano per la compressione
il comando gzip, il nome bzImage non indica l'algoritmo di compressione bzip ma
indica l'acronimo "big zImage". Potremmo usare altri comandi che automatizzano
il procedimento come "make bzlilo" ma e' meglio che le cose le facciamo a mano
per essere sicuri di quello che succede. A questo punto il file compresso del 
kernel che abbiamo compilato, se tutto e' andato bene, si trovera' in
 /usr/src/linux/arch/i386/boot 
e se avete seguito le mie istruzioni si chiamera "bzImage" .
Prima di installarlo dobbiamo compilare tutti gli elementi che in configurazione
abbiamo configurato come moduli, per far questo sempre da /usr/src/linux 
possiamo digitare
  make modules
Vedremo di nuovo l'output del compilatore passarci davanti e alla fine se non
ci sono stati errori, e se abbiamo gia' fatto la copia dei vecchi moduli come
abbiamo visto in precedenza, possiamo digitare
  make modules_install
che sovrascrivera' i vecchi moduli in /lib/modules/VERSIONE_KERNEL in caso di
ricompilazione o creera' la directory VERSIONE_KERNEL dove copiera' i moduli.
Se durante la compilazione avete dei messaggi di uscita per errore riguardanti
il "signal 11" al 99% e' un problema di hardware, niente stressa l'hardware
come una bella ricompilazione e spesso escono problemi che con l'uso comune non
si hanno, come insospettabili banchi di ram difettosi, impostazioni del bios 
problematiche e altro. Per avere una discreta possibilita' di attribuire il 
problema all'hardware, dopo aver controllato bene il bios, si puo procedere
cosi': subito dopo l'errore generato per esempio da make bzImage ridigitare
il comando, se la compilazione riparte per qualche linea e poi si ferma di
nuovo, be' controllate l'hardware... . Se invece fallisce sempre allo stesso 
punto, be' controllate la configurazione... .
Procediamo con l'installazione vera e propria, copiando il kernel nella giusta
posizione, ma prima sistemiamo il System.map quindi digitiamo
  cp /usr/src/linux/System.map /boot/System.map-VERSIONE_KERNEL
per copiare il System.map e dargli il nome che vogliamo rispecchi la nostra
versione e digitiamo
  ln -s /boot/System.map-KERNEL_VERSION /boot/System.map
per creare un link che punti alla versione aggiornata, a questo punto il 
kernel vero e proprio con
  cp  /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage-VERSIONE_KERNEL 
che ci copiera' rinominandolo per evitare di sovrascrivere un kernel esistente
nella directory /boot . 
A questo punto non ci rimane che modificare il file di configurazione del lilo
che e' il programma che si occupa di caricare il sistema operativo all'avvio, 
per fare cio' dobbiamo aprire con un editor di testo il file che generalmente
si trova  /etc digitando
cd /etc
mcedit lilo.conf
oppure
vim lilo.conf
o con qualsiasi altro editor e inserire le seguenti linee
  image=/boot/bzImage-VERSIONE_KERNEL
          label=Nuovo_kernel
          root=/dev/hda3 
          read-only
dove nuovo_kernel e' un nome scelto da voi, VERSIONE_KERNEL e' il numero che 
che riflette la versione che abbiamo impostato e /dev/hda3 e' la partizione in
cui ho installato linux nella mia macchina. E' possibile avere svariate 
direttive come quelle impostate, una per ogni kernel che ci compiliamo, o per
gli altri sistemi operativi, guardando il file vi potrete rendere conto.
Non bisogna dimenticare che tutte le modifiche in /etc/lilo.conf non avranno
effetto se non si avvisa il programma lilo, e si fa' in questo modo da shell:
  lilo -v
dovrebbe dirvi che la nuova configurazione e' stata caricata, se emette messaggi
di errore qualcosa chiaramente e' sbagliato nel file riapritelo e controllate.
Riavviate la macchina, se avete installato lilo in modalita' testuale al prompt
premete il tasto Tab e dovrebbe apparirvi la nuova etichetta, in modalita' 
grafica sarete in grado di visualizzarla e selezionarla, avviate e incrociate
le dita....
Se tutto e' andato liscio loggatevi e digitate
  dmesg| head -1
dovrebbe apparire un riepilogo del kernel in uso, in maniera breve anche con il
comando 
  uname -r
Se avete ricompilato lo stesso kernel e dopo il boot vi appaiono messaggi 
del tipo  ...undefined references... non vi preoccupate.
Questo succede perche' in caso di ricompilazione, la directory 
/lib/modules/VERSIONE_KERNEL e' stata sovrascritta ma al suo interno sono 
rimasti alcuni vecchi moduli, per ora ignorate i messaggi, appena sicuri che il
nuovo kernel vada bene potete cancellare la dir e rieseguire dalla directory dei
sorgenti il comando make modules_install:
  cd /usr/lib/modules
  mv VERSIONE_KERNEL/ VERSIONE_KERNEL.old
  cd /usr/src/linux
  make modules_install
Con questo ho terminato. 
Tutto il materiale e' rilasciato sotto licenza GPL2.
Pierluigi Previtali 2002
Interamente fatto con VIM
pierluigi