
Estou escrevendo um driver de dispositivo que imprime uma mensagem de errobuffer de anelsaída dmesg. Quero ver a saída dmesg
conforme ela muda.
Como posso fazer isso?
Responder1
dmesg
Versões relativamente recentesforneça uma opção de seguir( -w
, --follow
) que funciona de forma análoga a tail -f
.
Assim, basta usar o seguinte comando:
$ dmesg -wH
( -H
, --human
permite recursos fáceis de usar, como cores, tempo relativo)
Essas opções estão disponíveis, por exemplo, no Fedora 19.
Responder2
Você pode usar o watch
comando que se destina exatamente a coisas como esta
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
a $((LINES-6))
peça deve caber perfeitamente em seu terminal.
Responder3
Você realmente não pode monitorar a saída dmesg
diretamente.
No entanto, há grandes chances de que seu módulo não esteja imprimindo diretamente no buffer de anel do dmesg, mas use os recursos de registro do kernel (que serão exibidos por dmesg
). Se você syslog
tiver algumas configurações sensatas (por exemplo, padrão), essas mensagens provavelmente também aparecerão no kern.log
arquivo de log.
Então você pode fazer algo como:
tail -f /var/log/kern.log
Responder4
Se você estiver usando um sistema embarcado, comoOcupadoBoxisso é comum em sistemas comoOpenWrt, ele tem funcionalidade muito limitada e apenas 2 a 3 sinalizadores são suportados.
Se você deseja uma maneira rápida e suja de imprimir a saída do dmesg na tela continuamente à medida que os eventos mudam, um simples loop Bash funciona bem. Não é o ideal, mas como mencionei, faltam muitas funções no dmesg do BusyBox. Acho que o seguinte tem o mesmo efeito quando inserido na linha de comando:
$ while true; do dmesg -c ; sleep 1 ; done
Você pode sair do loop com Ctrl+ C. O sleep 1 serve para impedir que ele atinja a CPU desnecessariamente, e o sinalizador -c limpa o buffer em cada chamada para que você não veja resultados repetidos a cada segundo.