初始化和清理在内核模块中交换
Initialization and Cleanup are swapped around in Kernel Module
目前正在研究内核模块,我们的任务是编写一个小的 Hello World / Bye World 内核模块(C 语言)。很快就想到了,大致知道我应该做什么。
需要使初始化函数打印一条 Hello 消息,并使清理函数打印一条 Bye 消息。当我使用 insmod 将内核模块添加到模块列表(在 Debian VM 上工作)时应该打印初始化消息,以及清理消息当我使用 rmmod.
删除模块时应该打印
这是代码片段:
#define MODULE
#define LINUX
#define __KERNEL__
#include <linux/module.h> // all modules
#include <linux/kernel.h> // KERN_ALERT and potentially other priorities
#include <linux/init.h> // macros
static int __init do_initialization(void) {
printk(KERN_ALERT "Hello World :)");
return 0;
}
static void __exit do_cleanup(void){
printk(KERN_ALERT "Bye bye :)");
}
module_init(do_initialization);
module_exit(do_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("A");
MODULE_DESCRIPTION("Exercise");
MODULE_VERSION("1.00");
这是我使用的 Makefile(这是提供给我们的,但我了解其中的大部分内容):
obj-m += mymodule.o
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
注意:我使用 KERN_ALERT 而不是 KERN_INFO 只是为了确保它无论如何都能显示在我的终端上。
我的问题在于:
当我 运行 insmod mymodule.ko 时,打印 Bye Bye 消息。当我运行 rmmod mymodule.ko时,Hello消息被打印出来了。这对我来说真的没有任何意义,我确保我的功能在宏中正确设置。
感谢任何帮助。
正如 Tsyvarev 在 2021 年 3 月 1 日作为评论添加到问题中的 link 以及 Roi 在 2021 年 3 月 2 日的回答所指出的,我只需要添加 \ n 在登录内核时。感谢所有帮助过的人。
目前正在研究内核模块,我们的任务是编写一个小的 Hello World / Bye World 内核模块(C 语言)。很快就想到了,大致知道我应该做什么。
需要使初始化函数打印一条 Hello 消息,并使清理函数打印一条 Bye 消息。当我使用 insmod 将内核模块添加到模块列表(在 Debian VM 上工作)时应该打印初始化消息,以及清理消息当我使用 rmmod.
删除模块时应该打印这是代码片段:
#define MODULE
#define LINUX
#define __KERNEL__
#include <linux/module.h> // all modules
#include <linux/kernel.h> // KERN_ALERT and potentially other priorities
#include <linux/init.h> // macros
static int __init do_initialization(void) {
printk(KERN_ALERT "Hello World :)");
return 0;
}
static void __exit do_cleanup(void){
printk(KERN_ALERT "Bye bye :)");
}
module_init(do_initialization);
module_exit(do_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("A");
MODULE_DESCRIPTION("Exercise");
MODULE_VERSION("1.00");
这是我使用的 Makefile(这是提供给我们的,但我了解其中的大部分内容):
obj-m += mymodule.o
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
注意:我使用 KERN_ALERT 而不是 KERN_INFO 只是为了确保它无论如何都能显示在我的终端上。
我的问题在于: 当我 运行 insmod mymodule.ko 时,打印 Bye Bye 消息。当我运行 rmmod mymodule.ko时,Hello消息被打印出来了。这对我来说真的没有任何意义,我确保我的功能在宏中正确设置。
感谢任何帮助。
正如 Tsyvarev 在 2021 年 3 月 1 日作为评论添加到问题中的 link 以及 Roi 在 2021 年 3 月 2 日的回答所指出的,我只需要添加 \ n 在登录内核时。感谢所有帮助过的人。