Compilazione del Kernel

In questa fase si procederà con la compilazione e l'installazione del kernel. La versione scelta è la 2.4.26 poichè risulta essere l'ultima versione stabile al momento in cui ho effettuto la compilazione ed è la versione consigliata dalla guida elettronica LFS.

Il compilatore utilizzato per la compilazione del kernel è il GCC versione 2.95.3, anche se nel sistema LFS è stata installata una versione più recente, la 3.3.3. La scelta di utilizzare la versione 2.95.3 del compilatore è consigliata dagli sviluppatori del kernel in modo da avere una stabilità assoluta del sistema. Le altre versioni del compilatore GCC non sono state testate a sufficienza per la compilazione del kernel. Anche se utilizzando una versione più recente del GCC come la 3.3.3 si otterrebbe un kernel funzionante e stabile è buona norma utilizzare il 2.95.3.

Per poter far convivere due versioni diverse dello stesso compilatore sulla stessa macchina, la versione 2.95.3 è stata installata nella directory /opt.

La compilazione del kernel può essere suddivisa in quattro parti:

  1. La prima fase chiamata di prepazione consiste nel verificare l'hardware del sistema e le compatibilità con GNU/Linux procurarsi i sorgenti del kernel attraverso le diverse fonti disponibili, scompattare i sorgenti nella directory /usr/src.
  2. Nella fase di configurazione si decide quali sono le caratteristiche che devono essere incluse nella versione finale del kernel. Questo richiede la conoscenza approfondita dell' hardware del propio sistema.

    In questa fase bisogna scegliere se includere il supporto per i dispositivi direttamenente nel kernel oppure come moduli. Nel caso in cui la macchina utilizzata per il sistema LFS sia un po datata, si preferisce utilizzare un kernel statico (ovvero senza il supporto per i moduli), includendo solamente il supporto per l'hardware che effetivamente è presente nella macchina. In questo modo si rende la macchina un pò più performante. Con l'avanzare delle prestazioni dei computer, utilizzare un kernel statico non comporta nessun vantaggio significativo rispetto alle prestazioni. Ci sono altri motivi da tenere in considerazione per effettura questa scelta. Se per es. una macchina deve essere utilizzata come server, utilizzando un kernel statico, aumenterebbe la sicurezza della macchina.

    Prima di effettuare qualsiasi operazione, il primo comando da impartire, dopo essersi assicurati di trovarsi nella directory dei sorgenti del kernel /usr/src/linux è:

    make mrproper
    In questo modo ripuliamo i sorgenti dai file utilizzati dalle eventuali precedenti compilazioni.

    Il prossima passo consiste nell'avviare l'utility relativa alla configurazione. Nelle versioni 2.4.x esistono quattro modalità con cui effettuare la configurazionene del kernel. Queste sono: config, oldconfig, menuconfig, xconfig. Possiamo scegliere uno qualsiasi di questi facendo attenzione nel caso di menuconfig di avere le librerie ncurses installate, mentre nel caso di xconfig di trovarsi nell'ambiente grafico e avere nel sistema le librerie Tcl/Tk e X. Quindi con :

    make menuconfig
    apparirà una schermata come questa:

    [scale=0.5]immagini/menuconfig.png

    attraverso un menù molto intuitivo possiamo selezionare le varie componenti che faranno parte del kernel. Dopo aver salvato la configurazione del kernel, verrà creato una file .config che conterrà le informazioni relative alle selezioni delle varie voci che abbiamo effettuto nel menù e verrà utilizzato dal compilatore. Questo file deve essere conservato con cura, in modo da poterlo utilizzare come punto di riferimento per le eventuali compilazioni successive.

  3. La fase di compilazione consiste nel creare il kernel vero e propio. Con
    make CC=/opt/gcc-2.95.3/bin/gcc dep
    vengono generate le informazioni relative alle dipendeze. Dopo che sono state create le informazioni relative alle dipendeze possiamo eliminare alcuni file object che non verranno più utilizzati.
    make CC=/opt/gcc-2.95.3/bin/gcc clean
    Finalmente può essere generato il kernel vero e propio con:
    make CC=/opt/gcc-2.95.3/bin/gcc bzImage

    Se si è scelto di utilizzare un kernel con il supporto dei modulì, questi dovranno essere compilati ed installati:

    make CC=/opt/gcc-2.95.3/bin/gcc modules

    make CC=/opt/gcc-2.95.3/bin/gcc modules_install
  4. Se la procedura di compilazione del kernel è andata a buon fine, in arch/i386/boot sarà presente il file bzImage che andrà copiato nella directory /boot ed eventualmente rinominato con un nome più comprensibile come lfskernel-2.4.26. Verrà copiato anche System.map nella directory /boot. E' buona norma copiare il file .config nella directory /boot. Il passo successivo consiste nel configurare il boot loader per permettere l'avvio del nuovo kernel. Questo verrà spiegato in dettagli nel prossimo paragrafo.

Daniele Salamina, Relazione di Laurea, Progettazione e realizzazione di una distribuzione GNU/Linux, Settembre 2004