【问题标题】:printk() doesn't print in /var/log/messagesprintk() 不在 /var/log/messages 中打印
【发布时间】:2013-05-09 15:25:58
【问题描述】:

我的操作系统 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");
 }

【问题讨论】:

  • 尝试使用 KERN_ALERT 而不是 KERN_INFO 看看这是否是因为您的日志级别设置得太高。您还可以更改日志级别。
  • 如何更改日志级别?
  • klogd -c n,其中 n 是级别。还有其他设置方法。
  • echo '7 7 7 7' &gt; /proc/sys/kernel/printk 见:kernel.txt

标签: linux linux-kernel kernel-module kernel


【解决方案1】:

检查 syslog 守护进程是否正在运行,因为这是将 printk 消息从内核环/日志消息缓冲区复制到 /var/log/messages 的进程,如果我我是正确的。可以使用 dmesg 实用程序/命令查看 printk 消息,或者消息将在 /var/log/messages 中。如果设置了正确的日志级别,那么 printk 消息将立即显示在控制台上,无需使用 dmesg 或无需检查 /var/log/messages。 printk 调试消息也可以是 /var/log/syslog 的一部分。

【讨论】:

    【解决方案2】:

    现代 Linux 发行版不再使用 rsyslog(或任何其他 syslog 守护程序)。它们依赖于 systemd 的一部分 journald,因此 /var/log/messages 文件丢失,您必须使用 journalctl 命令读取系统日志。

    【讨论】:

      【解决方案3】:

      首先,您应该使用此命令检查您的模块是否正确加载

      lsmod | grep "hello-1" //hello-1 is the name of your module
      

      由于您编写了一个内核模块,该模块会打印一些消息。来自内核及其模块的消息可以在 /var/log/syslog 中找到,或者您可以使用 dmesg 命令查看这些消息。 当您的模块打印“Hello World 1.”时,您应该使用以下命令查看来自您的模块的消息。

      dmesg | grep "Hello World 1." 
      

      【讨论】:

        【解决方案4】:

        在 /etc/syslog.conf 的 *.info... 行中查找它。这些似乎控制了通过 printk 记录的内容。

        *.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages
        

        我发现 /proc/sys/kernel/printk 只真正控制控制台日志记录级别,而不是对文件的日志记录。而且我想检查系统日志也在运行;)我们遇到了完全相同的问题,KERN_INFO 不会记录文件,这修复了它。 hth

        【讨论】:

          【解决方案5】:

          我尝试通过键入以下命令来打印内核缓冲区: dmesg
          这将打印printk中写入的数据

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-27
            • 1970-01-01
            • 2016-02-29
            • 1970-01-01
            • 1970-01-01
            • 2017-04-29
            • 1970-01-01
            • 2019-01-15
            相关资源
            最近更新 更多