Linux 系统热插拔过程

将可移动设备连入系统时,系统的后台中会依次发生如下事件

外设插入;

总线发现新设备,通知hotplu*生热插拔事件,调用device_add,添加新设备到设备管理系统;ndevice_add中调用kobject_uevent(, KOBJ_ADD),向用户空间广播新设备加入事件通知;这里发出通知的方式,就是netlink;

用户空间运行的daemon(udev)收到event事件广播;

 udev根据消息和环境变量,查询sysfs中的/sys的变化,按照规则(/etc/udev/rules.d/*),在/dev目录下自动创建设备节点;

 

① 外设插入;

② 总线发现(中断?)新设备,并调用总线驱动查找驱动程序;[“Find a driver that can handle the device” =》 “Bind a driver to that device” =》 “Tell other subsystems to configure the new device.”(参见document/usb/hotplug.txt)]

③ 找到合适的驱动后,会调用device_add,添加新设备到设备管理系统;

④ device_add中会调用kobject_uevent(, KOBJ_ADD),向userspace广播新设备加入event通知;这里发出通知的方式,就是netlink;

⑤ 用户空间运行的daemon(udevd ?或者khubd等转发给udevd?)收到event事件广播;

⑥ udevd根据消息和环境变量,查询/sys的变化,在/dev目录下自动创建设备节点;

Linux 系统热插拔过程