Hallo, bisher benutze ich zum kompilieren meiner Raspberry-Pi Kerneltreiber Experimente das im Kerneltreiber Buch vorgestellte Makefile das ein .c Datei kompiliert. Jetzt würde ich gerne meinen Code in mehrere Dateien aufteilen. Beim AVR-GCC gibt's im Makefile eine Zeile in der ich alle Namen der beteiligten .c Dateien eintrage und fertig ist die Laube. Deswegen habe ich mich bisher nie mit den Details beschäftigt. Wie muss ich das Makefile für die Kernelcompilierung abändern damit mehrere .c Dateien kompiliert werden? Vielen Dank für eure Tipps. -- Das bisher verwendete Makefile: ifneq ($(KERNELRELEASE),) obj-m := spi-bcm2835.o else KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules endif
Durch die Zeile
1 | $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules |
wird ein neuer make-Prozeß in dem durch $(KDIR) gegebene Verzeichnis gestartet und dort wird nach einem Makefile gesucht, das offensichtlich das Make-target "modules" enthält. Was dann eigentlich compiliert werden soll, wird anscheinend der Variable obj-m entnommen. Wahrscheinlich gibt es dort eine Regel, für jede *.o-Datei nach einer gleichnamigen *.c-Datei zu suchen bzw. dieser Default wird benutzt. Falls Du an diesem Mechanismus nichts ändern willst, dann kannst Du vielleicht in Deiner Datei, die ja vermutlich spi-bcm2835.c heißt, ein paar #include-Directiven benutzen, um den Kode zu strukturieren.
Ja, gute Frage wo das Makefile sitzen könnte das das Target "modules" enthält. In dem Verzeichnis in dem ich meinen Quellcode habe auf jeden Fall nicht. Ich kompiliere mit Aufruf von "sudo make", den Rest macht das OS des Raspberry Pi alleine. Das makefile habe ich aus (Beispiel 5.2): https://ezs.kr.hsnr.de/TreiberBuch/html/x1966.html Die Umgebungsvariablen "MAKE", "obj-m" und "KERNELRELEASE" gibts auf jeden Fall nicht, weder beim normalen user noch bei root. In dem Fall benutze ich vielleicht tatsächlich erstmal die Methode die weiteren .c Dateien mit include einzubinden und mich mit dem Makefile erst später zu befassen.
Kann man nicht einfach alle dateien bei obj-m auflisten, einfach mit .c durch .o ersetzt und durch abstand getrennt?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.