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