Appendice A. Creazione di un kernel personalizzato

Molti tra i nuovi utenti di Linux si domandano: "per quale motivo dovrei creare il kernel da solo?". Considerando i grandi progressi compiuti nell'utilizzo dei moduli del kernel, la risposta pi� corretta a questa domanda �: "A meno che tu non conosca gi� il motivo, probabilmente non ti serve saperlo".

In passato, era necessario ricompilare il kernel ogni volta che si aggiungeva del nuovo hardware al sistema. In altre parole, il kernel era statico. Le migliorie apportate ai kernel di Linux 2.0 x consentono di modularizzare molti driver hardware in componenti caricati su richiesta. Tuttavia, i problemi maggiori si sono verificati quando gli utenti disponevano di pi� kernel compilati con opzioni di configurazione diverse (per esempio, kernel SMP insieme a kernel UP). Grazie agli ulteriori passi avanti in materia di modularizzazione dei kernel 2.4.x di Linux, adesso � possibile far coesistere in un sistema vari kernel differenti (che per� non possono condividere moduli).

Per ricevere informazioni sulla gestione dei moduli del kernel, consultate il Capitolo 30. Se non state ricompilando un kernel personalizzato per il vostro sistema, non noterete grandi cambiamenti nella gestione dei moduli.

Costruzione di un kernel modulare

Le istruzioni contenute in questa sezione si riferiscono alla creazione di un kernel modulare. Se invece siete intenzionati a creare e installare un kernel monolitico, per informazioni sui diversi aspetti della sua creazione e installazione, consultate la la sezione Creazione di un kernel monolitico.

I passaggi seguenti vi guideranno attraverso la costruzione di un kernel personalizzato facendo riferimento all'architettura x86.

NotaNota Bene
 

