8

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

5 回答 5

1

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

于 2013-05-10T03:36:21.123 回答
0

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

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

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

dmesg | grep "Hello World 1." 
于 2016-03-26T07:37:47.697 回答
0

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

于 2019-01-17T11:01:29.673 回答
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 只真正控制控制台日志记录级别,而不是对文件的日志记录。而且我想检查系统日志也在运行;)我们遇到了完全相同的问题,KERN_INFO 不会记录文件,这修复了它。hth

于 2016-11-10T15:30:53.723 回答
0

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

于 2016-03-06T22:21:21.850 回答