printk()打印到哪里?

时间:2010-10-27 18:52:34

标签: linux debugging linux-kernel

关于内核级别的printk()函数的一个简单问题,如果我调用它将消息打印到哪里?(我在i386 arch上使用Ubuntu并使用最新的内核下载)

无法在任何地方找到它,

如果有人也能指出我为printk()函数提供某种手册的正确方向,那就太棒了!

5 个答案:

答案 0 :(得分:32)

dmesg应显示printk条消息。

答案 1 :(得分:13)

printk消息转到内核日志消息缓冲区,可以根据系统配置以各种方式公开。 shell命令dmesg将显示它们,并且它们也应该被/var/log守护程序复制到syslog中的文件。可以将它们记录到串行控制台或文本模式虚拟终端,但我不记得如何随便。

答案 2 :(得分:3)

如果您在内核模块中放置了一些printk()语句来调试并尝试在打印输出时捕获输出,那么您要查找的是klogd。执行man klogd以获取更多扣留和选项。

这是klogd的一个包装脚本,我编写了一段时间来缓解一些快速调试的痛苦:

#!/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

答案 3 :(得分:2)

printk(9)手册页上有一些非常的小信息。简而言之,它被发送到日志缓冲区,syslog守护程序可以在其中拾取并处理它。如果其loglevel足够高,它也会被发送到控制台(请参阅dmesg(1)该位)。

答案 4 :(得分:2)

在您的系统上查找/dev/kmsg