Approfondire la conoscenza
dei moduli del Kernel
di Caldera

di
David Nelson
traduzione di
Luciano Serafini e
Paolo Maria Ruscitti

I moduli sono un punto di forza delle ultime versioni di LINUX. Nell'articolo viene spiegato, con estrema cura, come compilare e configurare i moduli per la distribuzione di Caldera.


Non dovreste leggere questo articolo, il concetto dei moduli del kernel di Linux è abbastanza semplice. Sfortunatamente le informazioni necessarie a compilare, installare e usare i moduli sono disperse su molti HOWTO, README e man pages. In più i file che devono essere modificati si trovano in molte directory oscure.

Infine, ho scritto questo "ricettario" per permettere a me e a voi di partire. Una volta creati e lanciati questi moduli, potete occuparvi dei dettagli in seguito. Ho testato questo materiale su un processore X86 su cui gira il Caldera Open Linux 1.1 che è simile al Red Hat 4.2. Le prestazioni con altri processori e distribuzioni potrebbero variare.

Perché usare i moduli? I moduli vi permettono di compilare un kernel piccolo e veloce e di installare o rimuovere, su richiesta, i driver delle periferiche. Senza i moduli il kernel di Linux potrebbe gonfiarsi fino ad assomigliare ad un certo sistema operativo commerciale.

Per prima cosa raccomando di compilare un kernel di base che includa tutte le funzionalità essenziali per il vostro sistema senza i moduli. Mi rendo conto che questo sembra un passo indietro, ma voi non vorrete perdere la possibilità di far il boot poiché avete ingarbugliato i vostri moduli. Il README in usr/src/linux è la vostra guida, ma fondamentalmente eseguite il comando:

make mrproper; make xconfig 
(o menuconfig o config) per includere tutte le funzionalità necessarie, quindi lanciate:
make dep; make clean; make zImage
Salvate la vostra configurazione del kernel in un file chiamato kernelconf.base nel caso dobbiate ricompilare. Il menu xconfig vi suggerisce di salvare e caricare i file di configurazione. Se usate menuconfig o config, la configurazione corrente è nel file /usr/src/linux/.config; copiate questo file in kernelconf.base. Se configurate un kernel troppo grande, la compilazione finale fallirà. Se ciò accade eseguite make bzImage invece di zImage. Il vostro kernel compilato sarà nella directory /usr/src/linux/arch/i386/boot.

Potreste aver commesso un errore nel compilare il vostro kernel di base, quindi non gettate quello vecchio. Se usate LILO, rinominate il vostro nuovo kernel come zImage.base e copiatelo nella locazione del vostro kernel corrente, di solito / or /boot. Aggiungete una sezione a /etc/lilo.conf che vi permetta di selezionare sia il vostro kernel di default, sia quello base al momento del boot. Il mio lilo.conf è mostrato qui escluse alcune linee di commento:

# sezione generale
boot = /dev/hda3
install = /boot/boot.b
message = /boot/message
prompt
timeout = 50

# entry di default
image = /bzImage
        label = linux
        root = /dev/hda3
        read-only

# kernel di base
image = /zImage.base
        label = base
        root = /dev/hda3
        read-only
