Módulo de kernel: ¿cómo obtener la salida de la consola?
-
29-10-2019 - |
Pregunta
Estoy escribiendo un módulo del kernel y quiero poder imprimir algo en la salida de la consola cuando lo cargue usando insmod module.ko
.
Intenté usar
printk(KERN_EMERG "test kernel emergency\n");
pero no aparece nada en mi consola.Sin embargo, sí aparece en dmesg
.
Información adicional:
Estoy usando un Intel x86 de 32 bits con linux-3.0.0
y cat /proc/sys/kernel/printk
proporciona4 4 1 7
Solución
1- asegúrese de estar en modo terminal completo (presione Alt + Ctrl + f1)
2- en lugar de printk(KERN_EMERG "test kernel emergency\n");
probar
printk(KERN_ALERT "test kernel alert\n");
Otros consejos
Jens,
Las salidas de printk se envían al kernel y se recopilan mediante el demonio syslogd. dmesg se hace eco de los datos recopilados por el demonio syslogd.
Es posible que su consola no imprima este mensaje (desde donde llamó a insmod) si está utilizando la versión gráfica de linux.He intentado esto en ubuntu y no imprime los mensajes de printk incluso si el nivel de registro es ALERTA o EMERGENCIA.
Necesita modificar su syslog para imprimir mensajes de emergencia del kernel en la consola (o usuarios específicos o ttys).
Hay muchos demonios de syslog, si no controlas el que usas y no eres root, no tienes suerte.Si controlas el que usas, syslog-ng es bastante bueno y tiene ejemplos de cómo hacer esto en su manual.