1. 程式人生 > >linux 網口phy問題記錄

linux 網口phy問題記錄

  問題是這樣的,核心啟動識別網口的時候,多識別了一個,驅動本身是支援雙網口的,理論上另一個phy不存在,應該識別不到。

    後來發現是讀phy_id的時候,對於不存在的Phy地址,有返回0的情況,但是核心認為只有0x1fffffff的才是空,多加了個判斷條件得以解決。

記錄下識別phy的過程:

1. 在網口驅動的probe中,呼叫mdiobus_register;

2. 在mdiobus_register函式中,會對從0到PHY_MAX_ADDR(一般是31)依次呼叫mdiobus_scan;

3. 在mdiobus_scan中會呼叫get_phy_device,如果返回成功,則呼叫phy_device_register;

4. 在get_phy_device中,會呼叫get_phy_id來讀取對應地址上的phy_id,然後如果滿足((phy_id & 0x1fffffff) == 0x1fffffff),則認識該phy不存在。

5. 然後在port的probe中會呼叫phy_connect來連線phy;

6. 在phy_connect中,會呼叫bus_find_device_by_name來查詢對應的phy是否存在。存在則connect_direct。

在/sys/bus/mdio_bus/devices/下有當前核心掃描到的所有PHY。
--------------------- 
作者:j_j_g_a 
來源:CSDN 
原文:https://blog.csdn.net/jijiagang/article/details/17283377?utm_source=copy 
版權宣告:本文為博主原創文章,轉載請附上博文連結!