以太網驅動的流程淺析(五)-mii_bus初始化以及phy id的獲取【原創】


以太網驅動的流程淺析(五)-mii_bus初始化以及phy id的獲取

**Author:張昺華
Email:920052390@qq.com
Time:2019年3月23日星期六
**

此文也在我的個人公眾號以及《Linux內核之旅》上有發表:以太網驅動的流程淺析(五)-mii_bus初始化以及phy id的獲取

很喜歡一群人在研究技術,一起做有意思的東西,一起分享技術帶給我們的快樂,也希望中國有更多的人熱愛技術,喜歡一起研究、分享技術,然后可以一起用我們的技術來做一些好玩的東西,可以為這個社會創造一些東西來改善人們的生活。

如下是本人調試過程中的一點經驗分享,以太網驅動架構畢竟涉及的東西太多,如下僅僅是針對加載流程和圍繞這個問題產生的分析過程和驅動加載流程部分,並不涉及以太網協議層的數據流程分析。

【硬件環境】 Imx6ul

【Linux kernel版本】 Linux4.1.15

【以太網phy】 Realtek8201f

1.1. 以太網驅動probe流程

1.1 mii_bus初始化以及phy id的獲取

然后進行mii的一些初始化fec_enet_mii_init(pdev);
主要是對struct mii_bus這里的成員進行初始化

並且會做注冊mdiobus的工作

因為我們系統是使用設備數,因此會執行of_mdiobus_register

進行midobus_register

由於設備樹代碼是這樣的:

如下路徑:drivers/of/of_mdio.c

因此我們是走get_phy_device這個函數:
所以我說內核代碼寫的好,就是注釋和函數名基本就是意思了,獲取phy device,

最關鍵的函數就是它,也就是本文的核心,這里是從寄存器中通過mdiobus的read方法來從phy中獲取phy id,但是這里並沒有獲取到phy_id ,這寄存器都是以太網的通用寄存器

既然沒有從寄存器中獲取到phy_id,因此phy_device_create也不會在mii bus數據結構中創建phy_device,
那么應用層在進行socket的時候,回調了open函數 fec_enet_open,這個函數中的fec_enet_mii_probe就不會從of_phy_connect中獲取到phy_device,因此就會出現-19的錯誤。那么獲取不到phy_id的根本原因就是因為reset的時序沒滿足datasheet的要求,具體原因分析請見最上面的《標題2 原因分析》

1.2 Realtek phy的內核配置

那這是獲取不到phy id的過程,那么正常的獲取phy id的流程又是怎樣的呢?
我們可以看到這樣的log:

那這里又是怎樣匹配的呢?
make kernel_menuconfig中我們需要選中realtek這款phy


選中Realtek PHYs,這樣realtek.c就可以編譯到kernel了

代碼路徑:drivers/net/phy/realtek.c

phy_id = 0x001cc816我們需要把這個phy id填入
module_phy_driver(realtek_drvs);

這里會將這個phy_drvier注冊進去

然后在這里把phy_device與phy_drvier關聯了起來,再由phy_driver_register注冊

Freescale的以太網控制器驅動fec_main.c中
static int fec_enet_mii_probe(struct net_device *ndev)

1.3 以太網流程總圖

最后匯總一個圖給大家:


4. 網址分享

http://stackoverflow.com/questions/5308090/set-ip-address-using-siocsifaddr-ioctl
http://www.ibm.com/support/knowledgecenter/ssw_aix_72/com.ibm.aix.commtrf2/ioctl_socket_control_operations.htm
https://lkml.org/lkml/2017/2/3/396
linux PHY驅動
http://www.latelee.org/programming-under-linux/linux-phy-driver.html
Linux PHY幾個狀態的跟蹤
http://www.latelee.org/programming-under-linux/linux-phy-state.html
第十六章PHY -基於Linux3.10
https://blog.csdn.net/shichaog/article/details/44682931

### End


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM