• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Make-File für ein kernel-Modul

Ich möchte gerade einen Treiber entwickeln (für 2.6.x Kernel).
Dieser treiber besteht aus mehreren c-Quellen z.B. teil1.c teil2.c und teil3.c
später sind diese Files auch in verschiedenen directoris.
teil3.c ist z.B. ein allgemeiner teil der von verschiedenen Treibern benutzt werden soll.
das benütze Makefile:

Makefile:
Code:
obj-m      := gesamt.o

CURRENT = $(shell uname -r)
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)

gesamt-obj :=kmodule_driver.o kmodule_fkt_driver1.o 

default:
	@echo --------------------------------------
	@echo Testausgabe pwd = $(PWD)
	@echo Testausgabe CURRENT = $(CURRENT)
	@echo Testausgabe KDIR = $(KDIR)
	make -C $(KDIR) SUBDIRS=$(PWD) modules


clean:
	-rm -f *.o *.ko .*.cmd .*.flags *.mod.c

##-include $(KDIR)/Rules.make

Komplette Ausgabe des make:

Code:
klaus@linux:~/c_quellen/kmodule_test_projekt/kmodule> make
--------------------------------------
Testausgabe pwd = /home/klaus/c_quellen/kmodule_test_projekt/kmodule
Testausgabe CURRENT = 2.6.13-15-default
Testausgabe KDIR = /lib/modules/2.6.13-15-default/build
make -C /lib/modules/2.6.13-15-default/build SUBDIRS=/home/klaus/c_quellen/kmodule_test_projekt/kmodule modules
make[1]: Entering directory `/usr/src/linux-2.6.13-15-obj/i386/default'
make -C ../../../linux-2.6.13-15 O=../linux-2.6.13-15-obj/i386/default modules
make[4]: *** Keine Regel vorhanden, um das Target »/home/klaus/c_quellen/kmodule_test_projekt/kmodule/gesamt.c«,
  benötigt von »/home/klaus/c_quellen/kmodule_test_projekt/kmodule/gesamt.o«, zu erstellen.  Schluss.
make[3]: *** [_module_/home/klaus/c_quellen/kmodule_test_projekt/kmodule] Fehler 2
make[2]: *** [modules] Fehler 2
make[1]: *** [modules] Fehler 2
make[1]: Leaving directory `/usr/src/linux-2.6.13-15-obj/i386/default'
make: *** [default] Fehler 2
klaus@linux:~/c_quellen/kmodule_test_projekt/kmodule>

Noch einige Hintergrund Informationen:
Ich benutze SUSE Linux 10.0
Entwicklung unter KDE als user
Aufruf "make" in einer Console (Befehlsfenster)

wenn ich
obj-m := kmodule_driver.o kmodule_fkt_driver1.o
in Makefile schreibe, wird richtig übersetzt aber ich bekomme 2 getrennte .ko Files (kmodule_driver.ko und kmodule_fkt_driver1.ko)
Ich brauche aber nur ein gesammtes .ko File!!

Was mache ich falsch?

Gruß
Klaus
 
OP
S

sualkklaus

Newbie
So, das funktioniert jetzt. Danke! :lol:

Jezt habe ich noch eine Frage:
Wie muss ich das Makefile verändern, wenn z.B. das File combo.c (in deinem Beispiel) sich in einem anderen Ordner befindet?
(möchte eine Ordnerstruktur aufbauen, d.h. die Source-Files werden in verschiedene Ordner abgelegt)

Gruß
Klaus
 
Oben