Il kernel di Linux ha un design modulare. All'avvio, viene caricata in memoria solo una minima parte del kernel. Dunque, quando un utente desidera utilizzare una periferica il cui supporto non è presente nel kernel attualmente attivo, viene caricato dinamicamente un module del kernel, talvolta riferito come driver.
Durante l'installazione di Red Hat Linux, l'hardware del vostro sistema viene analizzato. Sulla base del rilevamento e delle informazioni da voi fornite, il programma di installazione decide quali moduli caricare all'avvio del sistema. Il programma di installazione configura il meccanismo di caricamento dinamico in modo che funzioni in maniera trasparente.
Se dopo l'installazione aggiungete nuovo hardware che richiede un particolare modulo del kernel, dovete configurare il sistema in modo tale da caricare il modulo del kernel corretto per il nuovo hardware. Kudzu viene eseguita all'avvio del sistema e di norma è in grado di rilevare il nuovo hardware. Potete anche aggiungere un nuovo driver modificando il file di configurazione del modulo, /etc/modules.conf.
![]() | Nota bene |
---|---|
I moduli della scheda video usati per visualizzare l'interfaccia del Sistema X Window, fanno parte del pacchetto XFree86, non del kernel; di conseguenza, questo capitolo non viene applicato ai suddetti moduli. |
Per esempio, se il vostro sistema ha una scheda di rete PCI SMC EtherPower 10 al momento dell'installazione, il file di configurazione del modulo conterrà la seguente linea:
alias eth0 tulip |
Dopo l'istallazione, se installate un'altra scheda di rete identica nel vostro sistema, aggiungete la seguente linea nel file /etc/modules.conf:
alias eth1 tulip |
Per ottenere un elenco alfabetico dei moduli del kernel e dei dispositivi hardware che supportano, consultate la Red Hat Linux Reference Guide.
Potete anche utilizzare un gruppo di comandi per gestire i moduli del kernel se il pacchetto modutils é installato. Questi comandi sono utili se volete provare diversi moduli o se desiderate verificare che un determinato modulo sia stato caricato correttamente.
Il comando /sbin/lsmod visualizza un elenco dei moduli attualmente caricati. Per esempio:
Module Size Used by Not tainted iptable_filter 2412 0 (autoclean) (unused) ip_tables 15864 1 [iptable_filter] nfs 84632 1 (autoclean) lockd 59536 1 (autoclean) [nfs] sunrpc 87452 1 (autoclean) [nfs lockd] soundcore 7044 0 (autoclean) ide-cd 35836 0 (autoclean) cdrom 34144 0 (autoclean) [ide-cd] parport_pc 19204 1 (autoclean) lp 9188 0 (autoclean) parport 39072 1 (autoclean) [parport_pc lp] autofs 13692 0 (autoclean) (unused) e100 62148 1 microcode 5184 0 (autoclean) keybdev 2976 0 (unused) mousedev 5656 1 hid 22308 0 (unused) input 6208 0 [keybdev mousedev hid] usb-uhci 27468 0 (unused) usbcore 82752 1 [hid usb-uhci] ext3 91464 2 jbd 56336 2 [ext3] |
Per ogni riga, la prima colonna é il nome del modulo, la seconda colonna é la misura del modulo, e la terza colonna rappresenta il conteggio dell'utilizzo.
L'informazione dopo il conteggio dell'utilizzo varia di poco a seconda del modulo. Se (unused) é elencato sulla riga del modulo, lo stesso modulo correntemente non é stato usato. Se (autoclean) é sulla riga per il modulo, lo stesso puó essere cancellato automaticamente dal comando rmmod -a. Quando questo comando viene eseguito, qualsiasi modello che é stato etichettato "tagged" con autoclean, e che non é stato usato dall'ultima azione di autoclean, viene scaricato. Red Hat Linux non effettua questa azione per default.
Se il nome di un modulo é elencato alla fine della riga tra parentesi, tale modulo dipende dal modulo elencato nella prima colonna della riga. Per esempio, nella riga
usbcore 82752 1 [hid usb-uhci] |
i moduli del kernel hid e usb-uhci dipendono dal modulo usbcore.
L'output /sbin/lsmod é lo stesso output visualizzando /proc/modules.
Per caricare un modulo del kernel, potete utilizzare il comando /sbin/modprobe seguito dal nome del modulo. Per default, modprobe cerca di caricare il modulo dalle sottodirectory /lib/modules/<kernel-version>/kernel/drivers. Esiste una sottodirectory per ciascun tipo di modulo (per esempio, la sottodirectory net per i driver dell'interfaccia di rete. Alcuni moduli del kernel hanno delle dipendenze — per poterli caricare, occorre averne prima caricati degli altri. Per ovviare a questo problema, potete caricare le dipendenze del modulo desiderato e poi il modulo stesso, oppure potete utilizzare il comando /sbin/modprobe seguito dal nome del modulo per caricarlo insieme alle sue dipendenze.
Per esempio, il comando
/sbin/modprobe hid |
carica ogni dipendenza del modulo e anche il modulo hid.
Per far comparire sulla schermata tutti i comandi come /sbin/modprobe, usare l'opzione -v. Per esempio:
/sbin/modprobe -v hid |
Viene visualizzato un output simile al seguente:
/sbin/insmod /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o Using /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o Symbol version prefix 'smp_' |
Esiste anche il comando /sbin/insmod per caricare i moduli del kernel; tuttavia, non risolve le dipendenze. É consigliato usare il comando /sbin/modprobe.
Per rimuovere dalla memoria un modulo del kernel, usate il comando /sbin/rmmod seguito dal nome del modulo. L'utility rmmod rimuoverà soltanto i moduli non utilizzati e non necessari per altri moduli in uso.
Per esempio, il comando
/sbin/rmmod hid |
rimuove il modulo del kernel hid.
Un'altra importante utility per i moduli del kernel è modinfo. Potete usare il comando /sbin/modinfo per visualizzare informazioni relative a un modulo del kernel. La sintassi generale è:
/sbin/modinfo [options] <module> |
Tra le opzioni è incluso il comando -d, che visualizza una breve descrizione del modulo, e il comando -p che fornisce un elenco dei parametri supportati dal modulo. Per un elenco completo delle opzioni, consultate la pagina man di modinfo (man modinfo).