IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Compiler module avec plusieurs fichiers


Sujet :

Linux

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 156
    Points : 76
    Points
    76
    Par défaut Compiler module avec plusieurs fichiers
    Bonjour,

    Je dois écrire un module noyau (2.6) composé de 3 fichiers :
    - ex.c qui contient les fonctions init_module et cleanup_module ;
    - sched.c qui contient des fonctions appelées dans ex.c ;
    - tasks.c qui contient des fonctions appelées par les 2 autres fichiers.

    Mon problème est que je ne sais pas comment créer un seul module à partir de ces fichiers...J'ai essayé d'ajouter cette ligne dans le makefile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ex-objs := sched.o tasks.o
    Ca compile, mais lors de l'insertion du module (insmod ex.ko) rien ne semble s'exécuter ! La solution que j'utilise pour le moment est d'inclure directement les .c dans les autres fichiers, mais c'est pas terrible (mais ça fonctionne)

    Quelqu'un saurait-il comment faire ? Merci...

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par j0o0 Voir le message
    Bonjour,

    Je dois écrire un module noyau (2.6) composé de 3 fichiers :
    - ex.c qui contient les fonctions init_module et cleanup_module ;
    - sched.c qui contient des fonctions appelées dans ex.c ;
    - tasks.c qui contient des fonctions appelées par les 2 autres fichiers.

    Mon problème est que je ne sais pas comment créer un seul module à partir de ces fichiers...J'ai essayé d'ajouter cette ligne dans le makefile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ex-objs := sched.o tasks.o
    Ca compile, mais lors de l'insertion du module (insmod ex.ko) rien ne semble s'exécuter ! La solution que j'utilise pour le moment est d'inclure directement les .c dans les autres fichiers, mais c'est pas terrible (mais ça fonctionne)

    Quelqu'un saurait-il comment faire ? Merci...
    Voici un exemple de base de makefile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ex.o: ex.c
        cc -c $<
    sched.o: sched.c
        cc -c $<
    tasks.o: tasks.c
        cc -c $<
    nom_executable: ex.o sched.o tasks.o
        cc $^ -o $@
    Ici http://gl.developpez.com/tutoriel/outil/makefile/ tu trouveras plus de détails
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 156
    Points : 76
    Points
    76
    Par défaut
    Merci pour ta réponse, mais il s'agit d'un module noyau, le processus de compilation n'est donc pas tout-à-fait le même que pour des applications classiques (en tout cas pour le noyau 2.6)...Voici mon Makefile actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    MODNAME         := ex
    OBJS            := sched.o tasks.o
    EXTRA_CFLAGS    := -I /usr/realtime/include
     
    KDIR            := /lib/modules/$(shell uname -r)/build
    PWD             := $(shell pwd)
    obj-m           := $(MODNAME).o
    #$(MODNAME)-objs := $(OBJS)
     
    all:
    	$(MAKE) -C $(KDIR) M=$(PWD) modules
     
    clean:
    	rm -f *.ko *.o *.mod.c *.symvers .*.cmd .*.o.flags
    	rm -rf .tmp_versions
     
    rmtmp:
    	rm -f `find . -name "*~"`
     
    .PHONY: all clean rmtmp
    Comme je l'ai dit cette solution fonctionne uniquement parce que j'inclus directement les .c depuis ex.c...

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par j0o0 Voir le message
    Merci pour ta réponse, mais il s'agit d'un module noyau, le processus de compilation n'est donc pas tout-à-fait le même que pour des applications classiques (en tout cas pour le noyau 2.6)...Voici mon Makefile actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    MODNAME         := ex
    OBJS            := sched.o tasks.o
    EXTRA_CFLAGS    := -I /usr/realtime/include
     
    KDIR            := /lib/modules/$(shell uname -r)/build
    PWD             := $(shell pwd)
    obj-m           := $(MODNAME).o
    #$(MODNAME)-objs := $(OBJS)
     
    all:
    	$(MAKE) -C $(KDIR) M=$(PWD) modules
     
    clean:
    	rm -f *.ko *.o *.mod.c *.symvers .*.cmd .*.o.flags
    	rm -rf .tmp_versions
     
    rmtmp:
    	rm -f `find . -name "*~"`
     
    .PHONY: all clean rmtmp
    Comme je l'ai dit cette solution fonctionne uniquement parce que j'inclus directement les .c depuis ex.c...
    Ben oui mais ton makefile ne décrit absolument pas comment compiler les 3 fichiers.
    En incluant les .c dans ex.c, tu ne compiles qu'un seul source donc tu tombes dans les règles générales de compilation par défaut (règles qui incluent notamment "générer un exe à partir d'un .c") donc ça fonctionne (en fait, ça fonctionnerait même sans makefile car la commande make contient cette règle en interne). Mais si t'écris pas comment compiler les 3 fichiers, make ne saura pas le faire. Tu peux inclure dans ton Makefile la partie de mon Makefile qui va bien par exemple...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Compiler un petit programme avec plusieurs fichiers avec g++
    Par Ourcoulouncoulou dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 16/12/2008, 13h48
  2. [Compiler] Compiler une application avec plusieurs fichiers m
    Par ploukinet dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/05/2007, 17h34
  3. compilation projet ( en plusieur fichier )
    Par damien77 dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 21/02/2007, 23h46
  4. Probleme compilation module avec borland
    Par frtest dans le forum Langage
    Réponses: 1
    Dernier message: 27/01/2006, 12h03
  5. [linux][gcc] Comment travaille t-on avec plusieurs fichiers?
    Par kaygee dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/04/2004, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo