分析:
传入的参数 : 驱动的名字、驱动所属的总线。
就是要遍历这条总线上挂载的所有驱动,查看一下有没有和name相同的驱动,其实他是和match函数功能一样了
如果存在同名的驱动,那么就减少驱动的引用计数且返回。
分析:
bus的私有数据中有一个成员是 struct kset * driver_kset.表示的是挂接在该总线上的所有驱动。
00291行: kset_find_obj ( bus->p->drivers_kset, name );
传入的参数 : bus->p 是总线的私有数据,bus->p->drivers_kset是挂载到该总线上的所有驱动的集合
调用list_for_each_entry()遍历kset下面的所有kobject,
查看这些kobject的名字有没有和传入的name是一样的,有就说明找到了且返回
即说明了 在总线上有该同名的驱动存在了,
再回到 B中,00294行: 如果在这个kset下面存在同名的kobject,
00295行: 根据这个kobject获取到驱动的私有数据指针,根据驱动的私有数据获取到这个驱动,
再回到 A中,00236行, 说明驱动已经存在了,注册失败
根据以上的分析:可以知道,
还是依靠总线下的kobject的name(目录名)与传入进来的驱动的名字是否一样来实现比较的。