Ri:linux-l: printk

Ihno Krumreich ihno at fh-brandenburg.de
Di Jul 17 16:15:05 CEST 2001


> 
> > Ok, dann will ich mal eine Fehlerbeschreibung geben, 
> > 
> > #define __KERNEL__
> > #define MODULE
> > 
> > #include  <linux/kernel.h>
> > 
> > int main()
> > {
> >    printk(KERNEL_NOTICE "Hallo Welt!");
> >    return 0;
> > }
> > 
> > Das war das Programm und jetzt der Fehler
> > 
> > undefined reference to `printk`
> 
> Klar, printk ist eine reine Kernelfunktion, d.h. sie ist nur
> dazu gedacht, dass der Kernel Meldungen auf die Konsole
> schreibt. Sie ist daher auch nicht in der libc enthalten, so dass
> du ein undefined reference bekommst. 
> Um auf stdout zu schreiben, kannst du printf verwenden. Mit
> fprintf kannst du an einen beliebigen File-handle schreiben.
> Wenn es sich nicht um stdin, stdout, stderr handelt, musst du
> das File erst mit fopen oeffnen, welches dann einen neuen
> File-handle zurueckliefert. Das ganze funzt auch mit devices,
> z.B. /dev/console oder /dev/tty ( die 2. virtuelle Console, die du mit
> alt-control-F2 erreichst.) Um diese zu oeffnen, musst du allerding 
> root sein, in der Gruppe tty sein, oder dir muss das Device 
> gehoeren, sprich du hast dich dort bereits eingeloggt.
> Anstatt fprintf, fopen, fclose, ... kannst du auch die system-calls
> open, close, read und write benutzen, aber das ist nicht so komfortabel,
> und nicht unbedingt auf andere BSe portabel. 
> Um Meldungen an den syslog daemon zu schicken, gibt´s die
> Funktion syslog(), die aehnlich funzt wie fprintf. 
> 
Treiberentwicklung im Kernel ist AETZEND. Laest sich bis zu einem
gewissen Grade natuerlich nicht vermeiden. Um nicht Kernel-relevante
Teile zu Testen lohnt sich meiner Mainung nach eine kleine Simulation/Emulation.

also in der Form

#define	printk(a,b,c) printf(b,c)

Damit sollte sich das Programm im User-Space uebersetzen lassen und
man kann Funktionalitaeten Pruefen die den Kernel NICHT zwingend
vorraussetzen. 

Habe das ganze bei einem Solaris-Treiber sehr weit getrieben
und viele Fehler in meinem Treiber gefunden.

Gruss

Ihno Krumreich

==============================================================================
Ihno Krumreich       | Phone (49) 3381 355438          U   U N   N  III  X   X
FH Brandenburg       | email: ihno at fh-brandenburg.de   U   U NN  N   I    X X
Magdeburgerstr. 50   | FAX (49) 3381 355499            U   U N N N   I     X
D-14770 Brandenburg  | NIC:IK139  RIPE:IK255-RIPE      U   U N  NN   I    X X
                                                        UUU  N   N  III  X   X
___________________________________________________________________
   NT is not the answer, it's the question and the answer is NO



Mehr Informationen über die Mailingliste linux-l