F
Fluffy
Guest
Hiho Board,
Ich hab hier gesucht und ein ähnliches Problem gefunden, aber
der Threadersteller benutzt gcc und ich versuche mich weitestgehend an make zu halten, weil es auch empfohlen wird, wegen kbuild und so.
Folgender Guide The Linux Kernel Module Programming Guide und auch ein ähnliches PDF hab ich mir vorgenommen und habe dort den Code kopiert.
Es handelt sich um hello-1.c ich verstehe was obj-m += macht und hab die Datei einfach main.c genannt.
Ich hab mir anschließend auf kernel.org den kernel 4.6.3 heruntergeladen.
Wollte es nicht mit meinem Kernel machen weil ich für den build root-rechte brauchen würde.
Mein Makefile(include_dirs macht keinen unterschied)
Meine main.c
Der Fehler bei make all
Meine Verzeichnissstrucktur:
simpleLinuxDriver <- ProjectOrdner
simpleLinuxDriver/linux-4-6-3 <- enthält den kernel von kernel.org
simpleLinuxDriver/main.c <- die zu kompilirende Datei
simpleLinuxDriver/Makefile
Es ist mit Sicherheit etwas recht einfaches aber ich seh es nicht, das Makefile ändert das Verzeichnis wie angegeben, die Datei für das Kopilieren wird gefunden und auch der Include-Path(wenn angegeben) ist richtig.
Gruß
Fluffy
Ich hab hier gesucht und ein ähnliches Problem gefunden, aber
der Threadersteller benutzt gcc und ich versuche mich weitestgehend an make zu halten, weil es auch empfohlen wird, wegen kbuild und so.
Folgender Guide The Linux Kernel Module Programming Guide und auch ein ähnliches PDF hab ich mir vorgenommen und habe dort den Code kopiert.
Es handelt sich um hello-1.c ich verstehe was obj-m += macht und hab die Datei einfach main.c genannt.
Ich hab mir anschließend auf kernel.org den kernel 4.6.3 heruntergeladen.
Wollte es nicht mit meinem Kernel machen weil ich für den build root-rechte brauchen würde.
Mein Makefile(include_dirs macht keinen unterschied)
Code:
include_dirs=-I/home/fluffy/simpleLinuxDriver/linux-4-6-3/include
obj−m += main.o
all: main.o
make −C linux-4-6-3/ M=$(pwd) modules
clean:
make −C linux-4-6-3/ M=$(pwd) clean
Meine main.c
Code:
[COLOR=#bbb529]#include[/COLOR][COLOR=#6a8759] <linux/module.h>
[/COLOR][COLOR=#bbb529]#include[/COLOR][COLOR=#6a8759] <linux/kernel.h>
[/COLOR][COLOR=#6a8759]
[/COLOR][COLOR=#cc7832][B]int [/B][/COLOR]init_module([COLOR=#cc7832][B]void[/B][/COLOR]) {
printk(KERN_INFO [COLOR=#6a8759]"HELLO world 1.[/COLOR][COLOR=#cc7832]\n[/COLOR][COLOR=#6a8759]"[/COLOR])[COLOR=#cc7832];
[/COLOR][COLOR=#cc7832]
[/COLOR][COLOR=#cc7832] [/COLOR][COLOR=#cc7832][B]return [/B][/COLOR][COLOR=#6897bb]0[/COLOR][COLOR=#cc7832];
[/COLOR]}
[COLOR=#cc7832][B]void [/B][/COLOR]cleanup_module([COLOR=#cc7832][B]void[/B][/COLOR])
{
printk(KERN_INFO [COLOR=#6a8759]"Goodbye world 1.[/COLOR][COLOR=#cc7832]\n[/COLOR][COLOR=#6a8759]"[/COLOR])[COLOR=#cc7832];
[/COLOR]}
Der Fehler bei make all
Code:
#include <linux/module.h>
^
compilation terminated.
make: *** [<builtin>: main.o] Error 1
Meine Verzeichnissstrucktur:
simpleLinuxDriver <- ProjectOrdner
simpleLinuxDriver/linux-4-6-3 <- enthält den kernel von kernel.org
simpleLinuxDriver/main.c <- die zu kompilirende Datei
simpleLinuxDriver/Makefile
Es ist mit Sicherheit etwas recht einfaches aber ich seh es nicht, das Makefile ändert das Verzeichnis wie angegeben, die Datei für das Kopilieren wird gefunden und auch der Include-Path(wenn angegeben) ist richtig.
Gruß
Fluffy
Zuletzt bearbeitet von einem Moderator: