2012-10-02 108 views
1

我正在運行嵌入式Linux(Angstrom distribution,for Atmel)。我想在關機期間閱讀內核消息日誌,與dmesg一樣。基本上我通過在內核代碼中插入printk()來探索一些問題,現在我想看看他們的輸出。LInux內核日誌

我發現日誌不會在系統啓動時自動啓動(我怎麼能?),並且我無法使用klogd命令獲取任何內容。

+0

嗨@stef,請你試試'cat/var/log/messages'或'cat/var/log/kern.log'? –

+1

我還沒有那些文件,這裏有我想要創建的文件。 – stef

+0

顯然angstrom不會將日誌存儲在平常的地方,我也很難找到任何信息。能夠尾巴-f或旋轉日誌會很好...... – gcb

回答

0

如果klogd啓動太遲或停止得太早以至於無法看到您的消息,也許您可​​以試試Netconsole

當然,如果您有嵌入式主板的網絡訪問權限。這個模塊很容易配置,過去我已經成功使用了它幾次。 請注意,如果您希望能夠在引導過程的早期/晚期看到消息,則必須在內核(使用以太網驅動程序)內編譯它,而不是作爲模塊進行編譯。

此外,檢查您的默認日誌級別使您的printk()進行顯示(日誌等級=內核引導參數)

0

的可信賴的RS232串行控制檯可能是你在像這些情況的朋友。

除非您已經採取措施禁用它,否則內核日誌消息幾乎肯定會在那裏找到它們。

0

不同的發行版可能會將/ proc/kmsg的輸出重定向到任何他們喜歡的物理日誌文件或虛擬設備(/ dev/xxx)。但「的/ proc/kmsg」是核心日誌的原始最終來源,因爲內核真正實現了環行緩衝器動作裏面FS的/ proc/kmsg.c:

static const struct file_operations proc_kmsg_operations = { 
     .read   = kmsg_read, 
     .poll   = kmsg_poll, 
     .open   = kmsg_open, 
     .release  = kmsg_release, 
     .llseek   = generic_file_llseek, 
}; 

下面是詳細信息:

How to read ring buffer within linux kernel space?

所以你怎麼看到的輸出是這樣的:

須藤尾-f的/ proc/kmsg

而且你只能看到所有消息根兒在你發出這個命令之後 - 在環形緩衝區中以前的所有消息都不會被打印出來。所以看到物理文件輸出,可以搜索 「的/ proc/kmsg」 的用戶:

須藤lsof的| grep的proc.kmsg

和我的機器表示這樣的:

rsyslogd 1743    syslog 3r  REG    0,3   0 4026532041 /proc/kmsg 
in:imuxso 1743 1755   syslog 3r  REG    0,3   0 4026532041 /proc/kmsg 
in:imklog 1743 1756   syslog 3r  REG    0,3   0 4026532041 /proc/kmsg 
rs:main 1743 1757   syslog 3r  REG    0,3   0 4026532041 /proc/kmsg 

所以現在是PID 1743,讓我們來看看這些文件FD由1743打開:

sudo ls -al /proc/1743/fd 

lrwx------ 1 root root 64 Dec 11 08:36 0 -> socket:[14472] 
l-wx------ 1 root root 64 Dec 11 08:36 1 -> /var/log/syslog 
l-wx------ 1 root root 64 Dec 11 08:36 2 -> /var/log/kern.log 
lr-x------ 1 root root 64 Dec 11 08:36 3 -> /proc/kmsg 
l-wx------ 1 root root 64 Dec 11 08:36 4 -> /var/log/auth.log 

所以你去那裏,PID 1743是rsyslogd,它重定向的/ proc/kmsg像文件/ var的輸出/ log/syslog和/ var/lo g/kern.log等