2009-11-23 88 views
0

deal all,如何監控LKM中的系統日誌(printk)

我是編寫Linux內核模塊的新手。

我在linux內核源代碼(2.4.29)中使用了printk函數來調試和顯示消息。

現在,我必須閱讀我通過httpd添加的所有消息。

我試圖寫入文件而不是printk函數,所以我可以直接讀取文件。

但它不工作得很好。

所以,我有一個愚蠢的問題...

是有可能寫一個LKM監測系統日誌和重寫到另一個文件?

我的意思是說,當每次linux內核執行「printk」時,可以讓LKM知道消息?

非常感謝

回答

3

這是錯誤的方式做到這一點,因爲printk的已經這樣做了:它在文件/ proc/kmsg寫入。 你想要的是klogd,一個處理/ proc/kmsg的用戶空間實用程序。

另一種選擇是使用dmesg,這將輸出保持在printk的消息內核緩衝區的全部內容,但我建議你先閱讀鏈接的文章

+0

感謝您的回覆。 這很有幫助。 非常感謝! – douglas 2009-11-24 09:17:11

+0

@douglas,如果你發現他的回覆很有幫助,你可以考慮對它進行提升。 – 2009-11-25 06:43:20

0

你永遠,永遠,永遠想嘗試打開內核中的用戶空間安裝塊文件系統上的文件。想象一下,如果FS終止了,內核仍在嘗試寫入它。kaboom(其中許多其他原因,爲什麼它是一個壞主意):)正如shodanex所說,爲了您的目的,使用klogd更好。

現在,一般來說,你可以通過多種方式進行溝通有意義的數據到用戶空間程序,如:

  • 創建導致用戶空間的讀者,同時等待數據塊字符設備驅動程序。提供一個ioctl()接口,它可以讓其他程序找出多少郵件已發送等

  • 創建一個節點的/ proc/yourdriver來完成同樣的事情

真的,最實際的方法是使用printk()