Linux printk()打印到哪里?

Linux printk()打印到哪里?,linux,debugging,linux-kernel,Linux,Debugging,Linux Kernel,只是一个关于内核级printk()函数的快速问题,如果我调用这个函数,消息将打印到哪里?(我正在i386 arch上使用Ubuntu和最新的内核下载) 到处都找不到 如果有人也能为我指明正确的方向,为printk()函数编写一些手册,那就太好了 printk(9)手册页上有非常少量的信息。简言之,它被发送到日志缓冲区,syslog守护进程可以在那里拾取并处理它。如果日志级别足够高,它也会被发送到控制台(请参见该位的dmesg(1)。printk消息会进入内核日志消息缓冲区,该缓冲区可以根据系统配

只是一个关于内核级printk()函数的快速问题,如果我调用这个函数,消息将打印到哪里?(我正在i386 arch上使用Ubuntu和最新的内核下载)

到处都找不到


如果有人也能为我指明正确的方向,为printk()函数编写一些手册,那就太好了

printk(9)手册页上有非常少量的信息。简言之,它被发送到日志缓冲区,syslog守护进程可以在那里拾取并处理它。如果日志级别足够高,它也会被发送到控制台(请参见该位的
dmesg(1)

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

dmesg
应该显示
printk
消息。

如果您在内核模块中放置了一些
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

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