Linux eth phy驱动框架分析

Linux中,对于eth phy的驱动,是依附于 mdiobus的,物理上,soc内部会有 mac控制器,要想实现以太网数据收发,需要外挂一颗 phy芯片,然后 soc内部的mac控制器驱动,一般都由 soc厂家来实现,在 mac控制器驱动中,又会集成 mdio 总线来实现对 phy 芯片或者switch芯片的控制接口,所以在mac控制器驱动中,又会 调用到 mdio总线的注册函数,如:of_mdiobus_register 等,所以在 mac 控制器驱动中,会有 mdio 总线相关的 读写函数

    根据总线、设备、驱动框架,phy驱动对应 phy_driver ,然后一般使用:module_phy_driver ,或者 phy_driver_register 来注册,Linux系统中,默认使用 两个通用的 phy_driver,在 phy_init 函数中。

有了phy的驱动,那么对应的phy_device 如何进行创建和初始化呢?

    查看代码,phy_device 的创建有两个入口:

1. 在 mac控制器驱动注册mdio总线时,通过 mdiobus_scan 函数,最终调用到 phy_device_register 函数来注册 phy_device,此函数会扫描mdio总线上的所有设备,然后匹配设备id,有的话,会创建  phy_device

2. 在 mac控制器驱动解析 设备树时,根据 设备树的节点,如: fix-linked节点,那么会创建 fix-linked的phy_device,

在 nvidia的mac控制器驱动中,

猜你喜欢

转载自blog.csdn.net/qq_30025621/article/details/127791236
ETH
今日推荐