Come impostare il tutto?

Primo procurarsi i componenti necessari: un kernel adatto e l'ultimo pacchetto di modules. Successivamente si deve installare le utility 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.

Nota

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 utility 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, configuralo e compilarne uno che sia soddisfacente. Se questa operazione non è mai stata fatta prima, è definitivamente necessario leggere 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. Vedrai domande come:

  Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] 

dove puoi 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.

CautelaDriver essenziali
 

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 nuovi moduli con make dep clean bzlilo modules modules_install.

Fiuuu!!!

SuggerimentoCompilare 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 tuo kernel, controllare il Kernel-HOWTO postato regolarmente in comp.os.linux.answers e disponibile sul Linux Documentation Project e relativi mirror.

Proviamo kerneld

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!