Forum Linux.noyau creer son propre module

Posté par  .
Étiquettes : aucune
0
15
nov.
2006
Salut,
Je cherche a créer un module qui ne sera pas compile avec le noyau.
J'ai le bouquin "LINUX Pilotes de périphériques" d'Alessandro rubini & Jonathan Corbet.
J'ai suivi le premier exemple scull.c qui se compile en ligne de commande :
cc -O -DMODULE -D__KERNEL__ -c hello.c

--> Ca fonctionne bien

le second exemple utilise un Makefile ...mais là cela ne fonctionne pas...
quelqu'un pourrait il me donner un exemple reel de Makefile et qui soit indépendant de la compilation du noyau.

Un exemple complet .c + makefile serait le paradis...

Merci.
  • # Tu peux commencer par là

    Posté par  (site web personnel) . Évalué à 1.

    http://ftp.traduc.org/doc-vf/gazette-linux/html/2006/122/lg1(...)

    J'ai plein de ressources chez moi. Je pourrais te les passer ce soir.

    Je ne vois pas ce que tu veux dire par "indépendant de la compilation du noyau" !!! Si tu écrit un module de noyau ... faudra s'attendre un jour où l'autre a subir une dépendance !

    Adhérer à l'April, ça vous tente ?

    • [^] # Re: Tu peux commencer par là

      Posté par  . Évalué à 1.

      Ok, merci je vais lire l'article.

      Et je ne serais pas contre non plus pour d'autres sources.

      Ce que je veux dire par "indépendant de la compilation du noyau" c'est que je ne veux pas à avoir besoin de compiler le noyau pour installer mon module. par contre je suis d'accord qu'il faudra quand même que j'installe le source du noyau.

      pour info le module que je dois écrire doit dans un premier tant tourner sur un noyau 2.4.21

      Steven
      • [^] # Re: Tu peux commencer par là

        Posté par  (site web personnel) . Évalué à 1.

        Je ne suis pas spécialiste, mais méfie toi, entre les versions 2.4 et 2.6, il y a eu l'apparition de kbuild pour construire les noyaux, et les makefile sont carrément différents.

        Ce que je veux dire par "indépendant de la compilation du noyau" c'est que je ne veux pas à avoir besoin de compiler le noyau pour installer mon module. par contre je suis d'accord qu'il faudra quand même que j'installe le source du noyau.


        Heureusement, sinon on n'appelerai pas ca un noyau modulaire !

        Adhérer à l'April, ça vous tente ?

        • [^] # Re: Tu peux commencer par là

          Posté par  . Évalué à 1.

          Oui j'avais vu que le Makefile du kernel 2.4 était différent de celui du 2.6....
          C'est pour ça que je precise bien que je dois faire le module pour le kernel 2.4.
          • [^] # Re: Tu peux commencer par là

            Posté par  . Évalué à 1.

            J'ai pris le Makefile sur le lien que tu m'avais donné.

            1 TARGET := hello
            2 WARN := -W -Wall
            3 INCLUDE := /usr/src/linux-2.4/include
            4 CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} -I${INCLUDE}
            5
            6 all: hello.o
            7
            8 clean:
            9 rm -rf *.o

            evidement les chiffres sont les numeros de lignes....

            je lance : make
            et voici mon code d'erreur :
            Makefile:9 : *** missing separator. Arrêt.

            C'est tu pourquoi?
        • [^] # Re: Tu peux commencer par là

          Posté par  (site web personnel) . Évalué à 0.

          Tiens, voilà un complément :

          http://kernelnewbies.org/KernelHacking : une mine d'info !

          The Linux Kernel Module Programming Guide : http://tldp.org/LDP/lkmpg/2.6/html/index.html

          Sans oublier l'inévitable "make htmldocs" à lancer dans /usr/src/linux (où sont les sources ...) !

          Adhérer à l'April, ça vous tente ?

  • # .

    Posté par  . Évalué à 1.

    La derniere fois que j'ai essayé, ce truc là fonctionnait :




    $ cat Makefile


    MODULE_SRC=$(shell pwd)
    KERNEL_REL=$(shell uname -r)
    KERNEL_PATH=/lib/modules/$(KERNEL_REL)/build
    KERNEL_INSTALL=/lib/modules/$(KERNEL_REL)
    CC=gcc

    all: mymodule

    mymodule:
    make -C $(KERNEL_PATH) SUBDIRS=$(MODULE_SRC) modules

    install:
    mkdir -p $(KERNEL_INSTALL)/misc
    cp lboc.ko $(KERNEL_INSTALL)/misc
    /sbin/depmod -a

    showconf:
    @echo $(KERNEL_PATH)
    @echo $(MODULE_SRC)

    obj-m := lboc.o

    clean:
    rm -rf *.o \
    rm -rf *.ko \
    rm -f lboc.mod.c \
    rm -f Modules.symvers

    mrproper: clean
    rm -rf *~


    Et si tu veux le .c et le .h qui vont avec, va voir :
    http://pastebin.com/824852
    http://pastebin.com/824853

    Ca compile un module qui permet de tracer les ouvertures de fichiers depuis le boot. Ca me servait a generer des listes pour readahead. "chez moi ça marche" mais je garantis rien.
    • [^] # Re: .

      Posté par  . Évalué à 1.

      C'était pour quel noyau?
      Est ce un module chargeable par insmod? ou bien tu as recompilé le noyau avec ton module?
      • [^] # Re: .

        Posté par  . Évalué à 1.

        - c'etait pour un noyau 2.6 d'une mandriva. Mais ca devrait fonctionner avec d'autres noyaux 2.6 normalement

        - oui le module est chargeable par insmod ( logique. c'est pas un module sinon ( il me semble ) )

        - je n'avais pas recompile le noyau. par contre pour compiler le module tu as besoin des sources du noyau dans lequel tu veux inserer le module ( kernel-source pour moi. ou kernel-source-stripped ou l'equivalent pour ta distrib ).


        J'avais prevu de faire un package dkms, mais j'ai eu la flemme vu que c'etait presque un module à usage unique.
        • [^] # Re: .

          Posté par  . Évalué à 1.

          J'avais pas vu les autres reponses : donc pas de bol pour toi, c'est bien un Makefile pour un noyau 2.6, pas pour un 2.4.
          Il me semble avoir vu un Makefile gerant les 2.6 et les 2.4 dans le package dkms-kqemu du plf ( sources trouvables sur le ftp de free ). Si ca peut aider..

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.