Avanti Indietro Indice

4. Kernel

Qui si spiega come compilare e installare un kernel della serie stabile 2.2.x. Di solito questo si fa per includere nel kernel delle funzionalità non presenti, ad esempio il supporto per alcune schede che per motivi di genericità non vengono sempre incluse nei kernel di serie delle distribuzioni, oppure per modelli recenti che per forza non esistevano all'epoca. Non è un procedimento complicato, ma vanno seguiti dei passi stabiliti, per non creare instabilità nel sistema a causa del mancato supporto a proprietà basilari, come il supporto al filesystem ext2, o ai binari elf, oppure ancora al tipo di disco da cui fate il boot. Per sapere quale kernel avete in funzione nel vostro PC, usate il comando 'uname -r'. Per sapere qual è l'ultima versione di kernel disponibile online, usate il comando 'finger @finger.kernel.org'.

4.1 Prerequisiti

Reperimento

Il sito principale è ftp.kernel.org, ma esistono i mirror nazionali, reperibili come ftp.XX.kernel.org, dove XX è il codice del paese (ad esempio "it" per Italia, "de" per Germania, "fr" per Francia, "uk" per Inghilterra, e così via). Cercate nella directory /pub/linux/kernel/2.2. In genere esistono 2 tipi di file in 2 formati di compressione diversi. I file sono del tipo: linux-VERSIONE_KERNEL.tar.COMPRESSORE, oppure patch-VERSIONE_KERNEL.tar.COMPRESSORE. COMPRESSORE può essere "gz" per file compressi con GZIP, o "bz2" per file compressi con BZIP2 (in genere più piccoli) I file che iniziano per "linux" contenengono i sorgenti del kernel COMPLETO, mentre i file che iniziano per "patch" contengono solo le differenze con le versioni precedenti. Quindi, per esempio, ci possono essere i file: linux-2.2.14.tar.gz, linux-2.2.14.tar.bz2, patch-2.2.14.tar.gz e patch-2.2.14.tar.bz2, insieme in genere a tutte le versioni precedenti. Conviene scaricare la versione completa se proprio non avete i sorgenti, mentre se avete una versione precedente potete scaricare solo i file di differenza, da applicare sui sorgenti in vostro possesso per avere alla fine la STESSA IDENTICA versione di sorgenti che avreste ottenuto dalla versione completa. Ricordate però che dovete scaricare TUTTE le versioni di patch dalla versione in vostro possesso fino a quella che volete ottenere (quindi se avete i sorgenti completi linux-2.2.11.tar.gz, e volete arrivare alla versione 2.2.14, dovete scaricare i file patch-2.2.12.tar.gz, patch-2.2.13.tar.gz e patch-2.2.14.tar.gz, da applicare al 2.2.11 in successione, come indicato in seguito (ATTENZIONE!: le patch delle versioni "pre..." non sono incrementali). Un consiglio: NON usate i sorgenti standard forniti dalle distribuzioni se dovete applicarvi delle patch, perché in genere sono versioni modificate e le patch notando questo fatto non vengono applicate (tipico il caso della RedHat), oltre al fatto che non mettono a posto alcuni collegamenti. Inoltre cercate di evitare le versioni sperimentali dei kernel (2.X.YYY, con X dispari), a meno che non aggiungano il supporto per qualche nuovo hardware di cui non potete fare a meno, perché a volte non sono completamente stabili (sono sperimentali per questo).

Software necessario

Naturalmente i sorgenti del kernel. Poi i programmi gzip e bzip2, in base al tipo di compressione usata per i sorgenti. I pacchetti software: "make", "bin86", "glibc-devel", "gcc" (in genere, se viene segnalata la mancanza qualche file, fa parte di questi pacchetti, quindi installateli tutti). Se volete usare l'interfaccia grafica di configurazione in X-Window, naturalmente dovete aver installato e configurato bene l'X-server, e poi vi servono anche il pacchetto contenente il linguaggio "tcl" e il suo tool grafico "tk".

Scompattazione, patch e avvio della configurazione

Ecco i passi da seguire (tutto ciò che è tra doppi apici è un comando, e va dato senza di essi; come esempio si suppone di avere una versione 2.2.11 e di aggiornare alla versione 2.2.14):

1. Se non lo siete già, diventate utente root e spostatevi in /usr/src ("su root", più la password, poi "cd /usr/src")

2. Date: "ls -l". Controllate se esiste una riga che contiene 'linux': se non esiste, saltate al punto 5; se esiste e il primo carattere della riga è d, si tratta di una directory, saltate al punto 4; altrimenti se esiste e il primo carattere della riga è l, si tratta di un collegamento, continuate col punto 3

3. Rimuovete il link: "rm -f linux" (in questo modo i vecchi sorgenti eventualmente presenti rimarranno nella directory cui puntava il link, in genere 'linux-VERSIONE_KERNEL'), e saltate al punto 5

4. Rinominate la directory: "mv linux linux.old" (in questo modo i vecchi sorgenti eventualmente presenti verranno spostati nella directory 'linux.old'), e continuate col punto 5

5. Scompattate i nuovi sorgenti: se il file in vostro possesso finisce in '.gz', date "tar xvzf /persorso/del/file/linux-2.2.11.tar.gz", mentre se finisce con '.bz2', date "tar xvf /persorso/del/file/linux-2.2.11.tar.bz2 --use-compress-program bzip2"

6. Se avete già l'ultima versione dei sorgenti, saltate al punto 7, altrimenti se dovete applicare delle patch per aggiornare i sorgenti ad una versione più recente, date i seguenti comandi (TUTTE le patch vanno applicate in sequenza):


cd linux
gzip -dc /persorso/del/file/patch-2.2.12.gz | patch -p1
gzip -dc /persorso/del/file/patch-2.2.13.gz | patch -p1
gzip -dc /persorso/del/file/patch-2.2.14.gz | patch -p1
cd .. 

nel caso abbiate dei file del tipo 'patch-VERSIONE_KERNEL.bz2', sostituite nei comandi precedenti 'gzip' con 'bzip2'

7. Rinominate la directory ottenuta in base alla versione dei sorgenti che avete ottenuto (nell'esempio 2.2.14) e ricreate alcuni collegamenti simbolici:


mv linux linux-2.2.14
ln -s linux-2.2.14 linux
rm -rf /usr/src/linux/include/asm /usr/include/asm
rm -rf /usr/include/linux /usr/include/scsi
ln -s /usr/src/linux/include/asm-i386/ /usr/src/linux/include/asm
ln -s /usr/src/linux/include/asm-i386/ /usr/include/asm
ln -s /usr/src/linux/include/linux/ /usr/include/linux
ln -s /usr/src/linux/include/scsi/ /usr/include/scsi

così da portare il tutto in una situazione standard (i sorgenti devono essere in '/usr/src/linux/')

8. Si passa ora alla fase più delicata dell'operazione: scegliere cosa includere e cosa no nel kernel. Date "cd linux" e poi "make mrproper" per eliminare residui di eventuali vecchie compilazioni (attenzione che questo comando cancella il file '.config', che contiene le impostazioni date in una precedente compilazione, quindi nel caso fatevene una copia). Ora date a vostra scelta uno dei tre comandi seguenti, in base al tipo di interfaccia che volete usare (solo quello che c'è prima del # !!!):


make config # (interfaccia a caratteri base)
make menuconfig # (interfaccia a caratteri con menu)
make xconfig # (interfaccia grafica - dovete essere in X-Window)

e passiamo alla configurazione dei parametri.

4.2 Parametri

Code maturity level options

Processor type and features

Loadable module support

General setup

Plug and Play support

Block devices

Networking options

QoS and/or fair queueing

Telephony Support

SCSI support

SCSI low-level drivers

Network device support

ARCnet devices

Ethernet (10 or 100Mbit)

Ethernet (1000 Mbit)

Appletalk devices

Token ring devices

Wan interfaces

Amateur Radio support

IrDA subsystem support

Infrared-port device drivers

ISDN subsystem

Old CD-ROM drivers (not SCSI, not IDE)

Character devices

Mice

Joysticks

Watchdog Cards

Video For Linux

Ftape, the floppy tape device driver

Filesystems

Network File Systems

Partition Types

Native Language Support

Console drivers

Sound

Additional low level sound drivers

Kernel hacking

4.3 Compilazione e installazione

Fatto tutto questo, salvate con l'opzione apposita, incrociate le dita e date:


make dep && make clean && make bzImage && make modules

uscite e andate a farvi un caffè o una lunga passeggiata (con un processore a 200 MHz servono in genere una quindicina di minuti, regolatevi!) Non è come aspettare un figlio, ma la prima volta ci si ritrova con le unghie completamente rosicchiate ;-). Se tutto è andato bene, il vostro nuovo bambino... ehm, kernel, è contenuto nel file '/usr/src/linux/arch/i386/boot/bzImage'. Complimenti! Ora bisogna installare il tutto. Per prima cosa i moduli. Se avete ricompilato la stessa versione di kernel che state già usando, dovete spostare la directory con la versione precedente dei moduli, prima di installarli (se avete compilato una versione diversa da quella in uso, potete saltare il primo dei due comandi seguenti):


mv /lib/modules/VERSIONE_KERNEL /lib/modules/VERSIONE_KERNEL.old
make modules_install

Fatto questo, controllate se nella directory "/boot" esistono i seguenti file:


ls -l /boot/System.map /boot/vmlinuz

come prima, se il primo carattere è una 'l' si tratta di collegamenti (rimuoveteli con rm -f /boot/...), mentre se è '-' si tratta di file (rinominateli con mv -f /boot/NOMEFILE /boot/NOMEFILE-VERSIONE_KERNEL_PRECEDENTE). Ora copiate in "/boot" il kernel e la System-map aggiornate e ricreate i collegamenti (l'esempio si riferisce sempre al kernel 2.2.14):


cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.14
ln -s /boot/vmlinuz-2.2.14 /boot/vmlinuz
cp /usr/src/linux/System.map /boot/System.map-2.2.14
ln -s /boot/System.map-2.2.14 /boot/System.map

Se usate 'loadlin', copiate il nuovo kernel nella sua directory (guardate la pagina apposita di questo howto). Mentre se usate 'lilo', modificate il file '/etc/lilo.conf' in modo da avere sia il vecchio kernel che il nuovo (fino a quando non sarete sicuri che quest'ultimo funzioni perfettamente - la parte aggiunta per il nuovo kernel è quella tra le due righe di ###..., e qualcosa potrebbe essere diverso):


boot = /dev/hda
delay = 5
vga = normal
root = /dev/hdb2   # correggere con la vostra partizione di root!
read-only
image = /boot/vmlinuz.old    # controllate o rinominate il vecchio kernel di conseguenza
    label = oldlinux
#################################
image = /boot/vmlinuz   # questo è il nuovo kernel
    label = linux
#################################
other = /dev/hda1
    label = dos
    table = /dev/hda

e ridate '/sbin/lilo -v' per rimetterlo a posto (man lilo, man lilo.conf o lilo-howto per altre informazioni). Se volete rimuovere lilo, usate il comando "fdisk /mbr" dal DOS, oppure 'lilo -U' da Linux. Per la stampante, controllate che il file /etc/conf.modules contenga le righe:


alias parport_lowlevel parport_pc
options parport_pc io=0x378, 0x278 irq=7 auto

Se volete provare il kernel prima di usarlo definitivamene, tralasciate per ora tutta la parte dopo ' make modules_install' e copiatelo su un dischetto che userete come boot (il floppy NON va montato per eseguire queste operazioni!!!):


cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.14
cp /usr/src/linux/vmlinuz-2.2.14 /dev/fd0
rdev /dev/fd0 /dev/hda2
rdev -R /dev/fd0 1

Sostituite a /dev/hda2 la vostra partizione di root ('/')!!! Questo è tutto!

Nota per Debian: dopo aver ricompilato, potete ottenere un pacchetto .deb contenente kernel e moduli e che aggiorna anche in automatico lilo, col seguente comando dato da dentro la dir /usr/src/linux/ :


make-kpkg --revision pingu.0 kernel_image

dove potete sostituire pingu.0 con quello che volete.


Avanti Indietro Indice