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控制器驱动中,如果 mac控制器驱动的设备节点中,既没有&nbs
在Linux系统中,ETH PHY驱动依赖于mdiobus,MAC控制器驱动通常由SOC供应商提供,包含对PHY芯片或switch的MDIO控制接口。PHY驱动通过`module_phy_driver`或`phy_driver_register`注册,并在`phy_init`中使用通用的PHY_driver。PHY_device的创建有两种方式:1) MAC驱动注册MDIO总线时通过`phy_device_register`;2) 解析设备树时,根据fix-linked节点或设备树节点创建。NVIDIA MAC控制器驱动的特殊情况会根据设备节点创建PHY_device或MDIO_device。
订阅专栏 解锁全文

1790

被折叠的 条评论
为什么被折叠?



