我已经编写了一个带有init和exit函数的基本linux内核模块。
然后尝试在不使用init函数的情况下编译LKM,它被成功编译并插入到内核中。然后使用rmmod删除相同的,它被删除,并在dmesg中获得打印,我已经将其放入exit函数中。
不带exit函数的模块和带init函数的模块遵循相同的过程。它已成功插入,但当我试图删除它时,显示错误“无法删除模块:设备或资源忙”。
不能理解上面没有初始化函数的behavior.Why模块可以正常工作,而没有退出函数的模块则不能正常工作。有人能解释一下吗?
谢谢,
发布于 2018-01-23 22:08:46
内核中有一个检查(/
/module.c通过delete_module syscall),如果你的模块中有一个module_init函数,那么它必须有严格的退出函数才能卸载,如果没有-EBUSY返回。
这个检查是因为,它假设您已经在init函数中分配了一些资源,并且您必须在exit函数中释放它们!
https://stackoverflow.com/questions/48403284
复制相似问题