如何理解USB检测流程?


14

我想了解USB事件从内核空间到用户空间的流程(出于好奇,我知道事情的实现方式)。

更清楚地说,我想知道当我将USB驱动器插入系统时该弹出窗口如何出现在桌面上以及如何安装该驱动器。

我也想知道它如何确定USB中是否存在某些图像,如果是,它如何询问我是否需要在GIMP或其他软件中打开它?

我知道这是一个非常大而广泛的问题,但是请向我提供一些有关如何理解其背后整体思想的指导。

我没有进行大型代码浏览,但是向您保证,如果可以正确地指导我,那么这样做没有问题。

Answers:


16
  1. 插入设备后,管理该设备的硬件总线的软件会收到中断(或硬件级别的其他通知),并且总线驱动程序会枚举连接的设备,或执行其他特定于总线的硬件操作以标识该设备。
  2. 内核通过使用硬件的总线/设备/ etc标识符调用/ sbin / modprobe来请求为新硬件加载驱动程序。
  3. 在用户空间中,modprobe尝试查找匹配的驱动程序指定的别名。(请参阅参考资料/lib/modules/$(uname -r)/modules.alias以获取完整列表。)根据硬件接口,它们看起来会有所不同。例如,pci:v0000102Bd00002527sv*sd*bc*sc*i*对于PCI设备供应商102B,设备2527以及任何用于子供应商的产品,等等,或USB :usb:v2040p4982d*dc*dsc*dp*ic*isc*ip*
  4. 加载设备驱动程序后(或已初始化具有驱动程序的新设备),内核中的驱动程序会将已加载设备的通知发送到udev用户空间中。
  5. udev将通知与其在/lib/udev/rules.d/和中的规则列表进行匹配/etc/udev/rules.d。从这里开始,行为是基于规则的,非常专业。
  6. 对于USB磁盘,该80-udisks.rules文件可能是最佳的工作位置。这些规则将使用blkid等帮助程序来探测磁盘的类型和内容,并填充各种配置值,包括ENV{UDISKS_PRESENTATION_HIDE}="1"由于某种原因而忽略磁盘的事情。有关详细信息,请参见“ man 7 udisks”。
  7. udisks守护手表设备出现在udev的数据库,并将其显示他们作为过的DBus设备的发现列表。(请参阅“ udisks --enumerate”。)
  8. udisk中配置了各种操作,并且可以在策略文件中看到允许这些操作的策略/usr/share/polkit-1/actions/org.freedesktop.udisks.policy。(谁可以挂载,卸载等)
  9. 对设备感兴趣的服务将侦听来自udisk的DBus事件,并在看到特定条件时采取措施。例如,GNOME的Nautilus(通过gvfs volume-monitor)将请求设备的自动挂载(通过udisks,这将检查其策略,如上所述)。
  10. 挂载文件系统后,这些相同的侦听服务将采取更多措施。例如,当在文件系统上找到通用照片存储目录时,Nautilus会询问您是否要打开F-SpotDCIM

1
也许您知道引导过程中的区别(我假设只有步骤1有所不同)?为什么在启动过程中无法检测到设备,但是在手动重新插入后正确加载了设备?
naktinis 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.