printkメッセージをフィルタリングできません。

printkメッセージをフィルタリングできません。

私はドライバを作成しており、通常は独自のログレベルスキームを実装しています。しかし今回はLinuxに組み込まれたprintk方式を活用してみたかったです。

表示されたprintkログレベルの設定を調整できることがわかりました。

[sri@localhost ~]$ sudo cat /proc/sys/kernel/printk
4   4   1   7

実行して設定できます。

dmesg -n 3

または

[sri@localhost ~]$ sudo bash -c 'echo 3 > /proc/sys/kernel/printk'
[sri@localhost ~]$ sudo cat /proc/sys/kernel/printk
3   4   1   7

私のドライバーコードから

printk(KERN_EMERG   "KERN_EMERG");
printk(KERN_ALERT   "KERN_ALERT");
printk(KERN_CRIT    "KERN_CRIT");
printk(KERN_ERR     "KERN_ERR");
printk(KERN_WARNING "KERN_WARNING");
printk(KERN_NOTICE  "KERN_NOTICE");
printk(KERN_INFO    "KERN_INFO");
printk(KERN_DEBUG   "KERN_DEBUG");

これにより

[sri@localhost scull]$ sudo dmesg | grep KERN
[ 3072.247079] KERN_EMERG
[ 3072.247084] KERN_ALERT
[ 3072.247087] KERN_CRIT
[ 3072.247089] KERN_ERR
[ 3072.247092] KERN_WARNING
[ 3072.247093] KERN_NOTICE
[ 3072.247096] KERN_INFO
[ 3072.247097] KERN_DEBUG

したがって、ログレベルが3(別名KERN_ERR)にもかかわらずWARNING、、、NOTICEおよびINFODEBUGまだログ(dmesgおよび/var/log/messages)に表示されます。

/proc/sys/kernel/printkこれが影響を与えるのか影響しないのか疑問になり始めました。dmesg/var/log/messages

私が理解していないか間違っているのは何ですか?これが期待される動作である場合、ドライバの詳細を調整する他の組み込み方法はありますか?

私はFedora Core 20を実行しています:

[sri@localhost scull]$ uname -a
Linux localhost.localdomain 3.16.6-203.fc20.x86_64 #1 SMP Sat Oct 25 12:44:32 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

ベストアンサー1

/proc/sys/kernel/printkシステムコンソールに印刷される内容を制御するため、dmesgを使用して表示される印刷は予想される動作です。たとえば、dmesg出力をフィルタリングできますdmesg --level=warn(参照dmesg --help)。

動的ロギングレベルでは、printkメッセージをフィルタリングする必要があります。カーネルがこれを行うようにするのではなく、ユーザー空間プログラムに任せるのがデザイン決定のようです。

おすすめ記事