printk()不打印在/ 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只是真的控制了控制台的日志记录级别,而不是记录到文件。 我想检查系统日志也运行;)我们有完全相同的问题,KERN_INFO不去记录文件,这固定它。 心连心