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 :

programmation modules linux


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 23
    Points : 38
    Points
    38
    Par défaut programmation modules linux
    Bonjour à tous
    je suis un débutant programmeur des modules sur linux
    j'ai essayé ce code hello

    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
    /*1ere Module*/
    #define MODULE
    #include <linux/kernel.h>
    #include <module.h>
     
    int init_module(void)
    {
    	printk("<1>Bonjour tout le monde");
    	return 0;
    }
     
    void cleanup_module(void)
    {
    	printk("<1>Merci");
    }
    le probleme est lorsque j'écrit gcc -c hello.c il me répond par:
    fatal error: module.h: No such file or directory

    je travaille sur UBUNTU 11.10
    la version du noyau est 3.0

    qui peut m'aidez SVP
    et merci

  2. #2
    Membre habitué Avatar de eric-m
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Points : 145
    Points
    145
    Par défaut
    A tout hasard essayez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <linux/module.h>

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Et le main ? C'est indispensable dans un programme C ! Non ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Bonjour,
    Citation Envoyé par troumad Voir le message
    Et le main ? C'est indispensable dans un programme C ! Non ?
    Non pas pour un module kernel , tout comme pour un headers.h classique d'ailleur ;-) .

    Par contre il te faut bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <linux/module.h>
    #include <linux/init.h>
    en "include" , par exemple:
    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
    #define MODULE
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/init.h>
     
    int init_module(void)
    {
    	printk(KERN_INFO "Bonjour tout le monde");
    	return 0;
    }
     
    void cleanup_module(void)
    {
    	printk(KERN_INFO "Merci");
    }
    module_init(init_module);
    module_exit(cleanup_module);
    Cordialement.

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Merci !

    Et tu appelles tes fonctions en dehors de toutes fonctions (genre main) ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Pour ce qui est de l'emploi des fonctions il s'agit ici de LKM (Loadable Kernel Module) , donc afin de mieux comprendre de quoi il en retourne voici 2 liens a explorer:
    l'excellent SoH Wiki ainsi que le Modules_Howto , ce sera bien mieux expliqué et bien plus complexe complet que mon blabla...

    Cordialement.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 23
    Points : 38
    Points
    38
    Par défaut
    j'ai essayé avec #include <linux/module.h>
    mais aussi il me retourne aprés compilationn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     fatal error: linux/module.h: No such file or directory
    mais il fonctionne avec ce Makefile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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
    merci en tous cas

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par troumad Voir le message
    Et tu appelles tes fonctions en dehors de toutes fonctions (genre main) ?
    Un module du noyau Linux est une sorte de bibliothèque partagée qui n'est utilisée que par le noyau. Plus précisément, c'est un partie du noyau déportée dans un fichier à elle. Lorsque tu le charges, il est intégré au corps du noyau et peut éventuellement en être retiré. Ça évite de tout compiler à l'avance dans un même fichier, ça permet de n'utiliser la mémoire que sur demande et ça permet également, le cas échéant, de réinitialiser un périphérique.

    C'est donc le noyau qui appelle les fonctions proposées par le module qui, elles, doivent en revanche respecter une interface spécifique.

    Depuis que ça a été introduit (assez tôt dans le développement de Linux), ça n'a apporté que des avantages ou presque. Le seul inconvénient est qu'il te faut parfois des noyaux spécifiques dès le démarrage du noyau, par exemple ceux qui gèrent les disques, le RAID ou le SCSI. On était donc obligé de les compiler en dur et ils ne pouvaient pas être retirés ou rechargés par la suite. On a donc assez vite associé un fichier-image associé à un ramdisk au démarrage, pour charger les modules vitaux dans les règles de l'art, avant de monter la partition root et d'embrayer dessus.

  9. #9
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Faudrait peut être installer les sources du noyau pour pouvoir compiler ton module?

Discussions similaires

  1. Programmation d'un module - linux/kthread
    Par AmHope dans le forum Linux
    Réponses: 0
    Dernier message: 10/04/2013, 18h59
  2. Faire fonctionner des programmes sous Linux
    Par vviivvii dans le forum Mandriva / Mageia
    Réponses: 14
    Dernier message: 29/08/2006, 19h41
  3. Programmation parallèle - Linux
    Par pilou254 dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 25/06/2006, 05h55
  4. [16F84a] Programmation sous linux
    Par Michaël dans le forum Autres architectures
    Réponses: 2
    Dernier message: 25/02/2006, 12h05
  5. GDB/Recherche EDI - Debugguer un programme sous linux
    Par Rodrigue dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 17/01/2006, 23h35

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