Re: Appel d'une fonction d'un module a partir du kernel

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: Liste Guilde
Subject: Re: Appel d'une fonction d'un module a partir du kernel
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