08、phy_device与net_device的连接
调用 stmmac_init_phy(dev),将 PHY 设备与 net_device 网络设备连接起来。 stmmac_init_phy()函数将会调用 phy_connect()将 MDIO 总线上的 PHY 设备与net_device网络设备连接起 来 , 当 PHY 设备的状态发生改变时,调用stmmac_adjust_link() 函数 ,进行状态的调整 。
stmmac_init_phy
phy_connect 函数
首先调用
bus_find_device_by_name
去根据设备名字查找mdio
总线上的设备,一旦有匹配就立即返回对应的struct device
的指针。接着调用
to_phy_device(dev)
,获得struct device dev
对应的struct phy_device
最后调用
phy_connect_direct()
,该函数先检查phy_device->dev
的驱动是否已经匹配,如果没有,则将默认的genphy_driver.driver
作为phy_device->dev
的驱动,调用其probe
函数和device_bind_driver
函数,完成驱动和设备的绑定;接着phydev->attached_dev
,将网络设备net_device
与phy_device
进行完成连接,将函数带的参数赋值给phy_device
对应的成员变量