Le mercredi 26 janvier, olivier.eribon@??? a écrit :
> Je recherche un moyen de faire appel a une fonction presente dans un module
> maison (non realise pour etre integre statiquement au kernel) a partir du
> kernel.
>
> Comment faire pour que le linker ne s'arrete pas sur
> kernel/kernel.o(__ksymtab+0xc88): undefined reference to xxxxxx
> et que lors du chargement du module la liaison a cette fonction soit resolue.
J'ai jamais essayé la programmation noyau, mais voici toujours une idée,
souvenir d'une ancienne lecture du module howto :
Dans ton noyau tu définis une fonction bidon de même prototype, et un
pointeur vers cette fonction. Par exemple, si tu prends et tu rends un
int :
int dummy_foobar(int arg)
{
printk("foobar() called but foobar module not loaded\n");
return 0;
}
int (*foobar)(int) = dummy_foobar;
Ensuite tu l'utilises via ce pointeur :
...
foo = foobar(bar);
...
Dans ton module tu définis la vraie fonction :
int real_foobar(int arg)
{
...
}
Dans l'initialisation du module tu changes le pointeur :
foobar = real_foobar;
et dans le cleanup tu remets l'ancien :
foobar = dummy_foobar;
Tiens-nous au courant !
Edgar.
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org