Linux 设备驱动程序: 设备添加流程
// 如果设备已经连接到总线上 if (dev->bus) // 通过总线的通知器调用所有注册的添加设备通知回调函数 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, BUS_NOTIFY_ADD_DEVICE, dev);
// 发送一个内核对象事件,通知用户空间设备已经添加 kobject_uevent(&dev->kobj, KOBJ_ADD);
// 调用总线的探测设备函数,以便总线能够检测到新添加的设备 bus_probe_device(dev);
// 如果设备有父设备 if (parent) // 将设备添加到父设备的子设备列表中 klist_add_tail(&dev->p->knode_parent, &parent->p->klist_children);
// 如果设备有设备类 if (dev->class) { // 锁定设备类的互斥锁 mutex_lock(&dev->class->p->mutex);
// 将设备添加到设备类的设备列表中
klist_add_tail(&dev->p->knode_class,
&dev->class->p->klist_devices);
// 通知任何设备类接口,设备已经添加
list_for_each_entry(class_intf,
&dev->class->p->interfaces, node)
if (class_intf->add_dev)
class_intf->add_dev(dev, class_intf);
// 解锁设备类的互斥锁
mutex_unlock(&dev->class->p->mutex);
}
原文地址: https://www.cveoy.top/t/topic/mHWd 著作权归作者所有。请勿转载和采集!