Níveis de log do printk() para depurar o kernel pela console

Assim como em programas em C de nível de usuário, que usamos a função printf() como ferramenta de depuração, no kernel é comum utilizar o printk(). ;-) Ainda mais quando se trata de Linux embarcado.

printk() imprime a mensagem em um arquivo de log (normalmente, /var/log/messages) ou diretamente para a console, dependendo da configuração do syslog. No entanto, durante a depuração do kernel é interessante (e bastante produtivo) que algumas mensagens sejam enviadas na console. Isso é possível especificando um nível de log critico, como por exemplo:

printk(KERN_CRIT, "Alguma coisa importante aconteceu aqui...\n");

A mensagem acima deverá aparecer tanto na console quanto no arquivo de log.

Existem oito possíveis níveis de log:

KERN_EMERG
KERN_ALERT
KERN_CRIT
KERN_ERR
KERN_WARNING
KERN_NOTICE
KERN_INFO
KERN_DEBUG

Quando nenhuma prioridade é definida explicitamente, o printk() assume uma prioridade default (DEFAULT_MESSAGE_LOGLEVEL).

Outra coisa útil é poder alterar o nível de log que é enviado para a console, em tempo de execução. Isso pode ser feito através do /proc filesystem da seguinte forma:

echo 8 > /proc/sys/kernel/printk

Isso fará com que TODAS as mensagens do kernel apareçam na console (Note que estamos falando de console mesmo e não um terminal qualquer, tipo xterm ou coisa parecida). Da mesma forma, para fazer com que nenhuma mensagem seja enviada para a console, basta fazer:

echo 0 > /proc/sys/kernel/printk

-veiga

Para mais informações:

Debugging by Printing:
http://book.chinaunix.net/special//ebook/oreilly/ldd3…

Using printk():
http://www.wplug.org/pipermail/wplug/2002-Novemb…

Leave a Reply