-
driver peripherique
j'ai lus le cours programmer des drivers linux en C mais j'ai pas bien compris le makefile utilisée.
MAkefile :
obj-m += module.o
default:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
mais j'ai aussi plusieur questions:
1- pouvais vous m'expliquer un peu ce makefile?
2- je n'ai pas aussi vraiment compris comment se fesait la gestion des interruptions mais aussi comment communique les processus du l'espace utilisateur avec le driver?
quelles sont les differentes methodes leurs avantages et leur incoveniant?
merci a vous.
-
Bonjour,
Pour rappel il s'agit d'un makefile de noyau 2.6
C'est vrai que le cours que tu as lu ne donne pas d'explication pour le Makefile mais plutôt un petit exemple. C'est le souhait de l'auteur mais il aurait pu ajouter un commentaire avec un lien si l'on souhait approfondir le sujet.
Le mieux c'est de lire la documentation linux disponible dans les sources du noyau, en particulier ce document.
Je ne vais pas donner trop de détail mais l'esprit de la compilation de module est d'appeler le Makefile du noyau (avec l'option -C) en lui précisant qu'il y a un module complémentaire (obj-m) dont les sources sont dans le répertoire répertoire courant (M=$PWD) a générer et qu'il doit construire la cible target/clean
Le makefile du noyau gère pour toi les étapes de création du module avec modutilss,
Gestion d'interruption : Tu inscris au callback sur une interruption, elle sera appelé par le noyau lorsqu'elle se produira.
Communication avec l'espace utilisateur : qu'est que tu n'a pas compris dans le cours, de base tu as les fonctions read/write/iotctl, ensuite suivant le type de driver (ex : tty) tu peux t'enregistrer comme une classe particulière et fournir des fonctions a ce gestionnaire de classe via une structure.
Maintenant la question est : quelle type de driver souhaites-tu implémenter ? A partir de cela tu sauras ce qui te conviens le mieux.
Le mieux serait de lire complètement LDD rel3
Bon courage.
Note : en utilisant $(shell uname -r) tu vas cibler le noyau de ton système, ce qui n'est pas très portable comme solution (surtout pour faire de l'embarqué), il faut mieux fournir le chemin vers le noyau pour lequel tu souhaites compiler.
-
merci beacoup pour ta reponse rapide.j'ai un peu potasser depuis avant hier et j'ai reussi a compiler le module.pour repondre a ta question c le driver d'un "PIC18F2550 de microship",mais pour le moment j'essaye d'adapter le driver d'une souris usb pour noyeau 2.4 trouvé dans un hors serie linux-mag.mais aussi et port irda.il me reste juste une petite question si tu pouvais juste me fournir quelque example pour la getions des interruption sa serai vraiment sympa merci