[英]printk() doesn't print in /var/log/messages
我的操作系統Ubuntu 12.04。 我編寫了此內核模塊,並使用了insmod和rmmod命令,但/ var / log消息中沒有任何內容。 我該如何解決這個問題?
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
檢查syslog守護進程是否正在運行,因為如果我正確的話,這是將printk消息從內核環/日志消息緩沖區復制到/ var / log / messages的過程 。 可以使用dmesg實用程序/命令查看printk消息,或者消息將在/ var / log / messages中。 如果設置了正確的日志級別,則printk消息將立即顯示在控制台上,無需使用dmesg或無需檢入/ var / log / messages。 printk調試消息也可以是/ var / log / syslog的一部分 。
現代Linux發行版不再使用rsyslog(或任何其他syslog守護程序)。 它們依賴systemd一部分的journald,因此缺少/ var / log / messages文件,因此您必須使用journalctl命令來讀取系統日志。
首先,應使用此命令檢查模塊是否已正確加載
lsmod | grep "hello-1" //hello-1 is the name of your module
由於您編寫了內核模塊,因此會打印一些消息。 可以在/ var / log / syslog中找到來自內核及其模塊的消息,或者您可以使用dmesg命令查看此類消息。 當模塊打印“ Hello World 1.”時,應使用以下命令查看模塊中的消息。
dmesg | grep "Hello World 1."
在/etc/syslog.conf中的* .info ...行中查找。 這些似乎控制着通過printk記錄的內容。
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
我發現/ proc / sys / kernel / printk只能真正控制控制台的日志記錄級別,而不是控制文件的日志記錄。 而且我猜check syslog也正在運行;)我們遇到了完全相同的問題,KERN_INFO不會記錄文件,並且此問題已得到解決。 hth
我試圖通過鍵入以下命令來打印內核緩沖區: dmesg
這將打印寫在printk
的數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.