Estou escrevendo um driver e, geralmente, eu implemento meu próprio esquema de nível de log. No entanto, desta vez, imaginei que tentaria utilizar o esquema printk que é incorporado ao Linux.
Vejo que posso ajustar as configurações do nível de log do printk exibidas por
[sri@localhost ~]$ sudo cat /proc/sys/kernel/printk
4 4 1 7
Eu posso configurá-los executando
dmesg -n 3
ou
[sri@localhost ~]$ sudo bash -c 'echo 3 > /proc/sys/kernel/printk'
[sri@localhost ~]$ sudo cat /proc/sys/kernel/printk
3 4 1 7
No meu código de driver eu tenho
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");
que resulta em
[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
Portanto, apesar do nível de log ser 3 (também conhecido como KERN_ERR
) WARNING
, NOTICE
, INFO
e DEBUG
estão sendo exibidos no log ( dmesg
e /var/log/messages
).
Estou começando a suspeitar que /proc/sys/kernel/printk
não tem efeito sobre dmesg
ou /var/log/messages
.
O que não estou entendendo ou fazendo errado? Se este é o comportamento esperado, existem outros métodos embutidos para ajustar a verbosidade de um driver?
Estou executando o 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