• Platform驱动模型匹配过程


    #device方面:
    platform_device_register(struct platform_device *dev)
    ------platform_device_add(pdev);
    ----------device_add(&pdev->dev);
    --------------bus_probe_device(dev);
    -------------------device_attach(dev);
    -------------------------bus_for_each_drv(dev->bus, NULL, dev, __device_attach);
    -------------------------------driver_match_device(drv, dev);成功才向下执行probe!
    -------------------------------------driver_probe_device(drv, dev);
    --------------------------------------------really_probe(dev, drv);
    ----------------------------------------------------dev->bus->probe(dev);或者drv->probe(dev);platform_device_add(pdev);
    
    #driver方面:
    platform_driver_register(struct platform_driver * drv)
    --------driver_register(&drv->driver);
    ------------bus_add_driver(drv);
    -----------------driver_attach(drv);
    ------------------------bus_for_each_dev(drv->bus, NULL, drv, __driver_attach); 遍历所有节点!
    -------------------------------driver_match_device(drv, dev);成功才向下执行probe!
    ---------------------------------------driver_probe_device(drv, dev);
    ------------------------------------------------really_probe(dev, drv);
    ---------------------------------------------------------dev->bus->probe(dev);或者drv->probe(dev);
    
    
    
    driver_match_device()  是匹配的关键,实质是上执行:
    --------return drv->bus->match ? drv->bus->match(dev, drv) : 1;
    ------------------.match = platform_match  最终调用bus中的platform_match函数来匹配。
    
    
    bus_for_each_drv/dev()  函数中:
    ---------while ((dev = next_device(&i)) && !error)  遍历所有节点;
    
  • 相关阅读:
    Windows故障恢复控制台使用方法
    Windows XP SP2下安装WinCC V6.0 SP3 的安装步骤
    Windows Server2003 安装WinCC6.2 sp2
    pb6.5不兼容Oracle10g
    Windows Server 2003 Sp2 雨林木风版
    移动硬盘WINPE启动盘安装GHOST系统图解
    Vista硬盘安装详细图解
    系统的层次性与单一职责原则
    用dynamic增强C#泛型表达力
    谈单元测试的状态验证和行为验证
  • 原文地址:https://www.cnblogs.com/retry/p/11934857.html
Copyright © 2020-2023  润新知