我正在運行嵌入式Linux(Angstrom distribution,for Atmel)。我想在關機期間閱讀內核消息日誌,與dmesg一樣。基本上我通過在內核代碼中插入printk()來探索一些問題,現在我想看看他們的輸出。LInux內核日誌
我發現日誌不會在系統啓動時自動啓動(我怎麼能?),並且我無法使用klogd命令獲取任何內容。
我正在運行嵌入式Linux(Angstrom distribution,for Atmel)。我想在關機期間閱讀內核消息日誌,與dmesg一樣。基本上我通過在內核代碼中插入printk()來探索一些問題,現在我想看看他們的輸出。LInux內核日誌
我發現日誌不會在系統啓動時自動啓動(我怎麼能?),並且我無法使用klogd命令獲取任何內容。
如果klogd啓動太遲或停止得太早以至於無法看到您的消息,也許您可以試試Netconsole?
當然,如果您有嵌入式主板的網絡訪問權限。這個模塊很容易配置,過去我已經成功使用了它幾次。 請注意,如果您希望能夠在引導過程的早期/晚期看到消息,則必須在內核(使用以太網驅動程序)內編譯它,而不是作爲模塊進行編譯。
此外,檢查您的默認日誌級別使您的printk()進行顯示(日誌等級=內核引導參數)
的可信賴的RS232串行控制檯可能是你在像這些情況的朋友。
除非您已經採取措施禁用它,否則內核日誌消息幾乎肯定會在那裏找到它們。
不同的發行版可能會將/ 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等
嗨@stef,請你試試'cat/var/log/messages'或'cat/var/log/kern.log'? –
我還沒有那些文件,這裏有我想要創建的文件。 – stef
顯然angstrom不會將日誌存儲在平常的地方,我也很難找到任何信息。能夠尾巴-f或旋轉日誌會很好...... – gcb