内核作为客户端,用户应用程序作为服务器使用netlink

时间:2013-12-03 08:18:46

标签: linux sockets linux-kernel client-server netlink

我想在内核作为客户端的内核模块和用户应用程序之间建立连接。换句话说,内核会向用户app发送消息,等待回复,接收回复,然后继续执行。

例如,在内核中我将发送消息然后等待回复。

// inside kernel
nlmsg_unicast();

wait_until_user_reply();

/* process reply */
/* continue execution.. */
在用户内部

while (1) {
   // inside user
   recvmsg();

   /* assembly reply.. */

   sendmsg();
}

然而,每次用户发送消息时,netlink协议所做的是调用回调函数。我想要的是让内核等待用户的回复,然后继续执行。在一个忙碌的循环中等待一个全局变量,它在回调函数内部更新是否可行?我试过了,但我认为这不是一个很好的解决方案。

我可以做一些“睡觉直到回复”。我可以让内核进入睡眠状态吗?

1 个答案:

答案 0 :(得分:1)

我使用wait_for_completion解决了这个问题。事实证明它并不那么难。