私は、ALERT レベルでロードされたときに printk を実行し、INFO レベルでリリースされたときに別の printk を実行する hello word モジュールを作成しました。
#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>