我編寫了一個 hello word 模組,當它在等級 ALERT 中載入時執行 printk,並在等級 INFO 中釋放時執行另一個 printk:
#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);
然後我嘗試按級別過濾內核訊息,我使用 dmesg -l 做到了這一點,但我想查看出現的訊息,所以我使用
tail -f /var/log/kern.log
使用此命令我可以看到訊息,但如何按級別過濾訊息?
我正在使用核心為 3.16.4 的 Ubuntu 14.04
然後我嘗試使用以下命令將訊息列印到控制台:
echo 7 7 7 7 > /proc/sys/kernel/printk
但它不會向控制台列印任何訊息。我嘗試使用 dmesg -n Alert 設定控制台級別,但它也不起作用,因此我不確定透過 dmesg 或 /proc/sys/kernel/printk 設定控制台級別會做什麼。
我怎樣才能有效地使用這些等級?
感謝您的協助
答案1
在 Ubuntu 16.04、util-linux 2.27.1 上,您可以執行下列操作:
dmesg --level err,warn --raw -w
在哪裡:
-w
跟隨訊息的到來--level
限制將顯示哪些級別--raw
顯示訊息開頭的級別,例如<3>