LKMPG: Ciao Mondo: differenze tra le versioni

Riga 488: Riga 488:


==Creare moduli per kernel precompilati==
==Creare moduli per kernel precompilati==
Ovviamente, raccomandiamo fortemente di ricompilare il tuo kernel in modo da abilitare un certo numero di caratteristiche di debugging utili, come MODULE_FORCE_UNLOAD (forzare l'unload di moduli): quando questa opzione è abilitata, puoi forzare il kernel a scaricare un modulo, anche quando crede (il kernel, n.r.d.) che non è sicuro, tramite il comando '''rmmod -f module'''. Questa opzione ti può salvare tanto tempo ed un certo numero di riavvii durante lo sviluppo di un modulo.
Tuttavia, ci sono alcuni casi in cui si voglia caricare un modulo in un kernel precompilato in esecuzione, come per esempio quelli forniti nelle comuni distribuzioni Linux, o in un kernel compilato tempo fa. In alcune circostanze potresti avere la necessità di compilare ed inserire un modulo in un kernel in esecuzione che non hai il permesso di ricompilare, o su una macchina che preferiresti non riavviare. Se non riesci a pensare ad un caso che ti costringerà ad usare moduli per un kernel precompilato, potresti voler saltare questa sezione e trattare il resto di questo capitolo come una grande nota a pie' di pagina.
Ora, se hai appena installato un kernel da sorgente, usalo per compilare i tuoi moduli e prova ad inserirli nel kernel, in molti casi potresti ottenere un errore come il seguente:
<pre>
insmod: error inserting 'poet_atkm.ko': -1 Invalid module format
</pre>
Informazioni meno criptiche sono loggate su /var/log/messages:
<pre>
Jun  4 22:07:54 localhost kernel: poet_atkm: version magic '2.6.5-1.358custom 686
REGPARM 4KSTACKS gcc-3.3' should be '2.6.5-1.358 686 REGPARM 4KSTACKS gcc-3.3'
</pre>
In altre parole, il kernel si rifiuta di accettare il tuo modulo per via delle versioni (più precisamente, magics version) che non corrispondono. Per inciso, version magics sono conservate nell'oggetto del modulo come stringa statica che inizia per vermagic:. Le informazioni di versione sono inserite nel tuo modulo quando è linkato al file <code>init/vermagic.o</code>. Per dare uno sguardo alle version magics ed altre stringhe conservate in un modulo, dare il comando '''modinfo module.ko''':
<pre>
[root@pcsenonsrv 02-HelloWorld]# modinfo hello-4.ko
license:        GPL
author:        Peter Jay Salzman <p@dirac.org>
description:    A sample driver
vermagic:      2.6.5-1.358 686 REGPARM 4KSTACKS gcc-3.3
depends:       
</pre>
43

contributi