私はドライバを作成しており、通常は独自のログレベルスキームを実装しています。しかし今回は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
およびINFO
はDEBUG
まだログ(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メッセージをフィルタリングする必要があります。カーネルがこれを行うようにするのではなく、ユーザー空間プログラムに任せるのがデザイン決定のようです。