mikrocontroller.net

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


Autor: asd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg Bisseling (diereinegier)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch die Zeile
$(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.

Autor: asd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: asd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für deine Hilfe.

Autor: Daniel Abrecht (daniel-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man nicht einfach alle dateien bei obj-m auflisten, einfach mit .c 
durch .o ersetzt und durch abstand getrennt?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.