Home Welcome 3.144.143.31 - Suggested View 1024x768 - Last Update 11/08/2004 Back Forward



Compilare i kernel 2.6


Questa procedura è molto simile a quella per i kernel 2.4 e precedenti; solo i punti 10 e 11 sono specifici per i kernel >= 2.5.


1) Diventate root.

2) Create, se non lo avete già fatto prima, un dischetto di avvio che vi sarà utile nel caso il sistema non fosse più avviabile. Per fare ciò è necessario conoscere con esattezza la versione attuale del kernel, quindi procedete così:
Tenete conto che questa operazione non è molto utile se state compilando una nuova versione del kernel affiancandola ad una già presente. In altre parole, è bene avere almeno un kernel sicuramente funzionante nel caso in cui quello nuovo impedisca l'avvio del sistema. Un'altra precisazione: i nuovi kernel eccedono quasi sempre la capacità di un disco floppy e pertanto l'operazione suddetta non è praticabile. La cosa migliore rimane perciò quella di compilare una nuova versione del kernel lasciando inalterata quella originale.

3) Spostatevi in /usr/src/linux in cui dovrebbero trovarsi i sorgenti del kernel e saltate al punto 4.
Se questa directory non esiste, vuol dire che i sorgenti non sono installati. Fatelo ora prendendo dai cdrom della vostra distribuzione i file necessari o scaricando da internet una nuova versione, verificando quali pacchetti è necessario installare.
Eventualmente, per affiancare la nuova versione a quella vecchia usate:

rpm -ivh kernel-source.versione-kernel.rpm
rpm -ivh kernel-doc.versione-kernel.rpm  (è la documentazione completa, non strettamente necessaria)

Se invece volete fare un aggiornamento, usate rpm -Uvh che sostituirà la vecchia versione con la nuova.

Nel caso usiate gli archivi tarball, decomprimeteli in /usr/src/linux con tar xzf linux-x.x.x.tar.gz. Se questa directory non fosse presente, createla con md linux, meglio ancora se il nome rispecchia la versione del kernel (es. md linux-2.6.4).
Fatto ciò, è bene creare un link simbolico che punti alla nuova directory dei sorgenti (non necessario nel caso l'abbiate chiamata semplicemente linux) con ln -s linux-x.x.x linux.

Ricordate che se avete in /usr/src due directory contenenti i sorgenti di due kernel diversi, avrete la possibilità di compilarli, configurali e testarli indipendentemente uno dall'altro.

4) Se dovete applicare qualche patch, è il momento di farlo: leggetevi le man pages di patch per maggiori informazioni (qui invece trovate un esempio di utilizzo).
Nota: prima di eseguire la patch è molto importante effettuare il backup del file .config e poi ripulire l'albero dei sorgenti del kernel cercando di ripristinare lo stato puro con make mrproper. Ciò garantisce che non vi siano file residui che possano eventualmente intralciare la patch o interferire con la compilazione del kernel. Successivamente è necessario ripristinare .config che sarà stato eliminato e avviare la successiva configurazione del kernel con make oldconfig.

5) Trovandovi sempre in /usr/src/linux, è bene dare un nome specifico al kernel inserendo qualcosa dopo la voce EXTRAVERSION, editando il Makefile; questa operazione è molto utile nel caso in cui la versione che state compilando è la stessa di quella in uso. Infatti personalizzandone il nome sarà possibile riconoscere l'una dall'altra e quindi verificarne il funzionamento senza rischi.
In definitiva, se NON state compilando una nuova versione, inserite qualcosa voi, viceversa potete lasciare tutto com'è.
P.S. Con i nuovi kernel l'operazione non è piu' necessaria; ad esempio a partire dalla Mandrake 9.1 se si compila un kernel con stesso numero di versione, viene aggiunto in automatico il suffisso custom. Dimenticatevi quindi questo punto e procedete senza indugi.

6) E' ora di configurare il kernel, potete farlo utilizzando:
Ogni funzionalità può essere impostata in uno dei 3 seguenti modi: IMPORTANTE In linea di massima, le seguenti regole sono sempre valide ed è bene rispettarle:
Infine consultate /usr/src/linux/Documentation/Configure.help per avere informazioni su ciascuna possibile impostazione delle voci del kernel. Cosa volete di più?

7) Eseguite make oldconfig per evitare che qualche opzione vi sia sfuggita. In particolare questa operazione è indispensabile se state usando un file di configurazione (.config) vecchio, perchè potrebbero esserci funzionalità nel nuovo kernel che altrimenti rimarrebbero escluse. Così facendo invece, il sistema vi chiederà cosa fare per ogni nuova opzione disponibile o semplicemente imposterà ai valori di default.

8) Ora il file .config generato rappresenta la vostra nuova configurazione. Fatene una copia di backup, ad esempio con cp .config /root/config-x.x.x.

