2010-10-27 43 views
28

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

不能找到它在任何地方,

如果有人也可以指向我的某种手册的printk()函数正确的方向,这将是伟大的!

回答

31

dmesg应显示printk消息。

2

printk(9)手册页有一个非常它的一点点信息。总之,它被发送到日志缓冲区,syslog守护程序可以在该日志缓冲区中进行处理。如果日志级别足够高,它也会发送到控制台(请参阅该位的dmesg(1))。

13

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

+0

在系统日志中发现它,谢谢 – molleman 2010-10-27 19:23:44

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 
2

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