L'aggiunta importante a lilo.conf è l'ultima sezione (# kernel di base) che informa LILO del vostro nuovo kernel. Assicuratevi, inoltre, che lilo.conf abbia le linee prompt e timeout. Adesso eseguite lilo e quindi fate il reboot. LILO si fermerà dando il prompt boot:. Se premete TAB, avrete scelto linux e base. Digitate base, e partirà il vostro nuovo kernel. Potreste ricevere un messaggio d'errore riguardante errate dipendenze dei moduli, ma se il vostro kernel di base è completo, questo non dovrebbe infastidirvi. Se qualcosa va storto fate il reboot e digitate linux (o attendete l'intervallo di timeout) e partirà il vostro vecchio kernel. Assicuratevi di avere un kernel di base funzionante prima di procedere. Con questo approccio non brucerete mai i ponti (o i kernel) dietro di voi.

Se non usate il LILO, create un floppy di boot per il vostro kernel di base. Per far questo inserite un floppy ed eseguite make zdisk, invece di zImage.

Adesso siete pronti a compilare un kernel con dei moduli su misura per il vostro sistema. Eseguite gli stessi comandi come sopra, ma quando eseguite xconfig o menuconfig, scegliete alcune caratteristiche da compilare come moduli. Vi suggerisco di sperimentare prima scegliendo dei moduli utili, ma non necessari da aggiungere a zImage.base. Delle scelte buone potrebbero essere il supporto della stampante o del floppy (a meno che non facciate il boot dal floppy). Salvate la vostra configurazione come kernelconf.mod nel caso abbiate bisogno di tornare indietro. Inoltre annotate quali moduli state compilando. Per sapere esattamente quali moduli sono compilati, vi suggerisco di muovere o cancellare quelli vecchi (se esistono). La release della Caldera include una gran quantità di moduli. Essi sono in /lib/modules/2.0.29. Io ho spostato quelli vecchi in sottodirectory, piuttosto che cancellarli, nel caso avessi avuto bisogno di ripristinarli. Se lavorate con una release differente del kernel, invece della sottodirectory 2.0.29 avrete una sottodirectory corrispondente al numero della vostra release.

Dopo l'esecuzione di make zImage, lanciate:

make modules; make modules_install
Come prima, spostatevi (usando cd) nella directory contenente zImage, e rinominatelo zImage.mod e spostatelo nella directory dove il LILO lo cercherà. Inserite una nuova sezione in fondo a lilo.conf per permettervi di lanciare questo kernel con la label modules. Se non usate LILO, create un altro zDisk.

Adesso eseguite depmod -aq. Questo crea /lib/modules/2.0.29/modules.dep, necessaria alle utility dei moduli. Successivamente eseguite quanto segue:

modprobe -c | grep -v '^path' > /etc/conf.modules
Questo comando imposta un altro file necessario alle utility dei moduli.

Adesso fate il reboot, scegliendo la label modules al prompt del boot. Successivamente spostatevi nella directory /etc/modules/2.0.29. Dovrebbe contenere un file con un nome molto lungo tipo il seguente:

#1 Tue Feb 11 20:36:48 MET 1997.default
Questo file viene letto nella fase di boot da /etc/rc.d/rc.modules. Esso contiene una lista dei moduli di default caricati quando viene avviato il kernel. Avete bisogno di cambiare sia il nome, sia il contenuto. Fissare il nome è la parte difficile. Nella directory /etc/modules/2.0.29 eseguite i comandi:
FILE=i`uname -v`.default
cp "#1 Tue"* "$FILE"
Questo magic crea un file con il nome che rc.modules cercherà nel momento del boot. Il nome è basato sul momento di compilazione del kernel. Se ricompilate il kernel, dovete ripetere il magic.

Editate questo file per contenere solo i moduli che volete siano caricati in fase di boot. Ad esempio potrebbe contenere le linee:

floppy
lp
che caricherebbero i moduli del floppy e della stampante assumendo che li abbiate compilati come moduli. Per far si che il vostro editor accetti questo file, dovete mettere degli apici al nome.

Per caricare manualmente un modulo, eseguite insmod 'modname'. Per rimuoverlo eseguite rmmod 'modname'. Per sapere quali moduli sono caricati correntemente, eseguite lsmod.

Il miglior giocattolo è kerneld; esso carica e scarica automaticamente i moduli necessari. Assumiamo che abbiate compilato il driver del floppy come modulo. Controlliamo se è stato caricato eseguendo lsmod. Se sì, rimuoviamolo con rmmod floppy. Quindi eseguiamo kerneld. Facciamo il mount del floppy con mount /mnt/floppy (o qualunque comando che monti il vostro floppy). Magicamente, kerneld installa il modulo del floppy quando necessario. Inoltre disinstallerà i moduli che non sono stati usati per un certo periodo, mantenendo il vostro kernel leggero.

Adesso ne sapete abbastanza per sperimentare con i moduli senza provocare il crash del vostro kernel in fase di boot. Leggete il Module mini-HOWTO, il kerneld mini-HOWTO, e le man pages delle utility per diventare un vero esperto. Felice moduling!


Fonti


Module mini-HOWTO

kerneld mini-HOWTO


Per l'articolo originale: © 1998 David Nelson
Pubblicato sul n. 29- Giugno 1998 di Linux Gazette
Per l'edizione italiana: © 1998 LGEI