关于内核级别的printk()函数的一个简单问题,如果我调用它将消息打印到哪里?(我在i386 arch上使用Ubuntu并使用最新的内核下载)
无法在任何地方找到它,
如果有人也能指出我为printk()函数提供某种手册的正确方向,那就太棒了!
答案 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
。