繁体   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