phy driver程式碼流程(最新kernel版)
阿新 • • 發佈:2021-01-26
技術標籤: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的程式碼流程。