Frage

Ich bin Debuggen einen Treiber für Linux (speziell Ubuntu Server 9.04), und es gibt mehr printf-Anweisungen im Code.

Wo kann ich die Ausgabe dieser Anweisungen sehen?

EDIT1: Was ich versuche zu tun ist, schreiben auf Kernel das proc-Dateisystem verwenden. Der Druckcode ist

static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data)
{
    printk(KERN_DEBUG "writing fractel config\n");
    ...

In kern.log, sehe ich die folgende Meldung, wenn ich versuche, die Datei / proc / net / madwifi / ATH1 / fractel_config (mit variierenden Zeit natürlich) zu überschreiben.

[ 8671.924873] proc write 
[ 8671.924919] 

Jede explainations?

War es hilfreich?

Lösung

Es hängt von der Verteilung, aber viele nutzen klogd(8) die Nachrichten aus dem Kernel zu bekommen und wird sie entweder log in eine Datei (manchmal /var/log/dmesg oder /var/log/kernel) oder in das Systemprotokoll über syslog(3). Im letzteren Fall, wo die Log-Einträge werden am Ende von der Konfiguration des syslogd(8) ab.

Eine Notiz über die dmesg Befehl:. Kernel-Meldungen in einem Ringpuffer gespeichert sind, so große Mengen an Ausgangs wird überschrieben

Andere Tipps

Viele Male KERN_DEBUG Level-Nachrichten gefiltert werden, und Sie müssen explizit die Protokollierungsebene erhöhen. Sie können sehen, was die Systemstandardwerte sind durch /proc/sys/kernel/printk untersuchen. Zum Beispiel auf meinem System:

# cat /proc/sys/kernel/printk
4       4       1       7

Die erste Zahl zeigt die Konsolenprotokollebene ist KERN_WARNING (siehe proc (5) man-Seiten für weitere Informationen). Dieses Mittel KERN_NOTICE, KERN_INFO und KERN_DEBUG Nachrichten werden von der Konsole gefiltert werden. Zur Erhöhung der Protokollstufe oder die Ausführlichkeit, Verwendung dmesg

$ sudo dmesg -n 7
$ cat /proc/sys/kernel/printk
7       4       1       7

Hier das Niveau bis 7 (KERN_DEBUG) Einstellung werden alle Ebenen von Nachrichten ermöglichen, sich auf der Konsole erscheinen. Um dies zu automatisieren, Add loglevel= N zu den Kernel-Boot-Parametern, wobei N die Protokollebene Sie an der Konsole oder ignore_loglevel wollen gehen alle Kernel-Meldungen an die Konsole zu drucken.

Sie werden den Ausgang mit dem Befehl dmesg

erhalten

dmesg gibt alle Meldungen vom Kernel. wäre es schwierig, die gewünschten Nachrichten zu finden. Bessere Nutzung dmesg und grep Kombination und eine Treiber spezifische Markierung in allen Ihren printk Nachrichten verwenden. Das wird erleichtern, alle unerwünschten Nachrichten zu eliminieren.

printk("test: hello world")

dmesg | grep test

hatte ich dieses Problem auf Ubuntu 11.10 und 10.04 LTS, auf dem ehemaligen I edited /etc/rsyslog.d/50-default.conf, dann neu gestartet rsyslog "sudo Service rsyslog restart" zum Neustart rsyslogd verwenden. Dann hat es funktioniert.

Beachten Sie, dass Ubuntu Anwendungen * r * syslogd, nicht syslogd.

Sie können ein höheres Niveau als KERN_DEBUG versuchen, zum Beispiel KERN_INFO. Je nach Konfiguration der niedrigste Priorität Meldungen möglicherweise nicht angezeigt werden.

In CentOS (Atleast in CentOS 6.6) wird der Ausgang in / var / log / messages

sein
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top