Wo kommt Ausgabe von Druck im Kernel gehen?
-
12-10-2019 - |
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?
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
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