Forum: PC-Programmierung Anfängerfrage Makefile für RPi-Kernelcompilierung


von asd (Gast)


Lesenswert?

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

von Georg B. (diereinegier)


Lesenswert?

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.

von asd (Gast)


Lesenswert?

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.

von asd (Gast)


Lesenswert?

Vielen Dank für deine Hilfe.

von Daniel A. (daniel-a)


Lesenswert?

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
Noch kein Account? Hier anmelden.