não pode filtrar mensagens do printk

3

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
    
por shrewmouse 31.10.2014 / 18:04

1 resposta

1

/proc/sys/kernel/printk controla o que é impresso no console do sistema, portanto, as impressões exibidas com o dmesg são o comportamento esperado. Você pode filtrar a saída do dmesg com, e. dmesg --level=warn (consulte dmesg --help ).

Com um nível de log dinâmico, algo precisa filtrar as mensagens do printk. Parece que a decisão do projeto é não fazer o kernel fazer isso, mas deixar isso para os programas userspace.

    
por 12.01.2015 / 11:53