Re: Inter-dépendance de symboles dans des modules noyau

Top Page

Reply to this message
Author: Frédéric
Date:  
To: guilde
Subject: Re: Inter-dépendance de symboles dans des modules noyau
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