我的操作系统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");
}
答案 0 :(得分:1)
检查 syslog 守护程序进程是否正在运行,因为这是将来自内核环/日志消息缓冲区的printk消息复制到 / var / log / messages 的进程,如果我我是对的。可以使用 dmesg 实用程序/命令查看printk消息,或者将消息放在/ var / log / messages中。如果设置了正确的loglevel,则printk消息将立即显示在控制台上,无需使用dmesg或无需检入/ var / log / messages。 printk调试消息也可以是 / var / log / syslog 。
的一部分答案 1 :(得分:0)
现代Linux发行版不再使用rsyslog(或任何其他syslog守护程序)。它们依赖于作为systemd一部分的journald,因此缺少/ var / log / messages文件,您必须使用journalctl命令来读取系统日志。
答案 2 :(得分:0)
首先,您应该使用此命令检查模块是否正确加载
lsmod | grep "hello-1" //hello-1 is the name of your module
因为您编写了一个内核模块,它会打印一些消息。来自内核及其模块的消息可以在/ var / log / syslog中找到,或者您可以使用dmesg命令查看这些消息。 当您的模块打印&#34; Hello World 1。&#34;时,您应该使用以下命令查看模块中的消息。
dmesg | grep "Hello World 1."
答案 3 :(得分:0)
在/etc/syslog.conf中查找* .info ...行。这些似乎可以控制通过printk记录的内容。
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
我发现/ proc / sys / kernel / printk只是真正控制了控制台日志记录级别,而不是记录到文件。我想检查syslog也在运行;)我们有完全相同的问题,KERN_INFO不会记录文件,这就解决了。 HTH
答案 4 :(得分:0)
我试图通过键入以下命令来打印内核缓冲区:
dmesg
这将打印写入printk