原文:http://lxr.linux.no/#linux+v3.19.1/Documentation/driver-model/binding.txt



Driver Binding

驱动绑定是一种联系驱动和控制它的驱动的方式。总线驱动程序代表性的处理这些,因为有总线特定的结构体来表示驱动和设备。对于大部分设备和驱动结构体,大部分绑定可以使用公共代码


Bus

总线类型结构体包含系统中该总线类型所有设备的列表。当device_register为一个设备被调用,它将被插入到这个列表的末尾。总线对象也包含该总线类型的所有驱动的列表。当driver_register为一个驱动被调用时,它将被插入到这个列表的末尾。这是两个触发driver binding的事件


device_register

当一个新设备被添加时,这个总线的驱动列表被遍历,以寻找一个驱动来支持它。为了裁决哪个驱动,设备的设备ID必须和驱动支持的设备ID匹配。匹配ID的格式和语义是总线特定的。总线驱动必须提供一个回调函数来匹配驱动和设备ID,总线返回1表示匹配成功,0表示其它


int match(struct device *dev, struct device_driver *drv);


如果有一个驱动匹配,设备的驱动域被设置为这个驱动,驱动的探测回调函数被调用。这给驱动一个机会比对它是否真的支持这个硬件,并且处于工作状态



Device Class

在探索完成后,设备注册到它所属的类型中。设备驱动属于且只属于一个类型,这被设置在驱动的devclass域。devclass_add_device被调用,用来枚举设备类型,和实际注册该设备到类,同时调用该类的register_dev回调函数


44 Upon the successful completion of probe, the device is registered with

45 the class to which it belongs. Device drivers belong to one and only one

46 class, and that is set in the driver's devclass field.

47 devclass_add_device is called to enumerate the device within the class

48 and actually register it with the class, which happens with the

49 class's register_dev callback.



Driver

当一个驱动绑定到一个设备,该设备被插入到驱动的设备列表


sysfs

在总线的devices目录建立一个符号链接指向物理层次上设备的目录

在驱动的devices目录建立一个符号链接指向物理层次上设备的目录

在类的目录里为该设备创建一个目录,里面创建一个符号链接指向设备在sysfs树的物理地址

设备的物理目录里可以创建指向该类目录或指向类的顶级目录的符号链接(尽管还没有完成),也可以创建指向它的驱动的目录


driver_register

一个新驱动添加的过程几乎相同,总线设备列表的设备被遍历找出匹配的设备,已有驱动的跳过,尽可能的绑定多的设备到该驱动


Removal

当一个设备被移除,它的引用计数会变为0,驱动


的回调函数被调用,它从驱动列表中移除,驱动的引用计数减1,两者之间的所有符号链接被移除

当一个驱动被移除,它所支持的设备列表被遍历,驱动的移除回调函数为每个设备调用,设备从列表中移除和所有的符号链接 被删除