gcc / c++ / Kernel-Header
-
Hallo,
ich versuche grad, ein Kernelmodul zu schreiben (Es soll Anfragen eines RTAI-LXRT-Programms an Treiber-Kernelmodul weiterleiten).
Leider fliegt mein gcc (v3.3.5) immer mit folgender Fehlermeldung raus:
cd '/usr/src/tpmc816lxrt' && make -k -j1 'install' Compiling for kernels older than 2.6.x... cc -D__KERNEL__ -I/lib/modules/2.4.27-adeos-fzipatches-2005-11-05/build/include -I/usr/rtai-3.1-fzi/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -DMODULE -c tpmc816_lxrt.C -o tpmc816_lxrt.o In file included from /lib/modules/2.4.27-adeos-fzipatches-2005-11-05/build/include/linux/spinlock.h:6, from /lib/modules/2.4.27-adeos-fzipatches-2005-11-05/build/include/linux/module.h:12, from tpmc816_lxrt.C:1: /lib/modules/2.4.27-adeos-fzipatches-2005-11-05/build/include/asm/system.h:273: error: parse error before `new' /lib/modules/2.4.27-adeos-fzipatches-2005-11-05/build/include/asm/system.h: In function `long unsigned int __cmpxchg(...)': /lib/modules/2.4.27-adeos-fzipatches-2005-11-05/build/include/asm/system.h:276: error: ` size' undeclared (first use this function) /lib/modules/2.4.27-adeos-fzipatches-2005-11-05/build/include/asm/system.h:276: error: (Each undeclared identifier is reported only once for each function it appears in.) ...
Ich verstehe nicht ganz, warum er innerhalb der Kernel-Header Probleme hat, die sollten doch soweit i.O. sein.
Ich habe mit mal die entsprechenden Programmzeilen angeschaut, z.B. für die erste Meldung:aus system.h:
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size) {...} {
Ich habe dann vermutet, es könnte mit dem Schlüsselwort "new" zu tun haben, und es durch "nnew" ersetzt. Danach scheint diese Stelle kein Problem mehr zu sein. Ich werde natürlich nicht alle Kernel-Header umschreiben...
Hat es was damit zu tun, daß das Schlüsselwort new nicht verwendet werden darf? Ich meine mich zu erinnern, daß der Code unter gcc-2.95 schon mal kompiliert hat - war der etwas lascher? Und warum sind die Kernel-Header dann nicht gcc-3.3-konform? Oder fehllt mir eine gcc-Option?
Ich bin ratlos und dankbar für alle Tips.
Gruß,
Tobias
P.S. Meine Includes:
#include <linux/module.h>
#include <asm/rtai.h>
#include "rtai_lxrt.h"Compilerflags:
CFLAGS = -D__KERNEL__ -I$(INCLUDEDIR) $(RTAI_INCLUDES) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
-pipe -fno-strength-reduce -DMODULE
-
du darfst die datei nicht .C nennen, das ist für c++... Nenn sie .c
-
Danke für die schnelle Antwort.
Werde das morgen früh direkt checken.
Achso, meine Kernel-Version ist die 2.4.27, RTAI ist die Version 3.1.