2010-10-27 17 views
28

Sólo una pregunta rápida sobre la función printk() en el nivel kernel, si llamo a esto ¿dónde se imprimirá el mensaje? (Estoy usando Ubuntu en i386 arch con la última descarga del núcleo)¿A dónde imprime printk()?

no puedo encuéntrelo en cualquier lugar,

Si alguien pudiera indicarme la dirección correcta para algún tipo de manual para la función printk() sería genial.

Respuesta

31

dmesg debería mostrar printk mensajes.

2

La página de manual de printk(9) tiene un muy pequeño fragmento de información sobre él. En resumen, se envía al búfer de registro, donde un daemon syslog puede recogerlo y manejarlo. También se envía a la consola si su nivel de registro es lo suficientemente alto (consulte dmesg(1) para ese bit).

13

printk Los mensajes van al almacenamiento intermedio de mensajes de registro del kernel, que pueden exponerse de diversas maneras dependiendo de la configuración del sistema. El comando de shell dmesg los mostrará, y también deberían estar copiados a los archivos en /var/log por el daemon syslog. Es posible hacer que se conecten a una consola serie o a un terminal virtual en modo texto, pero no recuerdo cómo.

+0

lo encontré en el syslog, gracias – molleman

3

Si ha puesto algunas declaraciones printk() en el módulo kernel para depurar e intentar capturar las salidas tal como están impresas, lo que está buscando es klogd. Realice un man klogd para obtener más detalles y opciones.

Aquí hay un script de envoltorio para klogd que codifiqué hace un tiempo para aliviar algo de dolor depuración rápida:

#!/bin/bash 

function bashtrap() 
{ 
     echo 
     echo -n "[+] stopping klogd ... " 
     pids=`ps aux | grep klogd | awk '{print $2}'` 

     for pid in $pids 
     do  
       kill SIGTERM $pid 2> /dev/null 

     done 
     echo "done" 

     if [ $1 ] 
     then 
       exit; 
     fi 
} 

sync 
bashtrap 

klogd -x -f - -n -c 8 2>&1 1 | tee klog.txt & klog_pid=$!; 

echo "[+] klogd started" 
echo "[+] press ctrl+c to exit ... $klog_pid" 

sync 
trap "bashtrap 1" SIGINT 

while [ 1 ] 
do 
     sleep 3 
     echo -n "." 
done 

ps aux | grep klogd 
2

Busque /dev/kmsg en su sistema.