udevadm vs linux hotplug

时间:2014-04-09 04:17:01

标签: linux linux-kernel udev

我对下面列出的问题感到困惑:

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

  2. 为了拥有udevadm的相同功能,我发现linux还提供了另一种方式 存档这个。它被称为netlink。令我困惑的是,如果我这样做,我可以使用udevadm完全相同的东西。因此,udevnetlink socket之间的区别是什么?

  3. socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);< ----我创建的用于收听uevent的套接字。


    感谢avd的反馈。在收到您的反馈意见后,我仍有一些问题要问。

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

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

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

1 个答案:

答案 0 :(得分:3)

  1. 是的,你是对的。 udevadm将管理udevd
  2. 这是你真的很困惑的地方。让我澄清一下。 udev是用户空间设备管理器。 udev负责将您的设备显示在/ dev目录中。它还负责hotplug功能。为了完成工作,udev通过从内核接收消息来工作。内核通过netlink socket发送消息。 Netlink只是IPC工具,作为独立的套接字系列实现,专门用于内核到用户空间的交互。因此内核通过netlink socket发送特殊格式(uevent)的消息。在另一个站点(在用户空间),必须有人正在监听此消息,而这正是udev所做的。 udev的主要部分是udev守护程序 - udevd。该守护进程侦听该消息并在/ dev路径下创建特殊设备文件,并提供给您(linux用户)接口以管理设备和hotplug(udev规则)。
  3. 我已回答相关问题 - 请检查here

    额外答案:

    1. 来自udevadm联系方式:

        

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

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

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

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