Module noyau linux: les erreurs dans module.h

Résolu
stardz31 Messages postés 20 Statut Membre -  
manelz Messages postés 40 Statut Membre -
Bonjour,
je ss tellement désespérée et je sé plus quoi faire !
je ss étudiante en informatique, et j'ai comme thèse de créer un module noyau pour le NAT d'iptables
sous DEBIAN ETCH avec kernel 2.6.18-6-686

alors j'ai essayé d'abord de faire un petit module "hello world", et là je sé pas pourquoi ça ne se compile pas à cause d'erreurs multiples dans "linux/module.h"
j'ai tout essayé: compilation avec gcc et les options pour modules
un makefile aussi mais rien

SVP aidez-moi c'est trèèèèèèèèèèèèès URGENT !!!!!!!!!!!!!!!

MERCIiiiiiiiiiiii
Configuration: Linux
Konqueror 3.2

6 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    affiche ce que tu as fait si tu veux trouver d'aide ;-)
    0
  2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Génial!

    Voui dis-nous tout: comment tu as compilé (quel est le contenu du makefile et le contenu de ton fichier source. Et l'intégralité des erreurs lors de la compilation.

    Pour une fois que quelqu'un pose une question pour faire un driver Linux, on va pas rater ça ;-)
    0
  3. stardz31 Messages postés 20 Statut Membre
     
    alors pour le moment c un simple hello_world.c :
    ----------------------------
    #include <linux/module.h>
    #include <linux/kernel.h>
    int init_module(void)
    {
    printk(KERN_INFO "Hello world 1.\n");
    /*
    * A non 0 return means init_module failed; module can't be loaded.
    */
    return 0;
    }
    void cleanup_module(void)
    {
    printk(KERN_INFO "Goodbye world 1.\n");
    }
    -------------------------------
    et le makefile :
    ----------------------------------
    obj−m += hello−1.o
    all:
    make −C /lib/modules/$(shell uname −r)/build M=$(PWD) modules
    clean:
    make −C /lib/modules/$(shell uname −r)/build M=$(PWD) clean
    ----------------------------------
    et un autre Makefile:
    --------------------------------
    TARGET := hello-1
    WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
    INCLUDE := -isystem /lib/modules/`uname -r`/build/include
    CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
    CC := gcc-3.0

    ${TARGET}.o: ${TARGET}.c

    .PHONY: clean

    clean:
    rm -rf {TARGET}.o
    ------------------------------
    ce deuxième makefile je l'ai trouvé dans un fichier qui dit qu'il faut avoir gcc-3.0 pour faire -isystem pour les avertissements de module.h

    Et pour mon module noyau c pas un driver mais un Protocol Helper pour le protocole SIP il doit faire une translation d'adresse de destination des paquets SIP traversant le NAT (masquerade pour être précise), et je ss loin de pouvoir le compléter car pour le moment je ne pe compiler aucun module même pas helloworld !!!

    j'ai besoin d'une solution rapidement

    Merci
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    regarde ici pour un simple "Hello world!" (voir chapitre 4)
    http://pficheux.free.fr/articles/lmf/drivers/
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Attntion, je crois que c'est pour un noyau 2.2
      0
    2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Salut,

      d'accord, je n'ai pas fait attention

      En fait, notre amie c'est inspiré ici https://tldp.org/LDP/lkmpg/2.6/html/x121.html#AEN128 , je suppose ;-)
      0
    3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
       
      Ah oui tiens! Hop dans mes bookmarks :-)

      Moi je m'inspire de ça:
      https://lwn.net/Kernel/LDD3/

      Le chapitre 2 a toujours fonctionné chez moi, et je me souviens avoir essayé avec Debian Etch.
      0
    4. stardz31 Messages postés 20 Statut Membre > kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Bonjour
      ça va bien Mr kilian,
      stp j'ai besoin de ton aide si possible le plutot
      Ben,
      sur un PC il y a Linux debian etch installé
      et il y avait avant windows xp,
      d'abord il y a eu un probleme depuis linux windows ne marcher plus
      alors hier on a refait l'installation de windows sans avoir toucher linux
      alors maintenant au démarrage linux n'est pas reconnu il démarre avec windows directement

      Je sais pas quoi faire !!!

      j'ai besoin de mes fichiers linux
      Linux est toujours la mais je sais plus comment y accéder au démarrage

      Si t'a une réponse j'attend avec impatience

      MERCI
      0
    5. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > stardz31 Messages postés 20 Statut Membre
       
      Salut,

      Oui, Windows a écrasé le chargeur de Linux (Grub ou Lilo) et il va falloir le réinstaller, tout en prenant en compte le chargeur de Windows.
      Poste ton problème dans le forum Linux, il y a des gens plus compétents que moi dans ce domaine :-)

      http://www.commentcamarche.net/forum/forum 13 linux unix
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. stardz31 Messages postés 20 Statut Membre
     
    et les erreurs que j'obtiens sont du genre :

    ...
    /usr/include/linux/sched.h:1564: error: dereferencing pointer to incomplete type
    /usr/include/linux/sched.h: Dans la fonction "thaw_process" :
    /usr/include/linux/sched.h:1573: error: dereferencing pointer to incomplete type
    .... bcp d'autres erreurs dans sched.h
    In file included from /usr/include/linuxmodule.h:12,
    from hello.c: 4 :
    /usr/include/linux/stat.h: Hors de toute fonction :
    /usr/include/linux/stat.h:61: error: erreur de syntaxe before "dev_t"
    ... bcp d'erreur dans stat.h aussi

    et de même avec ipc.h, desc.h, module.h

    une fois j'ai même enlevé "include<linux/module.h>" et ça s'est compilé très bien et j'ai eu un fichier .o

    mais il me faut aussi d'après ce que j'ai vu il faut qu'il soit (.ko) car je suis sur 2.6.x

    si il y a une reponse PLEASE !!!
    0
  7. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Tiens voici un Makefile générique tiré du livre "Linux Device Drivers 3ème edition" des edition O'reilly
    ifneq ($(KERNELRELEASE),)
    	obj-m := test.o
    else
    	KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    	PWD := $(shell pwd)
    
    default:
    	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    endif


    Tu remplaces test.o par hello.o si ton fichier s'appelle hello.c
    Dis moi ce que ça donne.

    (Chez moi ça marche bien et le module affiche bien ce qu'il faut dans les logs)

    (interessant ton projet)
    0
    1. stardz31 Messages postés 20 Statut Membre
       
      Merci bcp pour ta reponse,
      j'ai essayé ce makefile et ça donne:

      make -c /lib/modules/2.6.18.66666/build M=/aaa modules
      make[1]: entrant dans le répertoire "/usr/src/linux-source-2.6.18"
      Building modules, stage 2
      MODPOST
      make[1]: quittant le répertoire " /usr/src/linux-source-2.6.18"

      dans mon répertoire /aaa où j'ai fait mon hello.c j'ai trouvé un fichier "Module.symvers" !!!
      est-ce que tu sé c quoi ?

      sachant que 2.6.18.66666 c'est une image du kernel que j'ai faite une fois après la compilation des sources du noyau

      Merci bcp bcp , t trop gentil
      0
    2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > stardz31 Messages postés 20 Statut Membre
       
      Il semble qu'il n'ait rien compilé.
      Tu n'as pas de fichier en .ko?

      Tu as bien mis dans le même repertoire ton Makefile et ton fichier hello.c ?
      Appelle le bien hello.c pour le retrouver sous le nom hello.o dans le Makefile.

      j'ai trouvé un fichier "Module.symvers" !!!

      C'est un fichier qui recence les fonctions que tu veux exporter aux autres modules.
      Quand tu veux exporter une fonction (on va l'appeler "test") que tu as créé dans ton module, tu l'exportes avec cette macro:
      EXPORT_SYMBOL(test);

      Et tu retrouveras sa référence dans Module.symvers, sinon il sera vide. Mais tu n'en a pas besoin pour l'instant.

      Tiens, je t'ai fait une version qui marche bien chez moi:
      http://thesermon.free.fr/arch/hello.tar.bz2
      0
    3. stardz31 Messages postés 20 Statut Membre > kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention  
       
      kilian
      Je sé pas quoi te dire
      t trop génial !!!!!!

      CA MARCHE !!!!!

      je te remercie infiniment

      tu ne sé pas combien ça me fait plaisir

      tu mérite un gros cadeau

      salut, et a+
      0
    4. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > stardz31 Messages postés 20 Statut Membre
       
      Merci, n'hésite pas si tu as d'autres soucis avec la programmation noyau!
      0
    5. manelz Messages postés 40 Statut Membre
       
      salut j'ai le même problème il me demande de compiler un module helloworld j'essaye de suivre ces étapes mais ça marche pas
      please aide moi
      0