Hallo
Ich versuche ein externes linux kernel module zu kompilieren.
Da ich es nicht hinbekommen habe, bin ich diesem Tutorial gefolgt:
Compiling Kernel Modules
(und auch Linux/Documentation/kbuild/modules.txt - Linux Cross Reference - Free Electrons sowie einigen Distributionsspezifischen Tutorials)
Ich habe das HelloWorld der vorherigen Seite copy-pasted. Es funktioniert leider immer noch nicht:
Als test.c (wie gesagt copy-pasted):
Dann ein Makefile erstellt:
Makefile:
Und dann versucht:
$ make
Wie es in angegebenem Link heisst, leider gibt er dann:
$ make *** Keine Targets. Schluss.
aus. Nach einigen weiteren Versuchen mit derselben Ausgabe habe ich versucht:
make -C . M=$PWD test.o
Dann gibt er:
make: Entering directory '/home/ktest'
cc -c -o test.o test.c
test.c:4:54: fatal error: linux/module.h: Datei oder Verzeichnis nicht gefunden
#include <linux/module.h> /* Needed by all modules */
^
compilation terminated.
<builtin>: recipe for target 'test.o' failed
make: *** [test.o] Error 1
make: Leaving directory '/home/fabi/Downloads/kmaketest'
aus. Ich habe noch ein paar abwandlungen dieses Befehles versucht. Ich habe es auch mit einem Kbuild statt einem Makefile versucht. Nichts hat geholfen.
Kann es sein das mir irgendein Paket fehlt? Ja linux/kernel.h laut der Fehlermeldung, ich dachte aber, dass die "Magic" hinter "obj-m" dies genau erledigen soll. Die Doku ist leider ungenügend. Zum Beispiel heisst der Befehl in einigen Tutorials:
obj-m := <filename>.o
in anderen:
obj-m += <filename>.o
(ich habe natürlich beides vergeblich versucht).
Wäre natürlich toll, wenn mir jemand einen Hinweis oder mögliche Fehlerquellen nennen könnte.
Ich mache das auf Debian in Virtualbox mit Kernelversion 3.16.0
Grüsse
Ich versuche ein externes linux kernel module zu kompilieren.
Da ich es nicht hinbekommen habe, bin ich diesem Tutorial gefolgt:
Compiling Kernel Modules
(und auch Linux/Documentation/kbuild/modules.txt - Linux Cross Reference - Free Electrons sowie einigen Distributionsspezifischen Tutorials)
Ich habe das HelloWorld der vorherigen Seite copy-pasted. Es funktioniert leider immer noch nicht:
Als test.c (wie gesagt copy-pasted):
Code:
/*
* 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");
}
Makefile:
Code:
obj-m += test.o
$ make
Wie es in angegebenem Link heisst, leider gibt er dann:
$ make *** Keine Targets. Schluss.
aus. Nach einigen weiteren Versuchen mit derselben Ausgabe habe ich versucht:
make -C . M=$PWD test.o
Dann gibt er:
make: Entering directory '/home/ktest'
cc -c -o test.o test.c
test.c:4:54: fatal error: linux/module.h: Datei oder Verzeichnis nicht gefunden
#include <linux/module.h> /* Needed by all modules */
^
compilation terminated.
<builtin>: recipe for target 'test.o' failed
make: *** [test.o] Error 1
make: Leaving directory '/home/fabi/Downloads/kmaketest'
aus. Ich habe noch ein paar abwandlungen dieses Befehles versucht. Ich habe es auch mit einem Kbuild statt einem Makefile versucht. Nichts hat geholfen.
Kann es sein das mir irgendein Paket fehlt? Ja linux/kernel.h laut der Fehlermeldung, ich dachte aber, dass die "Magic" hinter "obj-m" dies genau erledigen soll. Die Doku ist leider ungenügend. Zum Beispiel heisst der Befehl in einigen Tutorials:
obj-m := <filename>.o
in anderen:
obj-m += <filename>.o
(ich habe natürlich beides vergeblich versucht).
Wäre natürlich toll, wenn mir jemand einen Hinweis oder mögliche Fehlerquellen nennen könnte.
Ich mache das auf Debian in Virtualbox mit Kernelversion 3.16.0
Grüsse
Zuletzt bearbeitet: