USB事件从内核空间到用户空间的流程是怎样的?当我插入 USB 驱动器时,桌面上会出现一个弹出窗口 - 从检测到新的 USB 驱动器到安装它并显示该弹出窗口,事件的顺序是什么?
答案1
udev
这是现代 Linux 系统上传递的。随系统启动的守护进程udev
将搜索/etc/udev/rules.d
并/lib/udev/rules.d
运行内核事件的匹配规则。插入 USB 驱动器将触发事件,udev
将搜索匹配的规则并执行它。
规则本身将决定您的系统的功能。近年来,udev
已与 HAL 进行通信,HAL 将通过 DBUS 向应用程序发出警报。这种方法现在已经过时,有利于统一的udev
解决方案,我认为这将涉及udevd
通过dbus
直接或通过dbus 发送。
udev
您可以监控via的活动udevadm monitor
。
答案2
我对此还不是完全有信心,所以要持保留态度并进行更多研究。
它从内核热插拔子系统开始。设置设备后,它要么调用设置的任何用户空间程序来处理热插拔事件(如果由echo hotplug_handler > /proc/sys/kernel/hotplug
)设置,要么通过 kobject_uevent netlink 套接字发送数据包。当内核启动热插拔处理程序时,它会设置一些环境变量。当内核发送数据包时,它包含键=值对。如果您愿意,您可以设置一个仅记录环境并将其设置为处理程序的脚本(当然不是在您的生产系统上 - 测试设置)。
通常,udev 被设置为处理程序,并且它会设置一些关于如何处理事件的规则。从那里,它可以启动其他程序来执行其他操作(例如发出 dbus 消息)。这些 udev 规则高度依赖于特定的兴趣分布。
里面有很多信息这个线程有人试图编写一些文档 - 请注意第一条消息不准确;继续阅读。