我编写了一个带有init和exit函数的基本linux内核模块。
然后尝试在没有init函数的情况下编译LKM,并且它已经成功编译并插入到内核中。然后使用rmmod删除它并将其删除并获得dmesg中的打印,我已将其放入退出功能。
对于没有exit函数和init函数的模块,遵循相同的过程。它已成功插入但当我尝试删除它时显示错误"无法删除模块:设备或资源忙"。
无法理解上述行为。为什么没有init函数的模块工作正常,而没有退出函数的模块则没有。 有人可以解释一下吗?
谢谢,
答案 0 :(得分:3)
内核中有一个检查(/kernel/module.c通过delete_module系统调用),如果你有一个module_init函数 然后它必须严格有退出功能卸载,如果没有 -EBUSY被退回。
这个检查是因为,假设你在init函数中做了一些资源分配,你必须在exit函数中释放它们!