Primo procurarsi i componenti necessari: un kernel adatto
e l'ultimo pacchetto di modules.
Successivamente si devono installare le utilità per i moduli come
indicato nelle istruzioni incluse nel pacchetto. Molto
semplice: decomprimere i sorgenti e lanciare make
install. Questo compila e installa in
/sbin i seguenti programmi:
genksysm, insmod,
lsmod, modprobe,
depmod e kerneld. Si
raccomanda di aggiungere le seguenti linee ai propri script di
avvio che effettuano alcune impostazioni necessarie ogni volta
che Linux viene avviato. Aggiungere le seguenti linee al
proprio file /etc/rc.d/rc.S (se si utilizza
Slackware) o a /etc/rc.d/rc.sysinit (se si
utilizza SysVinit, cioè Debian, Corel, RedHat, Mandrake o
Caldera):
# Lancia kerneld - questo deve accadere molto presto nel processo
# di boot, sicuramente PRIMA che venga avviato fsck sui filesystem,
# in quanto potrebbe richiedere l'autocaricamento di qualche driver
if [ -x /sbin/kerneld ]
then
/sbin/kerneld
fi
# I comandi fsck standard vanno qui
# assieme al comando mount per montare il fs in lettura-scrittura
# Aggiornamento del file per le dipendenze kernel-moduli
# Il fs root ora DEVE essere montato in lettura-scrittura
if [ -x /sbin/depmod ]
then
/sbin/depmod -a
fi |
Questi comandi potrebbero essere già installati nel
proprio script di inizializzazione SysV. La prima parte lancia
kerneld. La seconda parte chiama depmod -a
all'avvio per costruire una lista di moduli disponibili e
analizzare le loro inter-dipendenze. La mappa di depmod quindi
dice a kerneld se, per un modulo che sta per essere caricato, è
necessario caricarne un altro prima.
 | Nelle recenti versioni di kerneld c'è la possibilità di
fare il link verso le librerie GNU dbm,
libgdbm. Se si abilita questa
opzione quando si compilano le utilità per i moduli,
kerneld non partirà se libgdbm non è
disponibile, caso che potrebbe accadere se si
possiede /usr su una partizione separata
e si fa partire kerneld prima che /usr
sia stata montata. La soluzione consigliata è di spostare
libgdbm da /usr/lib
a /lib o linkarla staticamente a
kerneld. |
Successivamente decomprimere i sorgenti del kernel,
configurarlo e compilarne uno che sia soddisfacente. Se questa
operazione non è mai stata fatta prima, è
necessario leggere attentamente il file README che si trova al primo livello
dei sorgenti di Linux. Quando si lancia make
config per configurare il kernel, si presti
attenzione ad alcune domande che appaiono verso l'inizio:
Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y |
Si rende necessario selezionare il supporto per i moduli
caricabili altrimenti non ci saranno moduli per kerneld da
caricare! Rispondere con Yes.
Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y |
Anche questo, ovviamente, è necessario. A questo punto
molte delle cose nel kernel possono essere compilate come
moduli. Si vedranno domande come:
Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] |
dove si può rispondere con una M che sta per
"Modulo". Generalmente solo i driver necessari per
far partire il sistema dovrebbero essere compilati nel kernel;
gli altri possono essere compilati come moduli.
 | Driver essenziali |
---|
| I driver essenziali
all'avvio del sistema devono essere compilati nel cuore del
kernel e non possono venir caricati come moduli. Tipicamente
questi includeranno i driver per l'hard-disk e il driver per il
filesystem principale. Se si possiede una macchina con più
sistemi operativi e ci si basa su file che si trovano su una
partizione estranea, è necessario compilare anche il supporto
per quel tipo di filesystem nel cuore del kernel. |
Una volta finito con make config,
compilare ed installare il nuovo kernel e i moduli con
make dep clean bzlilo modules
modules_install.
Fiuuu!!!
 | Compilare un'immagine del kernel |
---|
| Il
comando make zImage mette la nuova immagine
del kernel nel file
/arch/i386/boot/zImage. Sarà quindi
necessario copiarla dove risiede la propria immagine di boot e
installarla manualmente con LILO. Per maggiori informazioni su come configurare, compilare
e installare il proprio kernel, controllare il Kernel-HOWTO postato
regolarmente in comp.os.linux.answers e
disponibile sul Linux
Documentation Project e relativi mirror. |
Ora si faccia il reboot con il nuovo kernel. Quando il
sistema è di nuovo pronto, si impartisca un ps
ax con il quale si dovrebbe vedere una linea per
kerneld:
PID TTY STAT TIME COMMAND
59 ? S 0:01 /sbin/kerneld |
Una delle cose carine con kerneld è che, una volta che il
kernel e il demone sono stati installati, poche impostazioni sono
ancora necessarie. Per un inizio si provi ad usare uno dei driver
compilati come modulo (in generale tutto funziona senza ulteriori
configurazioni). Personalmente ho compilato il driver per il
floppy come modulo, così posso mettere un dischetto DOS nel drive
e digitare
osiris:~ $ mdir a:
Volume in drive A has no label
Volume Serial Number is 2E2B-1102
Directory for A:/
binuti~1 gz 1942 02-14-1996 11:35a binutils-2.6.0.6-2.6.0.7.diff.gz
libc-5~1 gz 24747 02-14-1996 11:35a libc-5.3.4-5.3.5.diff.gz
2 file(s) 26689 bytes |
Il driver del floppy funziona! Viene caricato
automaticamente da kerneld quando provo ad usare il disco
floppy.
Per vedere, invece, che il modulo del floppy è
effettivamente caricato, è possibile lanciare
/sbin/lsmod che lista tutti i moduli
attualmente caricati:
osiris:~ $ /sbin/lsmod
Module: #pages: Used by:
floppy 11 0 (autoclean) |
"(autoclean)" sta ad indicare che il modulo
verrà automaticamente rimosso da kerneld dopo che non viene
usato per più di un minuto. Così le 11 pagine di memoria (=
44kB, una pagina è 4kB) verranno utilizzate solo quando accedo
al drive del floppy (se non uso il floppy per più di un minuto,
verranno liberate). Alquanto carino, se sei a corto di memoria
per le proprie applicazioni!