In questo esempio utilizzeremo la versione di kernel 2.4.18-7.95, ma la vostra versione pu� risultare differente. Per determinare la versione del vostro kernel, digitate il comando uname -r. Sostituite 2.4.18-7.95 con la vostra attuale versione di kernel.

  1. � fondamentale accertarsi di avere un dischetto di emergenza funzionante, in caso commettiate qualche errore. Se non ne avete creato uno in fase di installazione, fatelo adesso tramite il comando mkbootdisk. Il comando standard � simile a mkbootdisk --device /dev/fd0 2.4.x, dove 2.4.x rappresenta la dicitura completa della versione del vostro kernel (per esempio, 2.4.18-7.95). Una volta terminato, provate il dischetto di avvio, per accertarvi che funzioni in modo corretto.

  2. Dovete assicurarvi di avere installato il pacchetto kernel-source. Digitate il comando rpm -q kernel-source per determinare la versione del pacchetto. Se non � installato, installatelo ora da uno dei CD di Red Hat Linux, oppure dal sito FTP di Red Hat all'indirizzo ftp://ftp.redhat.com. Sul sito http://www.redhat.com/mirrors.html troverete un elenco di mirror. Per ulteriori informazioni relative all'installazione di pacchetti RPM, consultate il Capitolo 31.

  3. Aprite la shell e spostatevi nella directory /usr/src/linux-2.4. Tutti i comandi che andrete a digitare da questo punto in avanti devono essere eseguiti da questa directory.

  4. Per iniziare la creazione del kernel, � importante che l'albero sorgente sia "pulito". Pertanto, � consigliabile eseguire prima di tutto il comando make mrproper, per rimuovere dal suo interno tutti i file di configurazione e qualsiasi traccia di precedenti compilazioni. Se disponete gi� di un file di configurazione funzionante (/usr/src/linux-2.4/.config) e volete utilizzarlo, salvatelo all'interno di un'altra directory prima di eseguire questo comando e, dopo, copiatelo di nuovo dove si trovava.

  5. Adesso vi serve un file di configurazione che andr� a determinare quali componenti includere nel vostro kernel.

    Se state lavorando in ambiente X Window, il metodo raccomandato prevede l'utilizzo del comando make xconfig. I vari componenti sono elencati in differenti livelli di menu e vanno selezionati con il mouse. Potete scegliere tra diverse opzioni: Y (s�), N (no) o M (modulo). Dopo aver scelto i componenti, fate un clic sul pulsante Salva ed esci per creare il file di configurazione /usr/src/linux-2.4/.config e uscire dal programma di Configurazione del kernel di Linux.

    Se desiderate utilizzare le impostazioni di un kernel predefinito di Red Hat Linux, copiate il file di configurazione dalla directory /usr/src/linux-2.4/configs in /usr/src/linux-2.4/.config. Quindi eseguite il comando make xconfig ed effettuate solo le modifiche necessarie. Assicuratevi di salvare le modifiche apportate al file di configurazione.

    Di seguito sono riportati altri metodi per la configurazione del kernel:

    • make config — un programma di testo interattivo. I componenti da includere nel kernel sono presentati in formato lineare e dovete trattarli uno per volta. Questo metodo non richiede il sistema X Window e non consente di modificare le risposte alle domande precedenti.

    • make menuconfig — un programma in modalit� testo che funziona tramite menu. I componenti sono presentati in un menu ordinato per categorie; i componenti desiderati si selezionano come nel programma di installazione in modalit� testo di Red Hat Linux. Selezionate gli elementi corrispondenti digitando: [*] (integrato), [ ] (escludi), <M> (modulo) o < > (supporto per i moduli). Questo metodo non richiede il sistema X Window.

    • make oldconfig — uno script non interattivo che crea i file di configurazione contenenti le impostazioni di default. Se state usando il kernel predefinito di Red Hat, crea un file di configurazione per il kernel distribuito con Red Hat Linux per la vostra architettura. Questo � utile per configurare il vostro kernel in base a parametri di default funzionanti, scartando poi le caratteristiche che non vi interessano.

    NotaNota Bene
     

    Per utilizzare kmod (consultate il Capitolo 30 per maggiori dettagli) e i moduli del kernel, dovete rispondere S� a kmod support e module version (CONFIG_MODVERSIONS) support nel corso della configurazione.

  6. Dopo aver creato il file /usr/src/linux-2.4/.config, lanciate il comando make dep per configurare correttamente tutte le dipendenze.

  7. Lanciate il comando make clean per preparare l'albero sorgente per la compilazione.

  8. � consigliabile che attribuiate al kernel che state creando un numero di versione modificato, in modo da non sovrascrivere il kernel preesistente. Il metodo qui descritto � il pi� facile per ovviare a eventuali contrattempi. Se desiderate conoscere altre alternative, andate all'indirizzo http://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO.html oppure nel Makefile in /usr/src/linux-2.4.

    Per default, /usr/src/linux-2.4/Makefile presenta la parola custom al termine della linea che inizia con EXTRAVERSION. Aggiungendo la stringa potrete avere sul vostro sistema sia il vecchio kernel sia quello nuovo (versione 2.4.18-7.95custom), entrambi funzionanti.

    Per dare al kernel un nome personale e "unico", potete anche aggiungere la data al termine della stringa.

  9. Generate il kernel con il comando make bzImage.

  10. Create gli eventuali moduli che avete configurato con il comando make modules.

  11. Installate i moduli del kernel (anche se non ne avete creato nessuno) con il comando make modules_install. Assicuratevi di digitare l'underscore (_), che far� in modo di installare i moduli del kernel nella directory /lib/modules/VERSIONEKERNEL/kernel/drivers (dove VERSIONEKERNEL sta per la versione specificata nel Makefile). Nel nostro esempio risulterebbe, dunque, /lib/modules/2.4.18-7.95custom/kernel/drivers/.

  12. Digitate il comando make install per copiare il vostro kernel e i file a esso associati nelle rispettive directory.

    Oltre a consentire l'installazione dei file del kernel all'interno della directory /boot, questo comando esegue lo script /sbin/new-kernel-pkg, che crea una nuova immagine initrd e aggiunge nuove voci al file di configurazione del boot loader.

    Se possedete un adattatore SCSI e avete ricompilato il driver SCSI come modulo o avete compilato il kernel con supporto ext3 come modulo (quello predefinito in Red Hat Linux), vi occorre l'immagine initrd.

  13. Anche se l'immagine initrd e le modifiche al boot loader sono fatte su misura per voi, � bene verificare che siano state fatte correttamente. Per i dettagli, consultate la la sezione Creazione di un'immagine initrd e la la sezione Configurazione del boot loader.