Hi, bin grad dabei ein Linux Treibermodul mit mehreren sourcefiles zu schreiben. Das heißt ja das ich Funktionen(oder Variablen) exportieren muss, um sie in den anderen Files aufrufen zu können. Den Fehler den ich jetzt erhalte ist: In test.h ist die Funktion func() deklariert, in test.c ist sie definiert. Jetzt muss ich sie aber in test.c auch exportieren( EXPORT_SYMBOL(func) )! Und da erhalte ich den Fehler: error: conflicting types for 'func'!!! Ohne Deklaration in test.h funktioniert es natürlich. Jemand eine Idee?? Gruß Markus
Markus R. schrieb: > Jetzt muss ich sie aber in test.c auch > exportieren( EXPORT_SYMBOL(func) )! und warum? Recht es nicht das in der H datei zu machen, diese wird doch includiert ist damit steht es doch in er C datei.
Also wir hier in der Firma suchen genau dich! Diverse Prototypen auflöten und noch Geld dafür bezahlen und dabei Spaß an der Arbeit mitbringen... Genial!
ok erledigt. Jetzt wird fehlergemeldet das die Headerdateien nicht gefunden werden. Ist es hier genauso wie im Userspace?? Eigene Header mit "header.h" und Systemheader mit <header.h> ?? Im Moment sieht mein Makefile so aus: obj-m += modul.o modul-objs := modul1.o modul2.o KDIR := /home/markus/Desktop/rpi/linux-rpi-3.6.y/ ARCH := arm CCOMP := /home/markus/Desktop/rpi/tools-master/arm-bcm2708/arm-bcm2708hardfp-linu x-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CCOMP) M=$(PWD) modules Wie kann ich dem Makefile sagen das die Headerdateien im gleichen Verzeichniss wie die c-Dateien liegen, und er nicht irgendwo in der Linuxverzeichnisstruktur sucht? Danke!!
Markus R. schrieb: > ok erledigt. Jetzt wird fehlergemeldet das die Headerdateien nicht > gefunden werden. Ist es hier genauso wie im Userspace?? Eigene Header > mit "header.h" und Systemheader mit <header.h> ?? > Kommt drau an > Im Moment sieht mein Makefile so aus: > Kommt drauf an. Wenn du im nur die .h Dateien aus dem "Modul" Verzeichnis haben willst #include "header.h" > obj-m += modul.o > modul-objs := modul1.o modul2.o > > KDIR := /home/markus/Desktop/rpi/linux-rpi-3.6.y/ > ARCH := arm > CCOMP := > /home/markus/Desktop/rpi/tools-master/arm-bcm2708/arm-bcm2708hardfp-linu x-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- > PWD := $(shell pwd) > > default: > $(MAKE) -C $(KDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CCOMP) M=$(PWD) > modules > > Wie kann ich dem Makefile sagen das die Headerdateien im gleichen > Verzeichniss wie die c-Dateien liegen, und er nicht irgendwo in der > Linuxverzeichnisstruktur sucht? > s.o. > Danke!! Warum willst du dein Modul ausserhalb der Kernelsourcen bauen ??
> Warum willst du dein Modul ausserhalb der Kernelsourcen bauen ?? Ich crosscompeliere das Modul für eine ARM-Platform. Ich hab den Fehler gefunden. Das Makefile muss wie folgt aussehen: obj-m += wholemodule wholemodule-objs := modul.o modul1.o modul2.o Wobei wholemodule kein sourcefile ist. Ich dachte an dieser Stelle muss die Haupt-C-Datei aufgeführt sein. Alles klar vielen Dank!
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.