2010-10-27 44 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您的系統上。