phy driver代码流程(最新kernel版)

phy driver代码流程(最新kernel版)

1.流程是基于Linux的设备-总线-驱动展开的,分为两部分一个是mdio总线,另一个是phy driver的注册

注意:
1.代码跳转使用ctags的跳转功能就可以了,本流程忽略了一些函数代码。
2.流程是两部分呢?不是还少了一个phy device吗?其实是因为在mdio总线流程顺便注册了phy device。
3.该流程代码是Linux5.4.0版本的。

1.mdio流程

文件路径:drivers\net\phy\mdio_bus.c
--> __mdiobus_register
--> device_register
--> mdiobus_scan
    --> get_phy_device
        --> get_phy_id // 通过调用mdiobus_read()实现读取
            -->  phy_device_create // 创建phy设备,定义了初始值,速度,双工,链接状态,默认自动协商。
               --> INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine); // !!!!!!初始化状态机函数
    --> phy_device_register                                       
-->phy_scan_fixups    //可以对phy进行一些预设,可以在MAC驱动里注册fixup函数,在这儿就会进行调用

2.phy driver流程

文件路径:drivers/net/phy/phy_device.c
-->phy_driver_regitster 
   -->driver_register    //检测mdio_bus_type上是否已经注册该设备了。将驱动注册到总线。
      -->bus_add_driver//添加driver到总线上去,驱动注册到总线的实现函数
         -->driver_attach  //:让总线上的设备与驱动匹配.
            -->bus_for_each_dev
               -->__driver_attach(通过bus_for_each_dev(drv->bus, NULL, drv, __driver_attach);参数回调),真正起注册作用的
                  -->device_driver_attach
                     -->driver_probe_device(drv, dev) //通过轮询匹配driver 与 device。
                        -->really_probe(dev, drv)//完成,可以打印/这个信息可以看到我们注册的总 驱动、设备和总线  信息
                           -->driver_bound(dev)//结束

以上就是phy的代码流程。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值