没有init和exit函数的Linux内核模块

时间:2018-01-23 13:46:27

标签: linux linux-kernel linux-device-driver

我编写了一个带有init和exit函数的基本linux内核模块。

然后尝试在没有init函数的情况下编译LKM,并且它已经成功编译并插入到内核中。然后使用rmmod删除它并将其删除并获得dmesg中的打印,我已将其放入退出功能。

对于没有exit函数和init函数的模块,遵循相同的过程。它已成功插入但当我尝试删除它时显示错误"无法删除模块:设备或资源忙"。

无法理解上述行为。为什么没有init函数的模块工作正常,而没有退出函数的模块则没有。 有人可以解释一下吗?

谢谢,

1 个答案:

答案 0 :(得分:3)

  

内核中有一个检查(/kernel/module.c通过delete_module系统调用),如果你有一个module_init函数   然后它必须严格有退出功能卸载,如果没有   -EBUSY被退回。

这个检查是因为,假设你在init函数中做了一些资源分配,你必须在exit函数中释放它们!