我想在内核作为客户端的内核模块和用户应用程序之间建立连接。换句话说,内核会向用户app发送消息,等待回复,接收回复,然后继续执行。
例如,在内核中我将发送消息然后等待回复。
// inside kernel
nlmsg_unicast();
wait_until_user_reply();
/* process reply */
/* continue execution.. */
在用户内部,
while (1) {
// inside user
recvmsg();
/* assembly reply.. */
sendmsg();
}
然而,每次用户发送消息时,netlink协议所做的是调用回调函数。我想要的是让内核等待用户的回复,然后继续执行。在一个忙碌的循环中等待一个全局变量,它在回调函数内部更新是否可行?我试过了,但我认为这不是一个很好的解决方案。
我可以做一些“睡觉直到回复”。我可以让内核进入睡眠状态吗?
答案 0 :(得分:1)
我使用wait_for_completion解决了这个问题。事实证明它并不那么难。