内核模块:没有显示 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;
}
我有一个简单的模块,写法如下:
#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;
}