Linux设备驱动程序中的设备添加函数分析
这段代码位于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)如果类别接口的add_dev函数存在,则调用它,并将设备和接口作为参数传递。mutex_unlock(&dev->class->p->mutex)解锁类别互斥锁。
总结: 这段代码通过一系列操作,实现了在设备添加过程中通知总线和类别,以及将设备与其父设备和类别关联起来的功能,从而保证设备能够正确地被系统识别和管理。
原文地址: https://www.cveoy.top/t/topic/mHVS 著作权归作者所有。请勿转载和采集!