内核模块:没有printk消息显示。是否调用了init函数?

时间:2016-06-09 18:30:32

标签: linux linux-kernel kernel kernel-module

我有一个简单的模块,编写如下:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

MODULE_LICENSE("GPL");

static int __init hellomod_init(void)
{
    printk(KERN_DEBUG, "Hello, world!\n");
    return 0;
}

static void __exit hellomod_exit(void)
{
    printk(KERN_DEBUG, "Goodbye, world!");
}

module_init(hellomod_init);
module_exit(hellomod_exit);

$ cat /proc/sys/kernel/printk
7        7        7        7

以便输出任何级别的消息。

模块加载,可以使用 lsmod 进行验证,但在加载或卸载模块并检查 dmesg 时不会产生任何输出。

我试过更换&#34; KERN_DEBUG&#34;较低级别仍然没有输出,所以我不认为日志级别是问题。

我怎样才能验证调用init函数?如果没有被调用,我的错误是什么?

我在Arch Linux上运行并编译内核版本4.6.1-2。

e:oops

1 个答案:

答案 0 :(得分:2)

KERN_DEBUG之后不应该是逗号。所以看起来应该是这样的:

static int __init hellomod_init(void)
{
    printk(KERN_DEBUG "Hello, world!\n");
    return 0;
}