【问题标题】:Kernel as client, User application as server using netlink内核作为客户端,用户应用程序作为服务器使用 netlink
【发布时间】:2013-12-03 08:18:45
【问题描述】:

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

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

// inside kernel
nlmsg_unicast();

wait_until_user_reply();

/* process reply */
/* continue execution.. */

在用户内部时,

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

   /* assembly reply.. */

   sendmsg();
}

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

我可以做类似“睡到回复来”之类的事情吗?我可以让内核休眠吗?

【问题讨论】:

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


    【解决方案1】:

    我已经使用 wait_for_completion 解决了这个问题。事实证明这并不难。

    【讨论】:

    • 啊,太好了,有人有类似的问题。可以分享一下代码吗?
    • @user1252280 不幸的是我不能分享代码。你可以查看 wait_for_completion() 的文档。基本上,您只需执行一次 init_completion(),发送消息,然后在内核中执行 wait_for_completion() 或 wait_for_completion_timeout()。就是这样。
    • 我们能有更明确的答案吗?我尝试了我从该消息中理解的内容,但是它导致了一般保护错误
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多