Hallo,
ich will mich ein wenig in die Treiber-Programmierung einarbeiten, doch leider
scheitert es schon am "Hello World". :>
Source (steht in 2 Büchern so drinn und RTFM würd ich gern machen wenn ich ein
M hätte);
#include
henne wrote:
ich will mich ein wenig in die Treiber-Programmierung einarbeiten, doch leider scheitert es schon am "Hello World". :>
Source (steht in 2 Büchern so drinn und RTFM würd ich gern machen wenn ich ein M hätte);
#include
int init_module() { printk("Hallo Welt\n"); return 0; }
void cleanup_module() { printk("Ade du grausame Welt\n",); }
beim gcc führt das zu nichts anderem als:
/usr/lib/gcc-lib/i486-suse-linux/3.3/../../../crt1.o(.text+0x18): In function `_start': : undefined reference to `main' /tmp/cck6hemX.o(.text+0x11): In function `init_module': : undefined reference to `printk' /tmp/cck6hemX.o(.text+0x30): In function `cleanup_module': : undefined reference to `printk' collect2: ld returned 1 exit status
Ich würde mal darauf tippen, dass Du den gcc falsch aufrufst. Hmm, bei den modutils liegt im insmod/test Verzeichnis ein Beispiel für ein Modul, mit Makefile. Ist nicht viel, hänge ich einfach mal dran. Vielleicht hilft Dir das.
Ich würde gern wissen: Was ist da faul ? Und warum sind bei SuSE /usr/include/asm und /usr/include/linux keine Links zu den Kernel-Sourcen?
Die sind optional, musst Du nachinstallieren.
--
Gruß,
Andreas
#include
Hallo,
beim gcc führt das zu nichts anderem als:
/usr/lib/gcc-lib/i486-suse-linux/3.3/../../../crt1.o(.text+0x18): In function
`_start': : undefined reference to `main'
Also, das bedeutet, dass es keine Funktion 'main' gibt. Dieser Fehler tritt erst beim Linken auf, also wenn du ein ausführbares Binary erstellst. Wenn du nur die Objektdateien (.o) erstellen willst, musst du beim gcc "-c" angeben. Wenn das Ergebnis ausführbar sein soll (zB a.out), brauchst du eine Funktion int main(void) { init_module(); cleanup_module(); return 0; }
/tmp/cck6hemX.o(.text+0x11): In function `init_module': : undefined reference to `printk'
/tmp/cck6hemX.o(.text+0x30): In function `cleanup_module': : undefined reference to `printk'
Hhmm, ich habe keine Ahnung von Treiberprogrammierung, aber ich habe keine Funktion printk in einer module.h gefunden. Der Compiler übrigens wohl auch nicht. Jedenfalls hat der Linker nichts entsprechendes gefunden. Musst du noch irgendwelche Bibliotheken einbinden (mit -lNAME, wenn libNAME.a das Archiv mit der Bibliotheksfunktion ist)?
Ich würde gern wissen: Was ist da faul ? Und warum sind bei SuSE /usr/include/asm und /usr/include/linux keine Links zu den Kernel-Sourcen?
Gute Frage! Ciau, Jürgen
Hi henne, Am Wednesday 02 July 2003 22:04 schrieb henne:
Source (steht in 2 Büchern so drinn und RTFM würd ich gern machen wenn ich ein M hätte);
www.oreilly.de/com --> Free Book Project --> LinuxDeviceDriver
---------- misc.c ------------
#ifndef __KERNEL__
# define __KERNEL__
#endif
#ifndef MODULE
# define MODULE
#endif
/* Oder auch mit gcc Schalter '-D' oder beides :)) */
#include
Ich würde gern wissen: Was ist da faul ? Und warum sind bei SuSE
Du musst dem Compiler bestimmte Schalter mitgeben __KERNEL__ & MODULE z.B., LINUX wäre hier eigentlich überflüssig.
/usr/include/asm und /usr/include/linux keine Links zu den Kernel-Sourcen?
Nein, das wahr mal. Ich hatte mal /usr/include/linux mit einen Link auf die Sourcen. Klappt gut als Workaround, mit dem Makefile geht's aber besser und flexibler. Bye Andre
participants (4)
-
Andre Heine
-
Andreas Winkelmann
-
henne
-
Jürgen Wieferink