Il kernel di GNU/Linux è generalmente composto da un file vmlinuz o simile, e, come accennato nella sez. 7.1.1, le funzionalità non di base possono essere “modularizzate”, ovvero il relativo codice può essere inserito in file diversi dal kernel stesso, detti LKM (Loadable Kernel Module) o moduli.14
Un LKM è un file in formato binario ELF (Executable and Linkable Format) che ha generalmente estensione ‘.ko’ o ‘.o’ ed è memorizzato nel sottoalbero della directory /lib/modules/kernel_version (dove kernel_version indica appunto la versione del kernel per la quale il modulo è stato realizzato)15 ed è possibile caricarlo in memoria quando si presenta la necessità di utilizzare le sue funzionalità.
|
L’estensione .o è utilizzata per i file oggetto (object file), che sono il prodotto della fase di compilazione e servono per la fase di linking (v. cap. 15). A partire dalla versione 2.6 del kernel Linux i LKM hanno estensione .ko (kernel object file) in modo da poterli distinguere più agevolmente dagli altri file oggetto, che rimangono con estensione .o. |
È consigliabile l’utilizzo dei LKM rispetto a modificare direttamente il codice del kernel, in quanto presenta i seguenti vantaggi
# make modules
come illustrato nella sez. 7.1.2, che produce un insieme di file *.ko o *.o (i LKM). Il
comando
# make modules_install
copia i file binari ottenuti al passo precedente (i LKM), nell’opportuna directory all’interno
di /lib/modules/kernel_version.
Altri LKM, non distribuiti con il kernel di GNU/Linux, possono avere una propria procedura di creazione.
Alcuni LKM possono utilizzare dati che risentono della “storia” da un caricamento all’altro del LKM considerato. Tali informazioni, dette dati persistenti (persistent data), vengono salvate su un file quando lo specifico LKM viene scaricato dalla memoria e rilette dal file stesso quando il LKM viene nuovamente caricato in memoria.
I moduli sono gestiti per mezzo dei comandi che fanno parte del pacchetto module-init-tools16 descritti di seguito.
[da completare ...]