device_add

来源:互联网 发布:香樟木家具的危害知乎 编辑:程序博客网 时间:2024/04/27 02:45

暂时认为,device_add主要调用这个两个函数bus_add_device(dev)与bus_attach_device(dev)

 

bus_add_device(dev)

是把device结构加到dev->bus上去,dev->bus 结构要在调用device_add()之前 配置恰当。

 

bus_attach_device(dev)如下

int device_attach(struct device *dev)
{
 int ret = 0;

 down(&dev->sem);
 if (dev->driver) {
  ret = device_bind_driver(dev); //绑定device 与driver 仅仅在 /sys/文件系统,但好像没看到调用driver的probe函数。
  if (ret == 0)
   ret = 1;
  else {
   dev->driver = NULL;
   ret = 0;
  }
 } else {
  ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach);

/*bus_for_each_drv则会把bus上的每个注册的driver都检测一遍,如果 bus->match 函数返回1 则表明当前某个driver与此device是匹配的,则执行 dev->driver=drv,然后调用bus->probe (dev)函数。

是在调用bus_regsiter(&XXX_bus_type)之前添加到XXX_bus_type 结构体中的callback function.

*/


 }
 up(&dev->sem);
 return ret;
}

原创粉丝点击