Problem mit insmod



  • 1 : Fehlermeldung bei insmod :
    insmod error inserting 'mytestmodule.o': -1 Invalid module format

    2 : Mit modprobe geht es immer noch nicht(oder ich peil es einfach nicht)
    3 : Wenn ich es mit modprobe mache , dann bekomme ich die Fehlermeldung:
    FATAL: Module mytestmodule.o not found.

    3 : Nein , ich habe das Modul nicht gestript
    4 : Ich habe es mit gcc -c mytestmodule.c -I/usr/src/linux/include/ compilert

    5 : kann mir jemand die Syntax von modprobe geben? Hab es versucht mit modprobe mytestmodule.o

    ...so vielleicht kann mir ja jetzt jemand helfen...



  • Hi,
    einfach mit modprobe mytestmodule versuchen. (Ohne das .o)

    MfG

    Alexander Sulfrian



  • sieh nochmal im buch/tutorial nach wie man das kompiliert... da fehlt -DMODULE und/oder -D__KERNEL__... weiß nicht mehr genau.



  • ob modprobe oder insmod spielt im übrigen überhaupt keine rolle.
    modprobe sucht nur noch in anderen pfaden und berücksichtigt abhängigkeiten... das willst du vermutlich beides nicht.



  • DrGreenthumb schrieb:

    sieh nochmal im buch/tutorial nach wie man das kompiliert... da fehlt -DMODULE und/oder -D__KERNEL__... weiß nicht mehr genau.

    Bei Kernel-Modulen gehört da beides rein. Sowohl -D__KERNEL__, als auch -DMODULE. 🙂



  • Es will einfach nicht funktionieren!!!!
    Ich will nur ein Modul zum Test schreiben , einfügen , entfernen...nur so zur Übung! Dann will ich mich mit weiterführenden Themen beschäftigen.
    Aber ich scheitere bereits jetzt beim einfügen des Moduls...
    Apropos -DMODULE und -D__KERNEL__: Das weiß ich schon , allerdings kann man die Konstanten auch im sourcecode definieren mittels #define MODULE und
    #define __KERNEL__. Das hab ich auch im sourcecode gemacht.
    (ohne diese Konstanten kann man den sourcecode ja gar nicht kompilieren... hab's mal ohne versucht und hab eine laaaaaaaaaange liste von errors bekommen)

    Das Problem ist bloß: Es lässt sich ja problemlos kompilieren aber es lässt sich nicht einfügen..die Errors hab ich oben schon erwähnt...

    In der manpage von modprobe steht das modprobe das modul in
    /lib/modules/'uname -r' sucht...
    in meinem Fall /lib/modules/2.6.8-24-default.
    Hab das Modul auch nach da kopiert aber es geht trotzdem nicht.

    Liegt es vielleicht an der Kernelversion? Oder an der version von gcc?
    hab gcc 3.3.4 (und ich nutze SUSE LINUX 9.2)

    #define MODULE
    #define __KERNEL__
    
    #include <linux/kernel.h>
    #include <linux/module.h>
    
    MODULE_AUTHOR("alex89ru");
    MODULE_LICENSE("GPL");
    
    int	init_module(void)
    {
    }
    
    void	cleanup_module(void)
    {
    }
    

    ...ich weiß,dieses Modul ist WAAAAAAAAAAAAAAAHNSINNIG sinnvoll , aber ich mach es nur zur übung.



  • In der manpage von modprobe steht irgendwas von /etc/modprobe.conf und /etc/modprobe.d...das versteh ich allerdings nicht...naja vielleicht hat es ja damit irgendwas zu zun??!?!?!? Naja m wie schon gesagt: Bin halt Anfänger in Sachen Modulprogrammierung... ⚠ ⚠ ⚠ 😡 ⚠ ⚠ ⚠



  • Wenn Du sonst nix machst, dann kann das ja nicht gehen. 🙂

    Nimm einfach das Makefile von hier, das sollte klappen; Du hast vermutlich ein 2.6er-Linux und willst daher ein .ko und kein .o. 😉

    obj-m += mytestmodule.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
    

    http://sdn.vlsm.org/share/LDP/lkmpg/2.6/html/x181.html



  • Jap , (wie bereits gesagt) hab ich einen 2.6 Kernel.
    Mit Makefiles kenn ich mich _nicht_ aus
    ===>Hab den Code GENAU so in eine Makefile kopiert
    Dann make (in der Konsole eingegeben)
    Dann bekomme ich die Meldung:
    make: Für das Ziel >>all<< ist nichts zu tun

    ps: Wie erzeuge ich *.ko files statt *.o (also ohne irgendwelche Makefiles)...
    Parameter an gcc???? oder andere tools?????? 😕 😕 😕 😕

    NOCHMAL:
    Kernel version: 2.6.8
    gcc version: 3.3.4

    Hat jemand Erfahrung mit Kernelmodulprogrammierung und kann mir weiterhelfen?????????



  • alex89ru schrieb:

    ===>Hab den Code GENAU so in eine Makefile kopiert
    Dann make (in der Konsole eingegeben)
    Dann bekomme ich die Meldung:
    make: Für das Ziel >>all<< ist nichts zu tun

    Dann hast Du etwas falsch gemacht.
    Schau mal, extra für Dich nochmal ausprobiert:

    ~/sandbox2 % ls
    hello-1.c  Makefile
    ~/sandbox2 % cat hello-1.c 
    /*  
     *   *  hello-1.c - The simplest kernel module.
     *    */
    #include <linux/module.h>       /* Needed by all modules */
    #include <linux/kernel.h>       /* Needed for KERN_INFO */
    
    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");
    }
    
    ~/sandbox2 % cat 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
    
    ~/sandbox2 % make
    make -C /lib/modules/2.6.12.5/build M=/home/sebastian/sandbox2 modules
    make[1]: Entering directory `/usr/src/linux-2.6.12.5'
      CC [M]  /home/sebastian/sandbox2/hello-1.o
      Building modules, stage 2.
      MODPOST
      CC      /home/sebastian/sandbox2/hello-1.mod.o
      LD [M]  /home/sebastian/sandbox2/hello-1.ko
    make[1]: Leaving directory `/usr/src/linux-2.6.12.5'
    ~/sandbox2 % su
    Password: 
    method /home/sebastian/sandbox2 # insmod hello-1.ko 
    method /home/sebastian/sandbox2 # lsmod | grep hello  
    hello_1                  960  0 
    method /home/sebastian/sandbox2 # rmmod hello_1 
    method /home/sebastian/sandbox2 # 
    ~/sandbox2 %
    

    Geht hier also tadellos, Dein Makefile muss falsch sein.

    ps: Wie erzeuge ich *.ko files statt *.o (also ohne irgendwelche Makefiles)...
    Parameter an gcc???? oder andere tools?????? 😕 😕 😕 😕

    Sowas macht man nicht ohne Makefiles, wenn man es auch viel einfacher mit Makefiles machen kann. Korrigiere Dein Makefile, dann hast Du auch keine Probleme mehr.
    kbuild ist gut(tm), also lies /usr/src/linux/linux/Documentation/kbuild/modules.txt und verwende es!

    NOCHMAL:
    Kernel version: 2.6.8
    gcc version: 3.3.4

    Hat jemand Erfahrung mit Kernelmodulprogrammierung und kann mir weiterhelfen?????????

    Ich hätte Dir weitergeholfen, wenn Du nicht irgendwas mit Deinen Makefiles verhunzt hättest; das hat nichts mit Programmierung an sich zu tun, sondern damit, dass Du Probleme mit deiner Build-Environment hast.



  • im Makefile müssen echte Tabs drin sein (dort wo die einrückungen sind), die gehen gerne mal bei copy&paste verloren.



  • DrGreenthumb schrieb:

    im Makefile müssen echte Tabs drin sein (dort wo die einrückungen sind), die gehen gerne mal bei copy&paste verloren.

    Jup, ich habe die Fehlermeldung nur überflogen und nicht erkannt, dass das einfach die deutsche Version von "Nothing to be done for..." ist. 🙂



  • Ich dreh gleich durch!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Ich will endlich dieses scheiss modul reinkriegen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Aber der scheiss funkt net!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Danke an nman , aber ich versteh einfach nicht wieso das bei mir net geht?!?!?!?!
    😡 😡 😡
    Wie schon gesagt,bin Anfänger in Sachen Modulproggen und von Makefiles hab ich ÜBERHAUPT keine Ahnung...
    so: Hat jemand eine Idiotensichere Anleitung für mich?????
    Langsam komm ich mir blöd vor 😡



  • Beruhig Dich erstmal, die ganzen bösen Gesichter und vielen Ausrufezeichen helfen auch niemandem.

    Wie DrGreenthumb schon sagte, müssen die Zeilen im Makefile, in denen "make -C ..." steht, mit richtigen Tabs eingerückt werden; die Leerzeichen, die das Forum verwendet, bringen nichts.

    Zusammenfassung: Du löscht Du die Leerzeichen vor diesen zwei Zeilen und drückst dann je einmal beherzt auf Deine Tabulator-Taste. Viel Erfolg!



  • Jetzt hat es endlich funktioniert!! 🙂 🙂 🙂
    Keine Probleme mehr mit Makefiles und keine Probleme mit insmod...und keine Probleme mit wasweißichnochwas...
    Dake an alle...
    👍 🙂 🙂 🙂


Anmelden zum Antworten