udevadm vs linux hotplug

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

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

  2. 为了拥有udevadm的相同function,我发现linux也提供了另一种方式
    归档这个。 这就是所谓的networking连接。 令我困惑的是,如果我这样做,我可以使用udevadm同样的事情。 因此, udevnetlink socket什么区别?

socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); <—-我创build的套接字来听uevent


感谢avd的反馈。 得到你的反馈后,我仍然有一些问题要问。

  1. 不仅udevd可以从内核听消息,而且还有udevadm 。 我的想法是否正确? 或者udevadm只是pipe理udevd

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

  3. 在用户空间中,两个不同的进程可以同时监听uevent吗? netlink可以同时发送消息给这些进程吗?

Solutions Collecting From Web of "udevadm vs linux hotplug"

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

我已经回答了相关的问题 – 在这里检查。

额外的答案:

  1. 从udevadm手册页:

    udevadm需要一个命令和命令特定的选项。 它控制systemd-udevd的运行时行为,请求内核事件,管理事件队列,并提供简单的调试机制。

    所以它只是一个管理工具,虽然它可以请求管理命令的内核事件。

  2. (我可能无法正确理解你的问题)。 你可以编写你自己的守护进程来监听事件。 这就是gentoo的mdev所做的。

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