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 :

ecriture d'un driver en C sous linux


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut ecriture d'un driver en C sous linux
    Bonjour,
    Je souhaite realiser un driver en C, sous linux (Debian).
    J'ai suivis le tutoriel concernant l'écriture de driver en C sous linux, mais lorsque je veux obtenir mon fichier .o à l'aide du makefile, je suis perdu.

    Je tape la commande make a partir du répertoire ou se trouve mon fichier .c et makefile, et j'obtiens en réponse :

    make -C /lib/modules/2.6.18-5-686/build M=/home/utilisateur/Desktop/devl modules
    make: *** /lib/modules/2.6.18-5-686/build: Aucun fichier ou répertoire de ce type. Arrêt.
    make: *** [default] Erreur 2

    Faut il que je télécharge autre-chose pour compiler ?

    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Il faut installer la paquet linux-headers correspondant à la version de ton noyau .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    aptitude search linux-headers
    aptitude install linux-headers-2.6.xxxx

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    D'accord, c'est fait.

    J'obtien maintenant cette réponse :

    debian:/home/utilisateur/Desktop/devl# make

    make -C /lib/modules/2.6.18-5-686/build M=/home/utilisateur/Desktop/devl modules
    make[1]: entrant dans le répertoire « /usr/src/linux-headers-2.6.18-5-686 »
    make[2]: *** Pas de règle pour fabriquer la cible « /home/utilisateur/Desktop/de vl/module.c », nécessaire pour « /home/utilisateur/Desktop/devl/module.o ». Arrê t.
    make[1]: *** [_module_/home/utilisateur/Desktop/devl] Erreur 2
    make[1]: quittant le répertoire « /usr/src/linux-headers-2.6.18-5-686 »
    make: *** [default] Erreur 2

    Le fichier Makefile doit bien avoir pour nom "Makefile" ?
    Je ne peux pas utiliser la commande gcc ici ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bon j'ai finalement trouvé, c'était un peu bête.. il fallai que le fichier .c s'appel module..

    J'ai donc suivi le tutoriel (http://broux.developpez.com/articles/c/driver-c-linux/)
    et suis arrivé au niveau de la commande :
    cat mydriver.c > /dev/mydriver

    qui me répond :
    cat: Erreur d'écriture.: Aucun espace disponible sur le périphérique

    Je suis allé vérifier dans /dev , il y a bien un fichier (illisible) "mydriver".

    Savez-vous d'où cela peut-il provenir ?

    Merci

  5. #5
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Comment as-tu implémenté la fonctions write ? Elle retourne toujours 0 ? As-tu regardé ce qui se passait dans les logs ?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Pour ce qui est du module.c, j'ai conservé le même que dans l'exemple. C'est à dire que la fonction write se situe dans la structure fops:
    write : my_write_function

    avec la commande dmseg, je peut voir que le driver se charge et se décharge correctement, mais je ne sois pas de open() ni rien.
    La commande cat mydriver.c > /dev/mydriver recopie le contenu du fichier mydriver.c dans le device mydriver qui est alors lisible comme un fichier texte.

    Si il s'agit de l'envoi de caractères, comment faire pour en récupérer?

    Rectification : j'avai oublié de créer le fichier spécial avec mknod.
    C'est lorsque je fait la commande "cat mydriver.c > /dev/mydriver" qu'il y a
    open()
    write()
    close()
    dans dmesg.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Je souhaiterai maintenant pouvoir lire le contenu de mydriver. Lorsque je compile l'exemple de programme donné (la fin du 2.3) il me sort :

    debian:/home/utilisateur/Desktop/devl# gcc mydriver.c
    mydriver.c: In function ‘main’:
    mydriver.c:8: error: ‘O_RDWR’ undeclared (first use in this function)
    mydriver.c:8: error: (Each undeclared identifier is reported only once
    mydriver.c:8: error: for each function it appears in.)
    mydriver.c:13: warning: incompatible implicit declaration of built-in function ‘exit’

    Je ne sais pas trop ou je peux avoir des infos sur les fontcions open(), exit() et read().

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/10/2011, 17h14
  2. Ecriture en B8000h en mode protégé sous Linux
    Par dark0502 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 31/03/2009, 02h03
  3. Ecriture driver USB sous LINUX ?
    Par dermouche2002 dans le forum Linux
    Réponses: 3
    Dernier message: 07/01/2008, 14h31
  4. Ecriture d'un driver sous NT4 et W2K
    Par lio33 dans le forum MFC
    Réponses: 4
    Dernier message: 30/03/2006, 09h18

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