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