linux-l: printk

Jan-Benedict Glaw jbglaw at lug-owl.de
Di Jul 17 13:47:36 CEST 2001


On Tue, Jul 17, 2001 at 01:30:15PM +0200, Sascha Knapp wrote:
> Ich bin vielleicht ein Linux neu einsteiger, aber ein paar
> Programmierkentnisse, habe ich schon, versuche grade einen Treiber für eine Watchdogkarte zu
> schreiben, ist ein pci model und wollte mit printk was auf die Konsole
> ausgeben. Und da ich den Befehl einfach nicht ans Laufen bekam, habe ich auf ein
> einfaches Programm zurück gegriffen, um zu sehen, wie der Befehl generell zu
> handhaben ist.

Also, in "normalen" Programmen kannst Du printk() nicht benutzen.
printk() gibt seine Ausgaben direkt in einen Kernel-internen Ring-Buffer,
auf den Du natürlich vom userspace aus nicht zugreifen kannst.
Beispiel:

	printk(KERN_DEBUG "Counter ist cnt=%d\n", cnt);

Zwischen KERN_DEBUG und dem String kommt _kein_ Komma. KERN_DEBUG ist
als Textkonstante #define'd und wird vom syslogd benutzt, um die
Meldung zu klassifizieren. Außerdem kann anhand dieses Wertes der
Kernel entscheiden, ob die Meldung überhaupt ausgegeben werden soll.
Das wird sie nämlich nicht, wenn der log level niedriger ist.

Wenn Du das "\n" vergißt, dann kann's *ziemlich* lange dauern, bis
Du Deine Meldung siehst...

MfG, JBG
PS: Andere Werte (statt KERN_DEBUG) findest Du in ./include/linux/kernel.h




Mehr Informationen über die Mailingliste linux-l