1. 程式人生 > 其它 >phy driver程式碼流程(最新kernel版)

phy driver程式碼流程(最新kernel版)

技術標籤:linux

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流程

-->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的程式碼流程。