Ich habe ein Hello-Word-Modul geschrieben, das einen Printk ausführt, wenn es auf der Ebene ALERT geladen wird, und einen weiteren Printk, wenn es auf der Ebene INFO freigegeben wird:
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int init_hello(void)
{
printk(KERN_ALERT "init called in hello\n");
return 0;
}
static void cleanup_hello(void)
{
printk(KERN_INFO "cleanup called in hello\n");
}
module_init(init_hello);
module_exit(cleanup_hello);
Dann habe ich versucht, die Kernel-Meldungen nach Level zu filtern. Dazu habe ich dmesg -l verwendet. Ich möchte die Meldungen aber so sehen, wie sie erscheinen. Deshalb habe ich
tail -f /var/log/kern.log
Mit diesem Befehl kann ich die Nachrichten sehen, aber wie kann ich die Nachrichten nach Level filtern?
Ich verwende Ubuntu 14.04 mit Kernel 3.16.4
Anschließend habe ich versucht, die Nachrichten mit folgendem Befehl auf der Konsole auszugeben:
echo 7 7 7 7 > /proc/sys/kernel/printk
Es wird jedoch keine Meldung auf der Konsole ausgegeben. Ich habe versucht, die Konsolenebene mit dmesg -n alert einzustellen, aber das funktioniert auch nicht. Daher bin ich mir nicht sicher, was das Einstellen der Konsolenebene mit dmesg oder /proc/sys/kernel/printk bewirkt.
Wie kann ich diese Ebenen effizient nutzen?
Vielen Dank für Ihre Hilfe
Antwort1
Unter Ubuntu 16.04, Util-Linux 2.27.1 können Sie Folgendes tun:
dmesg --level err,warn --raw -w
Wo:
-w
verfolgt die Nachrichten, sobald sie eingehen--level
schränkt ein, welche Ebenen angezeigt werden--raw
zeigt den Pegel am Anfang der Meldung an, z. B. als<3>