2011年(125)
分类: LINUX
2011-04-20 11:27:53
看2410的驱动,始终没弄清楚设备和总线是如何勾搭上的,顺藤摸瓜就找到了下面这个函数,好好的分析一下吧。对驱动模型理解的不是太透彻,不对的地方您尽管仍(最好是鸡蛋,现在都买不起了) int platform_device_add(struct platform_device *pdev) if (!pdev) /*验证指针的有效性 */ if (!pdev->dev.parent)/*都说总线有两个链表,一个是设备链表(通过device 内嵌)一个是驱动链表(通过device_driver内嵌)这里如果pdev->dev.parent为0,说明设备链表还没有设备,因此处理办法是将platform_bus作为设备链表的开始,一直感觉platform_bus和platform_bus_type很难区分,不过在这里清楚了platform_bus是一个设备,platform_bus_type才是真正的总线*/ pdev->dev.bus = &platform_bus_type;/*device 要挂接在platform_bus_type这个总线上拉,看到了,设备和总线是这么勾搭上滴,很直接,很干脆*/ if (pdev->id != -1) for (i = 0; i < pdev->num_resources; i++) { if (r->name == NULL) /*name一般为NULL*/ p = r->parent; if (p && insert_resource(p, r)) { /*如果从父资源里面切割失败,则进行如下处理*/ pr_debug("Registering platform device '%s'. Parent at %s\n", ret = device_add(&pdev->dev);/*资源也分配好了,准备工作也做足,终于可以把设备添加到设备链表里面了*/ failed: /*失败处理*/ |