2 votes

Comment puis-je tester que mon pilote est chargé, et ensuite accéder aux fonctions de mon pilote à partir du noyau linux ?

J'ai un pilote qui se compile et se charge dans le noyau linux sans problème. Dans ce pilote, il y a quelques fonctions auxquelles j'aimerais accéder à partir du fichier 'fs/readdir.c' du noyau. De plus, comment puis-je tester si un pilote est chargé ?

J'ai besoin de quelque chose comme ce qui suit.

if(myDriver is loaded){
    myDriver.functionCall();
}

Tous les exemples que j'ai trouvés sur l'internet le font à partir d'applications de l'espace utilisateur.

2voto

Dipstick Points 4869

L'autre possibilité est d'utiliser EXPORT_SYMBOL(functionCall); dans votre module, ce qui fera apparaître votre fonction dans la table des symboles du noyau. Vous pouvez alors utiliser find_symbol("functionCall", blah, blah) pour vérifier si le symbole existe et pour trouver sa valeur/son emplacement de manière dynamique.

Voir linux/kernel/module.c et module.h

1voto

Nikolai N Fetissov Points 52093

fs/readdir.c ne serait pas lié si le functionCall n'est pas encore dans le noyau. Vous ne pouvez le faire que par indirection. Mettre en place des ops dans le code principal du noyau, l'intégrer à des fonctions factices, ou simplement l'intégrer à des fonctions de base. NULL pour indiquer au reste du noyau que votre pilote n'est pas encore chargé. Dans la routine d'initialisation du pilote, définissez les pointeurs de fonction dans cette structure pour les fonctions de votre module (réinitialisés aux valeurs par défaut dans de-init). La structure aura besoin d'une certaine forme de protection contre la course, donc vous finirez probablement par avoir un sémaphore comme l'un de ses membres. Ceci peut être étendu à une structure par dispositif, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X