dmesg
exibe o que está no buffer do kernel, enquanto que logger
é para syslogd
. Eu acho que se você quiser imprimir coisas no buffer do kernel, precisará criar um driver que use a printk()
função kernel. Se você quiser apenas isso /var/log/messages
, com uma configuração "normal", acho que o que você fez logger
já está bem.
O exemplo mais básico de um driver com printk()
seria:
hello.c:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk(KERN_INFO "Hello world\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world\n");
}
Makefile:
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
Então:
$ make
$ sudo insmod hello.ko
$ dmesg | tail -n1
[7089996.746366] Hello world
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121 para obter mais ...
make -C ...
Makefile em vez de uma guia, portanto, copiar o conteúdo acima do Makefile não funciona - mais aqui . Parece que não consigo adicionar isso em uma edição ... Obrigado, a propósito, ótima resposta.Você pode, como root, gravar em
/dev/kmsg
para imprimir no buffer de mensagens do kernel:Eu testei isso no meu servidor e em um dispositivo Linux incorporado, e ele funciona em ambos, então eu vou assumir que ele funciona praticamente em todos os lugares.
fonte
echo Some message | sudo tee /dev/kmesg
como não raiz.kmsg
não é,kmesg
mas eu também confundir com odmesg
que tem o e!Com base no módulo de Kyle acima:
Para imprimir um a partir do espaço do usuário:
fonte
A resposta do @ Calandoa não funciona mais para o Kernel +3.10. Combinou o código dele e o código de exemplo que encontrei aqui . Em seguida, melhorou a qualidade do código ...
Código salvo em printk_user.c
Faça usando este Makefile
fonte
Baseado na resposta de Kyle, aqui está um rápido tutorial mostrando como fazer exatamente isso.
fonte
Achei que eu iria em frente e incluiria um exemplo completo de algo que as pessoas podem compilar e executar para aqueles que não são tão habilidosos com C com base na resposta de @BuvinJ
Para executar, salve os itens acima como kmsg.c e gcc kmsg.c -o kmsg; sudo ./kmsg "string que você deseja adicionar ao / dev / kmsg"
fonte
Eu só queria algumas mensagens de depuração rápidas em um daemon escrito por outra pessoa em um kernel compatível. Corri para um erro de compilação ao tentar usar
printk
, pois<linux/module.h>
não pôde ser incluído. Em vez disso, lute com isso excessivamente (para fazer isso da maneira certa), enganei e usei a seguinte solução preguiçosa, mas funcional, de 5 minutos:fonte