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
Gast
#3226249
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.
Gast
#3226258
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!
Gast
#3226259
Hm, hier wars wohl falsch!
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!!
Gast
#3226775
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!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.