插入 USB 驱动器时会发生什么?

Sen*_*Sen 23 usb hot-plug

USB 事件从内核空间到用户空间的流程是怎样的?当我插入 USB 驱动器时,我的桌面上会出现一个弹出窗口——从检测到新的 USB 驱动器到安装它并显示该弹出窗口的事件顺序是什么?

ewi*_*sch 6

这是udev在现代 Linux 系统上传递的。在udev开始与系统守护进程会在搜索/etc/udev/rules.d/lib/udev/rules.d并运行内核事件的匹配规则。插入 U 盘将触发一个事件,udev将搜索匹配的规则并执行它。

规则本身将决定您的系统做什么。近年来,udev已与 HAL 通信,后者将通过 DBUS 提醒应用程序。这种方法现在已经过时,取而代之的是统一的udev解决方案,我认为这将涉及udevd通过dbus直接或通过dbus-send 进行通信

您可以监控udevvia的活动udevadm monitor


Sha*_*off 3

我对此还不是完全有信心,所以要持保留态度并进行更多研究。

它从内核热插拔子系统开始。设置设备后,它要么调用设置的任何用户空间程序来处理热插拔事件(如果由echo hotplug_handler > /proc/sys/kernel/hotplug)设置,要么通过 kobject_uevent netlink 套接字发送数据包。当内核启动热插拔处理程序时,它会设置一些环境变量。当内核发送数据包时,它包含键=值对。如果需要,您可以设置一个仅记录环境并将其设置为处理程序的脚本(当然不是在您的生产系统上 - 测试设置)。

通常,udev 被设置为处理程序,并且它会设置一些关于如何处理事件的规则。从那里,它可以启动其他程序来执行其他操作(例如发出 dbus 消息)。这些 udev 规则高度依赖于特定的兴趣分布。

该线程中有很多信息,其中有人试图编写一些文档 - 请注意,第一条消息不准确;继续阅读。

  • 曾几何时,这是准确的,但现在已经不那么长了:现代的“udev”监听 netlink 套接字上的 uevent。(旧方法存在序列化/并发问题。) (3认同)