我对下面列出的问题感到困惑:
当我在桌面上执行udevadm
时,它能够侦听从内核发送的uevent
。
我认为在执行udevadm
之前,它会检查udevd
的可用性。
这意味着,如果我的桌面上没有udevd
,则udevadm
将无法使用。
我的想法是否正确?
为了拥有udevadm
的相同功能,我发现linux还提供了另一种方式
存档这个。它被称为netlink
。令我困惑的是,如果我这样做,我可以使用udevadm
完全相同的东西。因此,udev
与netlink socket
之间的区别是什么?
socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
< ----我创建的用于收听uevent
的套接字。
感谢avd的反馈。在收到您的反馈意见后,我仍有一些问题要问。
不仅udevd
可以从内核收听消息,而udevadm
也可以。
我的想法是否正确?或者udevadm只管理udevd
。
通过设置套接字绑定到NETLINK_KOBJECT_UEVENT
,用户空间代码也可以监听从内核发送的uevent。此时,我似乎没有理由选择udev
来完成此功能。这两种方法有什么不同吗?
在用户空间中,两个不同的进程可以同时收听uevent
吗? netlink
可以在同一时间向这些进程发送消息吗?
答案 0 :(得分:3)
udevadm
将管理udevd
。udev
是用户空间设备管理器。 udev负责将您的设备显示在/ dev目录中。它还负责hotplug功能。为了完成工作,udev通过从内核接收消息来工作。内核通过netlink socket发送消息。 Netlink只是IPC工具,作为独立的套接字系列实现,专门用于内核到用户空间的交互。因此内核通过netlink socket发送特殊格式(uevent)的消息。在另一个站点(在用户空间),必须有人正在监听此消息,而这正是udev所做的。 udev
的主要部分是udev守护程序 - udevd
。该守护进程侦听该消息并在/ dev路径下创建特殊设备文件,并提供给您(linux用户)接口以管理设备和hotplug(udev规则)。我已回答相关问题 - 请检查here。
额外答案:
来自udevadm联系方式:
udevadm期望命令和命令特定选项。它控制着 systemd-udevd的运行时行为,请求内核事件,管理 事件队列,并提供简单的调试机制。
所以它只是一个管理工具,虽然它可以通过admin命令请求内核事件。
(我可能无法正确理解你的问题)。你可以编写自己的守护进程来监听uevents。这就是gentoo's mdev的作用。
Netlink允许您为netlink消息提供多个侦听器。但这取决于内核套接字发送消息(单播,多播,广播)和netlink系列的方式。 Netlink本身就是一系列家庭,所以它可能取决于您使用的netlink。例如,NETLINK_GENERIC系列允许您为消息绑定多个用户空间套接字,您将收到该消息。我认为回答这个问题的最好方法是编写一些简单的监听代码(可能有一些帮助 libudev )