【问题标题】:How to send a "signal" from kernel module to user-space application?如何从内核模块向用户空间应用程序发送“信号”?
【发布时间】:2013-06-02 20:50:03
【问题描述】:

我有一个包含中断处理程序的 Linux 内核模块,并且想在处理中断后以某种方式通知用户空间应用程序。请告诉我,怎么做?

【问题讨论】:

  • 我们可以假设您在谈论 Linux 吗?无论哪种方式,请在您的问题中添加相关标签。
  • @OliCharlesworth 是的,我们在谈论 Linux,但我的标签用完了
  • 您可以,例如,删除“硬件”以支持“linux”。硬件知识对于回答这个问题并不重要。
  • @chirlu 好的,我做到了。请让我们回到问题
  • 标签对于让合适的人查看您的问题很重要。看?答案来了。 :-)

标签: linux module kernel signals interrupt


【解决方案1】:
  • 您始终可以使用普通套接字,例如 UDP 或 UNIX。
  • 您可以通过/proc/sys 导出此信息(请参阅this 问题)。
  • 您可以使用 Netlink(请参阅this 问题)。

【讨论】:

  • 消息队列,还是共享内存?
  • 您也可以对用户空间使用信号 :).. 您的内核模块应该知道的只有需要触发的进程的 PID。我已经使用 IOCTL 到内核模块来传递 PID :)。
【解决方案2】:

使用netlink

Netlink socket 是一种特殊的 IPC,用于传输信息 内核和用户空间进程之间。它提供了一个全双工 两者之间通过标准套接字 API 进行通信链接 用户空间进程和内核模块的特殊内核 API。 Netlink 套接字使用地址族 AF_NETLINK,与 TCP/IP 套接字使用的 AF_INET。每个 netlink 套接字功能都定义了它的 内核头文件include/linux/netlink.h中自己的协议类型。

【讨论】:

    【解决方案3】:

    我直接回答这个问题,因为它是 Google 中“内核向用户空间发送信号”的最高结果。

    我通常使用信号来终止用户空间进程,以在调用 ioctls 时检查它的堆栈。通常以下对我有用:

    force_sig(SIGSEGV, current);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      相关资源
      最近更新 更多