Linux Modulprogrammierung EXPORT oder Deklaration

OP #3226245
Lesenswert?

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
OP #3226455
Lesenswert?

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
Lesenswert?

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 ??
OP #3227825
Lesenswert?

> 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.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren