Auteur: Frédéric Date: À: guilde Sujet: Inter-dépendance de symboles dans des modules noyau
Bonjour,
Toujours dans le cadre d'un portage de patch d'un noyau à l'autre, j'ai un souci de symbole non
trouvé lors du chargement d'un module (que j'appelle A).
Le symbole en question est implémenté dans un autre module (B). Ce module B fait bien un
EXPORT_SYMBOL, et la déclaration est bien du type 'extern'.
Mais une fois généré, le module A ne dépend pas du module B, comme il devrait. Et du coup, le
module B n'est pas chargé, et le symbole n'est pas trouvé.
Tout ça est fait dans la distro openbricks, sur laquelle est basée geexbox (je crois que
openbricks a été créé pour geexbox, d'ailleurs). J'avais fait un test sur ma machine de bureau,
et je n'avais pas ce souci. Mais il y a une différence entre les 2 cas, car le patch n'est pas
identique, vu que ce sont des noyaux différents (3.4.4 pour openbricks, 3.2 pour ma machine).
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 ?
J'ai bien essayé de modifier manuellement le fichier modules.dep, mais sans succès ; dans ce
cas, le module B se charge bien lorsque je charge le module A, mais le symbole n'est pas trouvé
(puisque le module A ne sait même pas où chercher).
Pour compléter, le EXPORT_SYMBOL du module B, lui, fonctionne bien, car on voit bien le symbole
dans le fichier Module.symvers. C'est vraiment le problème du module A qui ne se lit pas
dessus...
Voili. C'est un peu pointu, je découvre tout ça, donc si quelqu'un a une idée, je suis preneur.