gan*_*ars 4 linux kernel kernel-module
我有一个如下的程序.
test_module.c:
#include <linux/version.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/delay.h>
int init_module(void)
{
while(1) {
pr_info("hello 4 sec\n");
msleep(4 * 1000);
}
return 0;
}
void cleanup_module(void)
{
pr_info("module removed successful\n");
}
Run Code Online (Sandbox Code Playgroud)
当我加载此模块时,我的终端变得冻结/阻止.如何阻止这个程序.我试过了sudo rmmod test_module,但没用.所以我重启了我的系统.如何打破init_module?将来,如果出现问题,如果我init_module没有结束那么该怎么办?如果我们不停止会发生什么init_module?
通过重新启动机器.
这是唯一的方法.用户域进程是孤立的,可以强制终止所有这些,但在内核中没有这样的保护.
该init_module功能不应该在延长的时间内做任何事情.它应该只将模块注册到适当的数据结构.
如果您需要在内核中定期执行某些操作,则需要安排tasklet或worqueue或创建内核线程.另请参见何时在Linux内核中使用内核线程与工作队列.但是大多数内核代码应该只是在某处注册并在适当的事件(从硬件或通过系统调用从用户域)发生时运行.
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |