• [^] # Re: Help C++ et modules Linux 2.6

    Posté par . En réponse au journal Help C++ et modules Linux 2.6. Évalué à 2.

    J'ai trouvé le problème. Tu as vu juste.

    Le noyau n'a pas à utiliser de flottants. De plus certains cpu n'ont pas d'unité virgule floattant (y en a encore ?).

    kbuild fixe les flags du noyau et il y a :
    -msoft-float : calcule flottant fait par logiciel (d'où les appels à __eqdf2, ...).

    Normalement libgcc doit fournir les fonctions. Comme c'est pour le noyau, il faut que j'utiliser libgcc.a . Mais voilà, ce n'est pas dans libgcc.a . Il faut remarquer que par défaut gcc compile avec -mhard-float .

    En solution temporaire, j'ai ajouté -mhard-float dans les flags de compilation.
    Comme autre solution, je peut aussi compiler gcc/floatlib.c (solution software pour les calcules en virgule flottante) qui est dans les sources gcc et l'ajouter au modules. Le module est dans ce cas plus gros. En fouillant dans gcc, gcc/libgcc-std.ver semble indique que ces fonctions vont être abandonnés (elle se sont pas dans libgcc.a ni dans libgcc_s.so si la version est supérieur à 3.3 (ce qui est mon cas et n'est peut-être pas le cas du développeur bewan)).

    Maintenant le module se charge mais il se plante lamentable. Je vais déjà tester avec gcc/floatlib.c puis faire un audite pour voir si je n'est pas loupé quelques chose depuis toutes les modifications que j'ai (c'est pas grand chose mais j'ai perdu le fil).

    Le driver à un fichier objet proprio et c'est dans ce fichier que ça plante. C'est mal parti :-(