Kernel Modul Programmierung - Fehler beim Kompilieren! Brauche mal Hilfe.



  • Guten Tag,

    ich habe von meinem Professor ein Stükchen Programmcode bekommen, da ich mich in ein Thema einarbeiten soll und dabei Module in den Kernel laden soll.

    Ich nutze Ubuntu 9.04 mit Kernel 2.6.28-15-generic

    Es handelt sich um folgenden Code:

    #include <linux/module.h>
    #include <linux/kernel.h>
    
    int init_module ( void )
    {
    	printk ( "<7>" "Hello Kernel !\n" );
    	return 0;
    }
    
    void cleanup_module ( void )
    {
    	printk ( "<7>" "Goodbye Kernel !\n" );
    }
    

    welchen ich mittels:

    gcc -D__KERNEL__ -DMODULE -Wall -O6 -I/usr/src/linux-headers-2.6.28-15/include -c ex01.c -o ex01.o
    

    kompilieren möchte!

    Dabei bekomme ich folgende Fehlermeldungen und Abhängigkeitsprobleme:

    In Datei, eingefügt von /usr/src/linux-headers-2.6.28-15/include/linux/list.h:6,
    von /usr/src/linux-headers-2.6.28-15/include/linux/module.h:9,
    von ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/prefetch.h:14:27: Fehler: asm/processor.h: No such file or directory
    /usr/src/linux-headers-2.6.28-15/include/linux/prefetch.h:15:23: Fehler: asm/cache.h: No such file or directory
    In file included from /usr/src/linux-headers-2.6.28-15/include/linux/list.h:6,
    from /usr/src/linux-headers-2.6.28-15/include/linux/module.h:9,
    from ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/prefetch.h:53: Fehler: expected declaration specifiers or »...« before »size_t«
    In Datei, eingefügt von /usr/src/linux-headers-2.6.28-15/include/linux/module.h:9,
    von ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/list.h:7:24: Fehler: asm/system.h: No such file or directory
    In Datei, eingefügt von /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:11,
    von /usr/src/linux-headers-2.6.28-15/include/linux/cache.h:4,
    von /usr/src/linux-headers-2.6.28-15/include/linux/time.h:7,
    von /usr/src/linux-headers-2.6.28-15/include/linux/stat.h:60,
    von /usr/src/linux-headers-2.6.28-15/include/linux/module.h:10,
    von ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/linkage.h:5:25: Fehler: asm/linkage.h: No such file or directory
    In Datei, eingefügt von /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:15,
    von /usr/src/linux-headers-2.6.28-15/include/linux/cache.h:4,
    von /usr/src/linux-headers-2.6.28-15/include/linux/time.h:7,
    von /usr/src/linux-headers-2.6.28-15/include/linux/stat.h:60,
    von /usr/src/linux-headers-2.6.28-15/include/linux/module.h:10,
    von ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h:17:24: Fehler: asm/bitops.h: No such file or directory
    In file included from /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:15,
    from /usr/src/linux-headers-2.6.28-15/include/linux/cache.h:4,
    from /usr/src/linux-headers-2.6.28-15/include/linux/time.h:7,
    from /usr/src/linux-headers-2.6.28-15/include/linux/stat.h:60,
    from /usr/src/linux-headers-2.6.28-15/include/linux/module.h:10,
    from ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h: In Funktion »get_bitmask_order«:
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h:29: Warnung: Implizite Deklaration der Funktion »fls«
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h: In Funktion »hweight_long«:
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h:45: Warnung: Implizite Deklaration der Funktion »hweight32«
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h:45: Warnung: Implizite Deklaration der Funktion »hweight64«
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h: In Funktion »fls_long«:
    /usr/src/linux-headers-2.6.28-15/include/linux/bitops.h:112: Warnung: Implizite Deklaration der Funktion »fls64«
    In file included from /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:16,
    from /usr/src/linux-headers-2.6.28-15/include/linux/cache.h:4,
    from /usr/src/linux-headers-2.6.28-15/include/linux/time.h:7,
    from /usr/src/linux-headers-2.6.28-15/include/linux/stat.h:60,
    from /usr/src/linux-headers-2.6.28-15/include/linux/module.h:10,
    from ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/log2.h: Auf höchster Ebene:
    /usr/src/linux-headers-2.6.28-15/include/linux/log2.h:52: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »is_power_of_2«
    In Datei, eingefügt von /usr/src/linux-headers-2.6.28-15/include/linux/cache.h:4,
    von /usr/src/linux-headers-2.6.28-15/include/linux/time.h:7,
    von /usr/src/linux-headers-2.6.28-15/include/linux/stat.h:60,
    von /usr/src/linux-headers-2.6.28-15/include/linux/module.h:10,
    von ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:21:21: Fehler: asm/bug.h: No such file or directory
    In file included from /usr/src/linux-headers-2.6.28-15/include/linux/cache.h:4,
    from /usr/src/linux-headers-2.6.28-15/include/linux/time.h:7,
    from /usr/src/linux-headers-2.6.28-15/include/linux/stat.h:60,
    from /usr/src/linux-headers-2.6.28-15/include/linux/module.h:10,
    from ex01.c:1:
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:167: Fehler: expected declaration specifiers or »...« before »size_t«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:168: Fehler: Format-Zeichenkettenargument ist kein Zeichenkettentyp
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:167: Warnung: In Konflikt stehende Typen für eingebaute Funktion »snprintf«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:169: Fehler: expected declaration specifiers or »...« before »size_t«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:169: Warnung: In Konflikt stehende Typen für eingebaute Funktion »vsnprintf«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:171: Fehler: expected declaration specifiers or »...« before »size_t«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:172: Fehler: Format-Zeichenkettenargument ist kein Zeichenkettentyp
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:173: Fehler: expected declaration specifiers or »...« before »size_t«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:236: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »printk_timed_ratelimit«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:301: Fehler: expected declaration specifiers or »...« before »size_t«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:303: Fehler: expected declaration specifiers or »...« before »size_t«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:303: Fehler: expected declaration specifiers or »...« before »bool«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:306: Fehler: expected declaration specifiers or »...« before »size_t«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:306: Fehler: expected declaration specifiers or »...« before »bool«
    /usr/src/linux-headers-2.6.28-15/include/linux/kernel.h:308: Fehler: expected declaration specifiers or »...« before »size_t«

    usw!
    Nun meine Frage, erkennt jmd. auf den ersten Blick was das Problem ist und wie ich es in den Griff bekomme?

    Wäre echt nett!
    Danke schon mal!

    Mike



  • Du versucht ein Kernel Module mit dem gcc zu kompilieren. Du musst dir ein makefile schreiben das so aussieht:

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

Anmelden zum Antworten