2016-06-09 58 views
1

我有一个单模,写成如下:内核模块:不显示printk消息。 init函数被调用了吗?

#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”,仍然没有输出,所以我不认为日志级别是问题。

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

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

E:哎呀

+2

“KERN_DEBUG”后面没有逗号,只是'KERN_DEBUG“消息”'。 –

+0

哦,这是尴尬。谢谢! – wfc0003

回答

2

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

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