我编写了一个 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>