我有一个内核模块(实际上是一个伪设备驱动程序),还有一个辅助用户空间进程。
我希望内核模块在rmmod过程中联系用户空间进程,触发用户空间进程进行一些清理工作。我知道我可以从内核向用户进程发送信号以触发清理,但我确实需要发送一些其他信息来指导用户进程如何进行清理。 (这是一个整数数组,如果重要的话)。我假设我不能传递任何信息和信号?
你们知道这样做的方法吗?我不能使用ioctl,因为设备不会对用户空间进程可见,因为它是rmmod'ed ..
感谢。
答案 0 :(得分:2)
这样的设计不适合内核的工作方式。
相反,您应该将模块自身报告为正在使用,直到清理完成(因此导致rmmod
失败)。当您要卸载模块时,应该触发用户空间清理,然后在完成后执行rmmod
(可能是某种用户空间脚本)。
您可以通过让用户空间守护程序保持对内核模块提供的设备开放的文件描述符来实现这一点,并在用户空间清理完成后关闭它。