【问题标题】:Kernel Module: No printk messages showing. Is init function being called?内核模块:没有显示 printk 消息。是否调用了 init 函数?
【发布时间】:2016-06-09 18:30:31
【问题描述】:

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

#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 时不会产生任何输出。

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

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

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

【问题讨论】:

  • KERN_DEBUG 后面没有逗号,只有KERN_DEBUG "Message"
  • 哦,太尴尬了。谢谢!

标签: c linux linux-kernel kernel kernel-module


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    相关资源
    最近更新 更多