当前位置: 技术问答>linux和unix
linux设备和驱动列表是如何创建的
来源: 互联网 发布时间:2017-05-26
本文导语: driver_attach函数中调用bus_for_each_dev(drv->bus, NULL, drv, __driver_attach); 在bus_for_each_dev中有klist_iter_init_node(&bus->p->klist_devices, &i,(start ? &start->p->knode_bus : NULL)); 这之中struct klist klist_devices;是在什么时候创建并加入队列的...
driver_attach函数中调用bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);
在bus_for_each_dev中有klist_iter_init_node(&bus->p->klist_devices, &i,(start ? &start->p->knode_bus : NULL));
这之中struct klist klist_devices;是在什么时候创建并加入队列的?
同样device_attach中的函数bus_for_each_drv中调用函数klist_iter_init_node(&bus->p->klist_drivers, &i, start ? &start->p->knode_bus : NULL);
struct klist klist_drivers;是怎么加入队列的?
linux内核初学者,谢谢各位!
在bus_for_each_dev中有klist_iter_init_node(&bus->p->klist_devices, &i,(start ? &start->p->knode_bus : NULL));
这之中struct klist klist_devices;是在什么时候创建并加入队列的?
同样device_attach中的函数bus_for_each_drv中调用函数klist_iter_init_node(&bus->p->klist_drivers, &i, start ? &start->p->knode_bus : NULL);
struct klist klist_drivers;是怎么加入队列的?
linux内核初学者,谢谢各位!
|
打印日志
printk("God: call %s, %s, %dn", __FILE__, __FUNCTION__, __LINE__);
printk("God: call %s, %s, %dn", __FILE__, __FUNCTION__, __LINE__);
|
494 int driver_attach(struct device_driver *drv)
495 {
496 return bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);
497 }
498 EXPORT_SYMBOL_GPL(driver_attach);
调用这个函数,说明你是把一个驱动挂载到bus上.当然这个bus是已经分配好的.比如usb.
usb_serial_register_drivers[点击查看]你可以看看他的注册顺序.当然你可以想2楼那样吧drv->bus->p->klist_drivers打印出来.看哪里初始化的这个变量.用这类方法应该不难找到根源