簡體   English   中英

printk()不在/ var / log / messages中打印

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM