Questa sezione fornisce indicazioni specifiche riguardo al supporto dei moduli caricabili del kernel e al suo utilizzo con la SCSI.
I moduli caricabili sono un mezzo tramite il quale l'utente o l'amministratore del sistema può caricare file nella memoria del kernel in modo tale da espandere le capacità del kernel stesso. I moduli sono usati comunemente per i driver per supportare l'hardware, o per caricare filesystem.
I moduli per SCSI presentano svariati vantaggi. Uno consiste nel fatto che un amministratore di sistema che cerchi di mantenere un alto numero di macchine può usare una sola immagine kernel per tutte le macchine, e poi caricare moduli di kernel per supportare hardware che è presente solo su alcune.
È inoltre possibile per coloro che vogliono costruire una distribuzione usare uno script sul floppy di boot per chiedere all'utente quali moduli debbano essere caricati. Questo consente di risparmiare della memoria che altrimenti sarebbe sprecata per dei driver inutilizzati, e diminuisce inoltre la possibilità che la ricerca di una scheda inesistente crei problemi ad una qualche altra scheda nel sistema.
I moduli funzionano bene anche sui laptop, che hanno generalmente meno memoria delle macchine desktop, e la gente tende a tenere più piccola possibile l'immagine kernel e a caricare i moduli quando sono effettivamente necessari. Inoltre i moduli rendono più semplice il supporto delle schede PCMCIA SCSI sui laptop, visto che si può caricare e scaricare il driver quando la scheda viene inserita e rimossa. [nota: attualmente i driver qlogic e 152x supportano PCMCIA].
Infine, c'è il vantaggio che gli sviluppatori del kernel riescono più facilmente a correggere e a testare i loro driver, poiché testare un nuovo driver non richiede che si compia un reboot della macchina (sempre che, ovviamente, la macchina non sia andata in crash a causa di un qualche bug presente nel driver).
Nonostante il fatto che i moduli siano molto belli, c'è una limitazione. Se la partizione di root è su un dispositivo SCSI, non potrete utilizzare versioni modularizzate del codice SCSI necessario per accedere al disco. Questo è dovuto al fatto che il sistema deve montare la partizione di root prima di poter caricare dei moduli dal disco. Ci sono persone che pensano ai modi per modificare il loader e il kernel in modo che il kernel sia in grado di caricare da sé i moduli prima di tentare di caricare il filesystem root, così che un giorno anche questa limitazione sarà superata.
Nella serie 1.2.N del kernel, c'è un supporto parziale per moduli kernel SCSI. Mentre nessuno tra i driver di alto livello (come dischi, nastri, ecc.) può essere utilizzato come modulo, molti dei driver di basso livello (ad esempio 1542, 1522) possono essere caricati e scaricati all'occorrenza. Ogni volta che caricate un driver di basso livello, il driver per prima cosa cerca delle schede che è in grado di controllare. Poi viene effettuata una scansione del bus per ogni scheda trovata, e poi vengono costruite le strutture dati interne in modo tale da rendere possibile l'uso effettivo dei dispositivi collegati alle schede che il driver sta controllando.
Quando avete terminato con un driver di basso livello lo potete scaricare. Dovete tenere a mente che i contatori d'uso sono mantenuti basandosi su filesystem caricati, file aperti, ecc, così se state ancora utilizzando un dispositivo controllato dal driver, l'utility rmmod vi dirà che il dispositivo è occupato, e si rifiuterà di scaricare il driver. Quando il driver è scaricato, tutte le strutture di dati associate risultano anch'esse libere, così che lo stato del sistema dovrebbe tornare a ciò che era prima che il modulo venisse caricato. Questo significa che il driver può essere nuovamente montato in un momento successivo, se necessario.
Nella serie 1.3 dei kernel, il codice SCSI è completamente modularizzato. Questo significa che potete iniziare con un kernel che non possiede alcun supporto SCSI, cominciare a caricare i moduli e finire per avere un supporto completo.
Se lo desiderate potete compilare alcune parti del codice SCSI nel kernel e poi caricare altre parti successivamente: quanto viene caricato durante l'esecuzione e quanto è interno al kernel dipende solo da voi.
Se state incominciando con un kernel che non ha alcun tipo di supporto SCSI, allora la prima cosa da fare è di caricare il core SCSI nel kernel - questo è in un modulo chiamato ``scsi_mod''). Non sarete in grado di caricare nessun altro modulo SCSI finché non lo avrete caricato nella memoria kernel. Poiché non contiene alcun driver di basso livello, l'atto di caricare questo modulo non provocherà una ricerca tra i bus, né attiverà alcun driver per dischi SCSI, nastri ecc. Se avete risposto 'Y' alla domanda CONFIG_SCSI quando avete compilato il kernel, non avrete bisogno di caricare questo modulo.
A questo punto potete aggiungere moduli più o meno in qualsiasi ordine per ottenere le funzionalità desiderate. Vengono usati contatori di uso per prevenire lo scaricamento di qualsiasi componente che potrebbe ancora essere in funzione, e riceverete un messaggio da rmmod se un modulo è ancora occupato.
I driver di alto livello si trovano in moduli di nome ``sd_mod'', ``sr_mod'', ``st'' e ``sg'' per il supporto rispettivamente di dischi, cdrom, nastri e dispositivi SCSI generici. Quando caricate un driver di alto livello viene esaminata la lista dei dispositivi collegati per trovare quelli che il driver può controllare, e questi ultimi vengono automaticamente attivati.
L'uso dei moduli con i driver di basso livello è stato descritto nella sezione Il supporto dei moduli nel kernel 1.2.N. Quando viene caricato un driver di basso livello viene eseguita una scansione del bus e ogni dispositivo viene esaminato da ciascuno dei driver di alto livello per vedere se si tratta di qualcosa che possono controllare: ogni cosa che viene riconosciuta viene automaticamente collegata ed attivata.