probleme beim kompilieren des kernel moduls

M

magenspueler

Grünschnabel
hi.

ich bin neu hier im forum und habe auch gleich ein problem. ich moechte mich mit der programmierung von kernelmodulen anfangen zu beschaeftigen und habe das problem, dass immer wenn ich ein solches zu kompilieren versuche ein schwall von fehlern ueber meine konsole rennt. leider kann ich mir diese fehler nicht erklaeren und bitte deshalb hier um hilfe.
zu meinem versuch: ich habe bisher nur versucht ein hello world programm zum laufen zu bringen. laut mehrerer tutorials, die ich gelesen habe und den dort angehaengten komentaren sollte es wohl kein problem sein, so autor und user dieser seiten. bei mir will es aber einfach nicht klappen, denn der compiler beschwert sich ueber divisionen durch null und fehlende declarations von kostanten. mein source ist ausserst trivial und sollte, meiner meinung nach, fehlerfrei sein:
Code:
#include <linux/module.h> 
#include <linux/version.h> 
#include <linux/fs.h> 
#include <linux/init.h> 

MODULE_AUTHOR("Nobody"); 
MODULE_LICENSE("GPL"); 
MODULE_DESCRIPTION("Hallo Welt"); 
MODULE_SUPPORTED_DEVICE("none"); 

static int __init ModInit(void) 
{ 
printk("Funktion 'init_module' wurde aufgerufen!"); 
return 0; 
} 

static void __exit ModExit(void) 
{ 
printk("Funktion 'cleanup_module' wurde aufgerufen!"); 
} 

module_init( ModInit ); 
module_exit( ModExit );

ich versuchte dies dann folgendermassen zu compilen:

#gcc -O -DMODULE -D__KERNEL__ -Wall -I/usr/src/linux/include -c mod.c

in der console ist dann dies hier zu lesen: http://nopaste.de/p/aED2KMyEE (es ist ziemlich viel und darum hab ich es bei nopaste hochgeladen)

bitte helft mir, da ich nicht weiss, woran das liegt und mich das ganze echt aufhaelt.

vielen dank
lg me
 
Zuletzt bearbeitet:
ok, ich habe das problem geloesst. zur info:
erfolgreicher code:
Code:
#include <linux/module.h> 
#include <linux/version.h> 
#include <linux/fs.h> 
#include <linux/init.h> 

MODULE_AUTHOR("Nobody"); 
MODULE_LICENSE("GPL"); 
MODULE_DESCRIPTION("Hallo Welt"); 
MODULE_SUPPORTED_DEVICE("none"); 

init_module(void) 
{ 
printk(KERN_INFO "INIT MOD\n"); 
return 0; 
}
void cleanup_module(void)
{
printk(KERN_INFO "EXIT MOD\n");
}


man benoetigt ein Makefile im gleichen ordner:

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

und dann nur den befehl ausfuehren:

# make -C /usr/src/linux/ M=/home/magenspueler/coding/kernelhacking/helloworld/

jetzt muss das module nur noch mittels #insmod mod.ko geladen werden und mit rmmod mod entladen werden. der output laesst sich super beobachten, wenn man noch eine andere console offen hat und dort tail -f /pfad/zum/kernel.log laufen hat. es funktioniert *freude* :-)
warum findet mal eigendlich nie eine solche erklährung? ....hm
am besten ein paar von euch probieren das mal aus und posten ihre erfahrungen. vielleicht ist das ja was für die faqs. ihr glaubt nicht wie schwer es ist dafür ein richtiges howto für kernel 2.6 zu finden, dass auch funktioniert.
lg me
 
Zuletzt bearbeitet:
Bitte benutz beim nächsten mal den
Code:
-Tag und meide Doppelposts - Benutze stattdessen den EDIT-Button.

Vielen Dank :)
 

Ähnliche Themen

kernel module?

'libraryname': undefined reference to 'functionname'

kernel modul

Config_x86_l1_cache_shift

Fehler beim compiliren vom Nvidia Treiber

Zurück
Oben