2010-10-31 3 views
5

Kompilieren Ich versuche einfach Linux-Kernel-Modul zu kompilieren:Linux-Kernel-Modul

#include <linux/module.h>  
#include <linux/kernel.h>  

int init_module(void) 
{ 
     printk("Hello world 1.\n"); 
     return 0; 
} 

void cleanup_module(void) 
{ 
     printk(KERN_ALERT "Goodbye world 1.\n"); 
} 

Meine Make-Datei:

obj-m = testmodule.o 
KVERSION = $(shell uname -r) 
all: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 
clean: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 

Jetzt habe ich nicht auf Fehler in meiner C-Datei.

Aber wenn ich versuche, make in Terminal: make: Nichts für 'alle' zu tun.

Was ist los?

Vielen Dank.

Antwort

5

in Ihrem Make-Datei Der Standardbefehl ist

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

, die auf/lib/modules/$ (KVERSION) machen zu cd instruiert/bauen und

make module m=YOUR_CURRENT_DIR 

wiederum führen, dass Make-Datei ist nichts zu tun zu finden. Vermutlich erwartet dieses Makefile eine bestimmte Struktur in Ihrem aktuellen Verzeichnis.

Sie müssen aufmerksam lesen, welche Anweisungen Sie zum Einrichten dieses Makefiles geführt haben.

+1

Ich hatte das gleiche Problem. Es funktionierte gut, wenn Sie den Befehl in die Befehlszeile setzten, ohne 'make' zu ​​verwenden. Es stellte sich heraus, dass mein Editor beim Kopieren der 'Makefile' Leerzeichen anstelle von Tabs gesetzt hat. –

0

Sie geben wirklich nicht genug Informationen, um die richtige Antwort zu finden, aber ich werde Ihnen einige Dinge geben, um zu sehen.

Wie kompilieren Sie es? Hast du den richtigen Include-Pfad in deinem Build? Buildpfade werden mit der Option -I für gcc angegeben. Stellen Sie sicher, dass Sie auf Ihren Kernel-Quellbaum zeigen.

Haben Sie den Kernel gebaut? Wenn Sie eine make tun, sind bestimmte Dinge eingerichtet, die Sie erstellen können. Doing a make baut nicht alles (wie Module), sondern wird die anfänglichen Sachen für Sie einrichten.

0

Stellen Sie sicher, dass Ihre Distributionen die Kernelheader/Entwicklungspakete installiert haben, die diese Include-Dateien bereitstellen.

Wenn sie installiert sind, suchen Sie, wo sich diese Include-Dateien auf Ihrem Computer befinden, und fügen Sie diese Verzeichnisse zu Ihrem Compiler-Suchpfad hinzu (die -I-Option).

0

Dies liegt daran, Ihre Makefile keine Registerkarte enthält, bevor Befehl

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

So normalerweise Ihre Datei wie unten machen geben sollte:

obj-m = test.o                 

KVERSION = $(shell uname -r)              

all:                    
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules     
clean:                   
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean