¿Dónde salida de impresión en el kernel ir?
-
12-10-2019 - |
Pregunta
Soy la depuración de un controlador para Linux (en concreto servidor de Ubuntu 9.04), y hay varias sentencias printf en el código.
¿Dónde puedo ver el resultado de estas instrucciones?
EDIT1: Lo que estoy tratando de hacer es escribir al núcleo utilizando 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 al intentar sobreescribir el archivo / proc / net / madwifi / ath1 / fractel_config (con el tiempo, por supuesto, variar).
[ 8671.924873] proc write
[ 8671.924919]
Cualquier explicaciones sobre los defectos?
Solución
Depende de la distribución, pero muchos utilizan klogd(8)
para obtener los mensajes del kernel y, o bien hacer un registro en un archivo (a veces /var/log/dmesg
o /var/log/kernel
) o para el registro del sistema a través de syslog(3)
. En el último caso, donde las entradas del registro terminan dependerá de la configuración de syslogd(8)
.
Una nota sobre el comando dmesg
:. Los mensajes del núcleo se almacenan en un buffer circular, por lo que grandes cantidades de salida será sobrescrito
Otros consejos
Muchas veces los mensajes de nivel KERN_DEBUG
se filtran y hay que aumentar el nivel de registro de forma explícita. Se puede ver lo que los valores predeterminados del sistema están examinando /proc/sys/kernel/printk
. Por ejemplo, en mi sistema:
# cat /proc/sys/kernel/printk
4 4 1 7
El primer número muestra el nivel de registro de la consola es KERN_WARNING
(ver proc (5) páginas man "noreferrer nofollow" para más información). Este medio de KERN_NOTICE
, KERN_INFO
, y los mensajes KERN_DEBUG
serán filtrados desde la consola. Para aumentar el nivel de registro o nivel de detalle, el uso dmesg
$ sudo dmesg -n 7
$ cat /proc/sys/kernel/printk
7 4 1 7
A continuación, establecer el nivel de 7 (KERN_DEBUG
) permitirá a todos los niveles de los mensajes que aparecen en la consola. Para automatizar este, loglevel=
complemento N a los parámetros de arranque del kernel, donde N es el nivel de registro que desea ir a la consola o ignore_loglevel
para imprimir todos los mensajes del núcleo a la consola.
Usted obtendrá la salida con el comando dmesg
dmesg Salidas todos los mensajes del kernel. Encontrar a sus mensajes deseados sería difícil. Mejor uso dmesg y grep combinación y el uso de una etiqueta específica conductor en todas sus mensajes printk
. Que facilitará en la eliminación de todos los mensajes no deseados.
printk("test: hello world")
dmesg | grep test
Yo tenía este problema en Ubuntu 11.10 y 10.04 LTS, en la antigua edité /etc/rsyslog.d/50-default.conf, a continuación, reinicia rsyslog usando "sudo service rsyslog reinicio" a rsyslogd reinicio. Entonces funcionó.
Tenga en cuenta que Ubuntu usos * r * syslogd, no syslogd.
Se podría tratar de un nivel más alto que KERN_DEBUG, por ejemplo KERN_INFO. Según la configuración de los mensajes de menor prioridad que no se muestren.
En centos (al menos en centos 6.6) la salida será en / var / log / mensajes