Le jeudi 15 novembre 2012, Frédéric a écrit :
> En fait, dans le cas openbricks, l'appel au symbole en question (une
> fonction) dans le module A ne se fait pas directement, mais est un
> paramètre lors de l'appel à une autre fonction, alors que dans le cas de
> ma machine, l'appel était direct.
>
> Est-ce que ça peut venir de ça ? Dans ce cas, comment dire explicitement à
> linux de mettre ce symbole en dépendance ?
Bon, il semblerait que ce soit fait exprès. La fonction que me pose problème est appelée via
dvb_attach(), qui est une macro, elle-même définie comme suit :
#ifdef CONFIG_MEDIA_ATTACH
#define dvb_attach(FUNCTION, ARGS...) ({ \
void *__r = NULL; \
typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
if (__a) { \
__r = (void *) __a(ARGS); \
if (__r == NULL) \
symbol_put(FUNCTION); \
} else { \
printk(KERN_ERR "DVB: Unable to find symbol "#FUNCTION"()\n"); \
} \
__r; \
})
#else
#define dvb_attach(FUNCTION, ARGS...) ({ \
FUNCTION(ARGS); \
})
J'ai lu un truc qui dit que c'est fait pour optimiser la mémoire, entre autre.
Maintenant, reste à comprendre pourquoi ça ne marche pas. Ça doit se passer dans l'appel à
symbol_request()...
--
Frédéric