Probleme beim Erstellen eigener Kernel-Module

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
fober
Beiträge: 243
Registriert: 09.10.2002 08:29:24
Wohnort: Chemnitz
Kontaktdaten:

Probleme beim Erstellen eigener Kernel-Module

Beitrag von fober » 03.02.2006 08:06:36

Hallo,

ich wollte mich mal ein bisschen mit der Kernel-Module-Programmierung beschäftigen. ich habe mit folgendes Beispiel aus WWW geladen:

Code: Alles auswählen

#include <linux/version.h>
#include <linux/module.h>
#include <linux/init.h>

MODULE_LICENSE("GPL");

static int __init ModInit(void)
{
                 return 0;
}

static void __exit ModExit(void)
{
                 return;
}

module_init( ModInit );
module_exit( ModExit );
beim kompilieren mit

Code: Alles auswählen

gcc -c ...
bekomme ich aber einen Haufen Fehler, die aber allesamt aus den eingebundenen Header-Dateien stammen ...

Code: Alles auswählen

 gcc -c mod1.c
In file included from /usr/include/linux/sched.h:12,
                 from /usr/include/linux/module.h:10,
                 from mod1.c:2:
/usr/include/linux/jiffies.h:16: error: Syntaxfehler before "jiffies_64"
/usr/include/linux/jiffies.h:20: error: Syntaxfehler before "get_jiffies_64"
In file included from /usr/include/linux/cpumask.h:8,
                 from /usr/include/linux/sched.h:15,
                 from /usr/include/linux/module.h:10,
                 from mod1.c:2:
/usr/include/linux/bitmap.h: In Funktion \uffffbitmap_empty\uffff:
/usr/include/linux/bitmap.h:15: error: `BITS_PER_LONG' undeclared (first use in this function)
/usr/include/linux/bitmap.h:15: error: (Each undeclared identifier is reported only once
/usr/include/linux/bitmap.h:15: error: for each function it appears in.)
/usr/include/linux/bitmap.h: In Funktion \uffffbitmap_full\uffff:
/usr/include/linux/bitmap.h:29: error: `BITS_PER_LONG' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In Funktion \uffffbitmap_equal\uffff:
/usr/include/linux/bitmap.h:44: error: `BITS_PER_LONG' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In Funktion \uffffbitmap_shift_right\uffff:
/usr/include/linux/bitmap.h:85: error: `__shr_tmp' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In Funktion \uffffbitmap_shift_left\uffff:
/usr/include/linux/bitmap.h:98: error: `__shl_tmp' undeclared (first use in this function)
/usr/include/linux/bitmap.h: In Funktion \uffffbitmap_weight\uffff:
/usr/include/linux/bitmap.h:144: error: `BITS_PER_LONG' undeclared (first use in this function)
In file included from /usr/include/linux/sched.h:15,
                 from /usr/include/linux/module.h:10,
                 from mod1.c:2:
/usr/include/linux/cpumask.h: Auf h\uffffchster Ebene:
(und das ist nur ein kurzer Auszug)

Habe ich d irgendwas verkehrtgemacht? Ich habe verschiedene Beispielprogramme ausprobiert, aber ich hatte mit keinem so richtig erfolg ;-(

Vielen Dank schon mal für Eure Hilfe
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesen ist seeliger denn posten :D
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 03.02.2006 21:49:30

Code: Alles auswählen

root@gms1:~# gcc-3.3 -c x.c -D__KERNEL__ -DMODULE -I /usr/src/linux-2.4.31/include/
wenn du das __KERNEL__ Macro noch definierst und das richtige Includeverzeichnis (2.4.n) angibst, sollte es funktionieren.

Gruß
gms

für Kernel 2.6 erstellst du dir ein Makefile wie in diesem Beispiel und führst dann das angeführte "make" Statement aus:

Code: Alles auswählen

root@gms1:~# cat Makefile
obj-m := x.o
root@gms1:~# make -C /usr/src/linux-2.6.15 SUBDIRS=$PWD
make: Entering directory `/usr/src/linux-2.6.15'

  WARNING: Symbol version dump /usr/src/linux-2.6.15/Module.symvers
           is missing; modules will have no dependencies and modversions.

  LD      /root/built-in.o
  CC [M]  /root/x.o
  Building modules, stage 2.
  MODPOST
  CC      /root/x.mod.o
  LD [M]  /root/x.ko
make: Leaving directory `/usr/src/linux-2.6.15'

Benutzeravatar
fober
Beiträge: 243
Registriert: 09.10.2002 08:29:24
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von fober » 06.02.2006 08:04:22

Vielen Dank für deine Antwort.
Leider bekomme ich da immer noch den "kryptischen Unsinn" bei

Code: Alles auswählen

make -C /usr/src/linux-2.6.15 SUBDIRS=$PWD 
kann es sein das die Kernel-Sourcen von Ubuntu (das nutze ich momentan auf meinem Laptop) defekt sind?
Obwohl ... ich hatte das ganze auch auf meinem Server (Sarge) ausprobiert und dort kamen auch ein Haufen Fehler. :cry:

Was mich eben nur stutzig macht ist, das ich das modul mit einem arm-linux-gcc problemlos kompilieren kann ...

cu Frank
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesen ist seeliger denn posten :D
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 07.02.2006 12:28:10

welche gcc Version hast du auf dem Sarge-Server verwendet ? Kannst du die Fehlermeldungen auf NoPaste (http://nopaste.debianforum.de/) posten ?

Gruß
gms

Antworten