Make-File für ein kernel-Modul

S

sualkklaus

Grünschnabel
Hallo,
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
 
Wenn du 2 getrennte Module erhälst, wird es daran liegen, dass du 2 init-Funktionen in den Dateien hast, sonst würde er dir daraus keine .ko erstellen. Ein gutes Buch zur Treiber- und damit zur Modul-Programmierung findest du unter http://ezs.kr.hsnr.de/TreiberBuch/html/
In deinem Fall würde ich mal tippen, dass hier das Problem darin liegt, dass du eine vorkompilierte Objekt-Datei einbinden willst und die gesamt.c sich nicht im Modul-Verzeichnis befindet. Die Zeile
Code:
obj-m      := gesamt.o
veranlasst das Kernel-Buildsystem nach einer gesamt.c zu suchen um gesamt.o zu erstellen. Das wird so nichts.
 
Hallo,

Habe inzwischen den Fehler gefunden!!

anstatt:
gesamt-obj :=kmodule_driver.o kmodule_fkt_driver1.o

muss es lauten:
gesamt-objs :=kmodule_driver.o kmodule_fkt_driver1.o

was so ein kleines "s" alles ausmacht!:)

Gruß
Klaus
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

X startet nichtmehr

Akonadi startet nicht mehr

Wlan Treiber

Zurück
Oben