linux ubuntu linux-kernel printk

linux - ¿A dónde va la salida de impresión en el kernel?



ubuntu linux-kernel (7)

Depende de la distribución, pero muchos usan klogd(8) para obtener los mensajes del kernel y los registrarán en un archivo (a veces /var/log/dmesg o /var/log/kernel ) o en el registro del sistema a través de syslog(3) . En este último caso, donde las entradas de registro terminarán dependerá de la configuración de syslogd(8) .

Una nota sobre el comando dmesg : los mensajes del kernel se almacenan en un búfer circular, por lo que se sobrescribirán grandes cantidades de salida.

Estoy depurando un controlador para Linux (específicamente el servidor Ubuntu Ubuntu 9.04), y hay varias declaraciones de printf en el código.

¿Dónde puedo ver el resultado de estas declaraciones?

EDIT1: Lo que estoy tratando de hacer es escribir en el kernel usando el sistema de archivos proc. El código de impresión es

static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data) { printk(KERN_DEBUG "writing fractel config/n"); ...

En kern.log, veo el siguiente mensaje cuando intento sobrescribir el archivo / proc / net / madwifi / ath1 / fractel_config (con tiempo variable, por supuesto).

[ 8671.924873] proc write [ 8671.924919]

¿Alguna explicación?


En centos (Atleast in centos 6.6) la salida estará en / var / log / messages


Muchas veces se KERN_DEBUG mensajes de nivel KERN_DEBUG y es necesario aumentar explícitamente el nivel de registro. Puede ver cuáles son los valores predeterminados del sistema al examinar /proc/sys/kernel/printk . Por ejemplo, en mi sistema:

# cat /proc/sys/kernel/printk 4 4 1 7

el primer número muestra que el nivel de registro de la consola es KERN_WARNING (consulte las páginas de manual de proc(5) para obtener más información). Esto significa que los KERN_NOTICE , KERN_INFO y KERN_DEBUG se filtrarán desde la consola. Para aumentar el nivel de registro o verbosidad, use dmesg

$ sudo dmesg -n 7 $ cat /proc/sys/kernel/printk 7 4 1 7

Aquí, establecer el nivel en 7 ( KERN_DEBUG ) permitirá que todos los niveles de mensajes aparezcan en la consola. Para automatizar esto, agregue loglevel= N a los parámetros de inicio del kernel donde N es el nivel de registro que desea que vaya a la consola o ignore_loglevel para imprimir todos los mensajes del kernel a la consola.


Obtendrás la salida con el comando dmesg


Puede intentar un nivel más alto que KERN_DEBUG, por ejemplo KERN_INFO. Dependiendo de su configuración, es posible que no se muestren los mensajes de prioridad más baja.


Tuve este problema en Ubuntu 11.10 y 10.04 LTS, en el anterior edité /etc/rsyslog.d/50-default.conf, luego reinicié rsyslog usando "sudo service rsyslog restart" para reiniciar rsyslogd. Entonces funcionó.

Tenga en cuenta que Ubuntu usa * r * syslogd, no syslogd.


dmesg genera todos los mensajes del kernel. Sería difícil encontrar los mensajes deseados. Utilice mejor la combinación dmesg y grep y use una etiqueta específica del controlador en todos sus mensajes de printk . Eso facilitará la eliminación de todos los mensajes no deseados.

printk("test: hello world") dmesg | grep test