9) Rullo di tamburi: è arrivato il momento di compilare il kernel, o quasi. Prima dovete considerare se state compilando la stessa identica versione del kernel già presente nel vostro sistema; in caso affermativo, prima di procedere dovete cancellare o meglio ancora rinominare (mv /lib/modules/x.x.x /lib/modules/x.x.x-OLD) la directory contenente i vecchi moduli. Se invece compilate una versione diversa (o avete modificato il nome della versione come spiegato al punto 5), allora potete lasciare tutto com'è salvo ricordarvi di rimuovere la vecchia directory dei moduli una volta stabilito che il vecchio kernel non serve più. Consiglio sempre di aspettare a rimuovere i sorgenti (/usr/src/linux), i moduli (/lib/modules/x.x.x) e i file relativi al vecchio kernel (a parte i link simbolici ovviamente) in /boot/, quali ad esempio System.map, vmlinux, initrd.img, fino a quando non si è sicuri che il nuovo kernel compilato funzioni correttamente.
P.S. Anche qui, analogamente al punto 5, potete ignorare il tutto se state usando un kernel recente; infatti grazie al suffisso custom aggiunto in automatico, è impossibile sovrascrivere la versione appena compilata su quella vecchia (a meno che non esista già una stessa identica versione custom).

10) Ci siamo: date make per compilare il kernel. Incrociate le dita e aspettate che le operazioni vengano ultimate; ci può volere un po' di tempo (anche un'ora), a seconda del vostro hardware e delle dimensioni del kernel che state compilando. Se non vengono mostrati messaggi di errore, con conseguente interruzione delle operazioni, andate al prossimo punto. Diversamente, o avete trovato un bug nel kernel (improbabile) o avete sbagliato qualcosa nella configurazione.

11) E' ora di compilare e installare i moduli con make modules_install. In caso di errore è molto probabile che ci siano dei problemi di dipendenze dei moduli; può capitare infatti che qualche impostazione del kernel non sia coerente, ad esempio se avete dimenticato di attivare un modulo richiesto. Rivedete la configurazione del kernel aiutandovi con i messaggi di errore mostrati a video.

12) Ora installate il kernel prodotto con make install stando sempre in /usr/src/linux/ e saltate al punto 14. Se preferite eseguire questa operazione manualmente (quella automatica è comunque sicura e molto comoda) seguite invece le seguenti istruzioni:

copiate il nuovo kernel

cp /usr/src/linux/arch/i386/boot/bzImage /boot/linux-x.x.x

come pure un altro file prodotto dalla compilazione

cp /usr/src/linux/System.map /boot/System.map-x.x.x

Consiglio infine di creare un nuovo file ram disk mediante

mkinitrd /boot/initrd-2.6.4-mdkcustom.img 2.4.19-16mdkcustom

Il file initrd contiene i driver necessari (in genere relativi all'accesso ai dischi IDE, SCSI, RAID) che permettono l'avvio del sistema e sarà caricato in memoria insieme al kernel, che ne sfrutterà i moduli contenuti e specificati nel file /etc/conf.modules oltre a quelli eventualmente aggiunti come argomenti sulla linea di comando di mkinitrd. Normalmente non è necessario apportare modifiche a questo file.

Nota: i nomi dei file System.map e initrd.img dovrebbero rispecchiare quanto più è possibile il numero di versione del kernel a cui si riferiscono (es. linux-2.6.4 e System.map-2.6.4). Il numero di versione "2.6.4-mdkcustom" usato sopra per initrd deve invece coincidere con quello del kernel compilato e quindi al nome della directory dei moduli, presente in /lib/modules/.
Inoltre evitate di cancellare, sovrascrivere o rinominare i file già presenti nella directory /boot/, altrimenti non potrete più usare il kernel attuale nel caso in cui il nuovo non funzionasse.
Bene, ora troverete due link simbolici in /boot, e cioè System.map e initrd.img che però fanno ancora riferimento al vecchio kernel; eliminateli (rm System.map initrd.img) e createne di nuovi che puntino a quelli appena generati (es. ln -s System.map-2.6.4 System.map).

13) Ora dovete modificare il file /etc/lilo.conf per informare il sistema che avete un nuovo kernel, da caricare all'avvio.
Fatelo aggiungendo le seguenti righe che vi permetteranno di scegliere con quale kernel lavorare (nulla vi impedisce di mantenerne più versioni contemporaneamente):

image=/boot/linux-x.x.x
      label=Nuovo_Kernel
      root=/dev/hda1
      initrd=/boot/initrd.img
      read-only
Dovete fare attenzione più che altro alla terza riga, che specifica la partizione dove andare a prendere il sistema operativo. Per non sbagliare, potete copiare da un'altra direttiva che è sicuramente già presente nel lilo.conf.
Ora eseguite /sbin/lilo -v per aggiornare il settore di boot; il parametro -v non è obbligatorio, ma è utile per verificare le operazioni compiute. Se lilo mostra degli errori, con ogni probabilità avete specificato un'immagine del kernel o una partizione sbagliata (prima e terza riga nell'esempio). Attenzione inoltre alla quarta riga: non è necessario inserirla, ma se lo fate accertatevi che punti al giusto file di ram disk (spesso è presente un link simbolico /boot/initrd.img che punta al vero file initrd, potete usarlo se non ne avete creato uno nuovo come spiegato al punto precedente).

14) Infine potete liberare un po' di spazio su disco dando make clean sempre da /usr/src/linux, per rimuovere i files generati dalla compilazione.


Questo è tutto; per problemi, commenti, suggerimenti e quant'altro vi rimando al Guestbook.





Anti-Spam button. Before you click, please write down my e-mail address. Thanks!