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

Kernel Module: No printk messages showing. Is init function being called?

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

#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验证,但是加载或卸载模块并检查[=时没有输出13=].

我已经尝试用较低级别替换 KERN_DEBUG 但仍然没有输出,所以我认为日志级别不是问题。

我还能如何验证调用了 hellomod_init() 函数?如果它没有被调用,我的错误是什么?

我 运行 正在 Arch Linux 上针对内核版本 4.6.1-2 进行编译 Linux。

KERN_DEBUG 后不应该有逗号。所以它应该看起来像这样:

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