【问题标题】:NETLINK input function in kernel内核中的 NETLINK 输入函数
【发布时间】:2016-08-29 09:28:35
【问题描述】:

当我们从用户进程调用 sendmsg API 调用时,输入函数被调用并且我们已经向内核发送了消息。好的,但是当我们调用 recvmsg API 调用时,是否再次调用了输入函数?我在示例中看到了这一点,因为我没有声誉,所以我无法发表评论。那篇文章的标题是:“如何使用 netlink 套接字与内核模块进行通信?”那么,谁能看到那个例子并告诉我如何区分写入内核套接字和读取它。

【问题讨论】:

  • 好的,当我们调用 sendmsg API 调用时,这意味着我们也调用了 nlmsg_unicast(),所以下次我们调用 recvmsg() 时,我们将从内核获取消息。这就是重点?

标签: netlink


【解决方案1】:

为什么会再次调用输入函数? sendmsg() 发送和 recvmsg() 接收。 hello_nl_recv_msg() 仅在内核模块收到消息时执行。

在该示例中,用户空间程序使用sendmsg() 函数向内核发送消息A

消息A到达内核。内核调用hello_nl_recv_msg()。消息 A 封装在参数 skb 中。

内核模块选择向进程 ID 为发送skb 的进程发送响应。它创建消息B。内核模块使用nlmsg_unicast()函数向用户空间发送消息B

消息 Brecvmsg() 函数期间出现在用户空间中。 (因为用户空间程序的进程ID与内核模块写入的进程ID相同。)

recvmsg() 会一直休眠,直到收到给内核的消息,所以在调用该函数之前您不必担心内核是否已经应答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多