[Linux 2.6] Compilation de module avec sous dossiers

Compilation de module avec sous dossiers [Linux 2.6] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 10-05-2005 à 10:52:47    

Bonjour à tous. je suis entrain de porter un driver pour caméras usb 2.4 vers le kernel 2.6.
J'ai donc pu constater que la compilation de modules est différentes pour le kernel 2.6.
 
Voici l'arborescence de mes fichiers :
/chemin/vers/ma/racine/monModule.c
/chemin/vers/ma/racine/Makefile
 
Pour l'instant, j'ai donc ajouté dans mon makefile :
 

Code :
  1. obj-m := monModule.o
  2. KDIR  := /usr/src/linux/
  3. PWD   := $(shell pwd)
  4. all : monModule.o
  5. monModule.o : monModule.c
  6. gcc $(CFLAGS) -I. -c monModule.c -o monModule.o
  7. mod :
  8. make  -C $(KDIR) M=$(PWD) modules


 
Je lance donc : "make all". Cela compile donc mon fichier monModule.c et crée l'objet monModule.o et le fichier monModule.mod.c.
Je lance ensuite : "make mod". Cela me crée bien le fichier monModule.ko.
 
Je voudrais donc savoir dans un premier temps, si ma démarche est la bonne. En effet, je me demande si il ne suffit pas de lancer uniquement "make mod", puisque cela rappelle forcément le "make all" donc la compilation du fichier monModule.c.
 
De plus, je souhaiterai pouvoir organiser mes fichier différemment, afin d'avoir deux dossiers, un contenant les .o et .ko et un contenant le .c. Soit :
 
/chemin/vers/ma/racine/c/monModule.c
/chemin/vers/ma/racine/o/monModule.o
/chemin/vers/ma/racine/o/monModule.ko
/chemin/vers/ma/racine/Makefile
 
 
J'ai donc déplacé mes fichiers dans les bons dossiers, puis transformé mon makefile en :

Code :
  1. obj-m := o/monModule.o
  2. monModule-objs= c/monModule.c
  3. KDIR  := /usr/src/linux/
  4. PWD   := $(shell pwd)
  5. EXTRA_CFLAGS += -I$(obj)/c/
  6. all : monModule.o
  7. monModule.o : c/monModule.c
  8. gcc $(CFLAGS) -I. -c c/monModule.c -o o/monModule.o
  9. mod :
  10. make  -C $(KDIR)  $(EXTRA_CFLAGS) M=$(PWD) modules


 
La commande "make all" compile bien mon fichier c/monModule.c ... et crée bien le fichier o/monModule.o, mais pas de c/monModule.mod.c :(
De plus, lors du "make mod", jobtiens alors l'erreur suivante :

make  -C /usr/src/linux/ -I/c/ M=/chemin/vers/ma/racine modules
make[1]: Entering directory `/usr/src/linux-2.6.8.1-12mdk'
make[2]: *** Pas de règle pour fabriquer la cible « /chemin/vers/ma/racine/o/uc_tm.c », nécessaire pour « /chemin/vers/ma/racine/o/uc_tm.o ». Arrêt.
make[1]: *** [_module_/chemin/vers/ma/racine] Erreur 2
make[1]: Leaving directory `/usr/src/linux-2.6.8.1-12mdk'
make: *** [mod] Erreur 2

 
Voila voila, donc je suis un peu bloqué, j'espère que certains d'entre vous sauront m'aider. Merci d'avance, d'avoir pris le temps de lire tout ca !


Message édité par allawos le 10-05-2005 à 10:59:18
Reply

Marsh Posté le 10-05-2005 à 10:52:47   

Reply

Marsh Posté le 12-05-2005 à 18:56:58    

Un petit Up au cas ou ... merci d'avance !

Reply

Marsh Posté le 23-08-2005 à 18:23:00    

Je suis pas sur que ça soit possible.
En tout cas tonModule-objs c'est plutot quand tu link plusieur  .o dans un seul module.
 
va voir http://lwn.net/Articles/21823/ pour avoir un Makefile plus "2.6"  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed