The Linux driver implementer’s API guide-Driver Model
原文:https://www.kernel.org/doc/html/latest/driver-api/driver-model/binding.html
Driver Binding
驱动绑定是内核将驱动与对应设备匹配的过程。由于总线驱动针对性地定义了包含驱动和设备的结构体,因此通常情况下由总线驱动来处理设备和对应驱动匹配这一过程。对于通用的设备和设备驱动结构,大多数的绑定代码可以通过类似的代码来实现。
Bus总线
总线类型结构体定义了一个链表。这个链表包含了系统中这条总线挂载的所有设备.当一个设备请求设备注册时,这个设备被插入到了链表的最后。总线对象还包含了一个支持该总线类型所有设备驱动的链表。当驱动请求注册该驱动时,该驱动也被添加到了驱动链表的最后。这两件事情都会出发驱动绑定的工作。
device_register设备注册
当该条总线中添加了一个新的设备时,总线驱动列表将会枚举其中的驱动来找到支持该设备的那个驱动。那么,总线是如何找到设备对应的驱动的呢。这是因为每个驱动都提供了一个自己支持的设备ID列表,当设备的ID号与某个驱动支持的ID列表中的ID号相同时,总线就能匹配到设备对应的驱动。ID号匹配的规则是由总线定义的。总线没有试图使用负责的匹配机制和算法,仅仅是提供了一个将设备ID和驱动ID列表比较的回调函数。如果匹配到了对应的ID,函数返回1,否则返回0;该函数声明如下: