gpt4 book ai didi

linux - udevadm 与 linux 热插拔

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:10 25 4
gpt4 key购买 nike

我对下面列出的问题有点困惑:

  1. 当我在桌面上执行 udevadm 时,它能够监听从内核发送的 uevent。我认为在执行udevadm 之前,它会检查udevd 的可用性。这意味着,如果 udevd 在我的桌面上不可用,udevadm 将无法工作。我的想法对吗?

  2. 为了拥有和udevadm一样的功能,我发现linux也提供了另一种方式
    存档这个。它叫做 netlink。让我感到困惑的是,如果我这样做,我可能会得到与使用 udevadm 时完全相同的结果。因此,udevnetlink socket 之间有什么区别?

socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); <----我创建的用来监听uevent的套接字。


感谢 avd 的反馈。收到您的反馈后,我还有一些问题要问。

  1. 不仅udevd可以监听来自内核的消息,udevadm也可以。我的想法正确吗?或者udevadm只是管理udevd

  2. 通过设置绑定(bind)到 NETLINK_KOBJECT_UEVENT 的套接字,用户空间代码也可以监听从内核发送的 uevent。在这一点上,我似乎没有理由选择udev来完成这个功能。这两种方法有什么不同吗?

  3. 在用户空间,两个不同的进程是否可以同时监听ueventnetlink能否同时向这些进程发送消息?

最佳答案

  1. 是的,你是对的。 udevadm 用于管理udevd
  2. 这是您真正感到困惑的地方。让我澄清一下。 udev 是用户空间设备管理器。 udev 负责让你的设备出现在/dev 目录中。它还负责热插拔功能。为了完成任务,udev 通过从内核接收消息来工作。内核通过 netlink 套接字发送消息。 Netlink 只是作为单独的套接字系列实现的 IPC 设施,专门用于内核到用户空间的交互。所以内核通过 netlink 套接字发送特殊格式的消息(uevent)。在另一个站点(在用户空间中)必须有人正在监听此消息,这就是 udev 所做的。 udev 的主要部分是 udev 守护进程 - udevd。该守护进程监听该消息并在/dev 路径下创建特殊的设备文件,并为您(Linux 用户)提供界面来管理设备和热插拔(udev 规则)。

我已经回答了相关问题 - 检查一下 here .

额外的答案:

  1. 来自 udevadm 手册页:

    udevadm expects a command and command specific options. It controls the runtime behavior of systemd-udevd, requests kernel events, manages the event queue, and provides simple debugging mechanisms.

    所以它只是一个管理工具,尽管它可以根据管理命令请求内核事件。

  2. (我可能没有正确理解你的问题)。您可以编写自己的守护进程来监听 uevents。这就是gentoo's mdev会。

  3. Netlink 允许您为 netlink 消息提供多个监听器。但这取决于内核套接字发送消息的方式(单播,多播,广播)和网络链接系列。 Netlink 本身是一个家族的集合,所以它可能取决于你使用的是什么 netlink。例如,NETLINK_GENERIC 系列允许您为消息绑定(bind)多个用户空间套接字,您将收到该消息。我认为回答这个问题的最好方法是编写一些简单的监听代码(可能需要 libudev 的帮助)

关于linux - udevadm 与 linux 热插拔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22952692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com