dmesg
muestra lo que está en el búfer del núcleo, mientras que logger
es para syslogd
. Creo que si desea imprimir cosas en el búfer del núcleo, deberá crear un controlador que utilice la printk()
función del núcleo. Si solo lo quieres /var/log/messages
, entonces con una configuración "normal" creo que lo que has hecho logger
ya está bien.
El ejemplo más básico de un controlador con printk()
sería:
Hola 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
Entonces:
$ make
$ sudo insmod hello.ko
$ dmesg | tail -n1
[7089996.746366] Hello world
http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121 para más ...
make -C ...
archivo Makefile en lugar de una pestaña, por lo que copiar el contenido anterior del archivo Makefile no funciona, más aquí . Parece que no puedo agregar esto en una edición ... Gracias por cierto, gran respuesta.Puede, como root, escribir
/dev/kmsg
para imprimir en el búfer de mensajes del núcleo:He probado esto en mi servidor y en un dispositivo Linux incorporado, y funciona en ambos, así que voy a suponer que funciona prácticamente en todas partes.
fuente
echo Some message | sudo tee /dev/kmesg
como no root.kmsg
no eskmesg
pero también me confundo con eldmesg
que tiene el e!Basado en el módulo de Kyle anterior:
Para hacer un printk desde el espacio del usuario:
fuente
La respuesta de @ Calandoa ya no funciona para Kernel +3.10. Combinó su código y el código de ejemplo que encontré aquí . Luego mejoró la calidad del código ...
Código guardado en printk_user.c
Hacer usando este Makefile
fuente
Basado en la respuesta de Kyle, aquí hay un tutorial rápido que muestra cómo hacerlo.
fuente
Pensé que seguiría adelante e incluiría un ejemplo completo de algo que la gente puede compilar y ejecutar para aquellos que no son tan hábiles con C basándose en la respuesta de @BuvinJ
Para ejecutar, guarde lo anterior como kmsg.c y gcc kmsg.c -o kmsg; sudo ./kmsg "cadena que desea agregar a / dev / kmsg"
fuente
Solo quería algunos mensajes de depuración rápida en un demonio escrito por otra persona en un núcleo con cumplimiento cruzado. Me encontré con un error de compilación al intentar usarlo
printk
, ya<linux/module.h>
que no podía ser incluido. En lugar de luchar con eso en exceso (para hacer esto de la manera correcta) hice trampa y usé la siguiente solución perezosa pero funcional de 5 minutos:fuente