linux Phy驱动开发之mido总线介绍

发布于:2025-08-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、        MDIO 总线概述

        1.功能定位

        MDIO(Management Data Input/Output)是 IEEE 802.3 定义的串行管理接口,用于 MAC 层与PHY 芯片间的寄存器配置和状态监控,属于物理层(PHY)的核心管理总线。

        2.硬件连接 

        通过 MDC(时钟线)和 MDIO(数据线)实现同步通信,支持最多 32 个 PHY 设备共享总线。

二、        内核框架设计

        1.三层抽象模型

        1)MII Management 层‌:抽象为 struct mii_bus,包含读写函数指针(如

read/write)和总线资源

        2)PHY Device 层‌:抽象为 struct phy_device存储 PHY 的硬件 ID、状态(如速度、双工模式)

        3)PHY Driver 层‌:抽象为 struct phy_driver,定义驱动匹配表(phy_id 和掩码)及操作函数(probeconfig_init)。

        2.总线匹配机制

        MDIO 总线通过 mdio_bus_match() 函数比对phy_device->phy_id 与 phy_driver-

>phy_id_mask,匹配成功后调用驱动的 probe 函数

三、        关键数据结构与API

        1.核心结构体

        1)struct mii_bus:包含总线号、父设备、读写回调函数等

        2)struct phy_device:记录 PHY 地址、链接状态、中断号等硬件信息

        3)  struct phy_driver:定义驱动名称、ID 掩码、电源管理回调等

        2.注册流程

        1)总线注册‌:mdio_bus_init() 初始化 MDIO 总线类型(mdio_bus_type

        2)驱动注册‌:phy_driver_register() 将驱动添加到总线,并关联 probe 函数

四、        设备数据与驱动匹配

        1.设备树配置

        MDIO 控制器需在设备树中声明,包括寄存器地址、时钟配置等,例如:   

mdio {
    compatible = "fsl,imx6q-mdio";
    reg = <0x021ec000 0x4000>;
    #address-cells = <1>;
    #size-cells = <0>;
    ethphy0: ethernet-phy@0 {
        reg = <0>;
    };
};

        PHY 设备通过 reg 属性指定地址  

        2.匹配流程

           1)内核启动时解析设备树,生成 phy_device 对象

           2)总线扫描时调用 get_phy_id() 读取 PHY 寄存器 ID,与驱动表匹配

五、        总结

 dump_stack+0x18/0x24
  __mdiobus_register+0x148/0x554 [libphy]
  __of_mdiobus_register+0xd4/0x440 [of_mdio]
  xxxx_mdio_probe+0x2d4/0x4bc [xxxx_mdio]
 platform_probe+0x68/0xc4
 really_probe+0x148/0x2b0
  __driver_probe_device+0xcc/0x12c
 driver_probe_device+0xd8/0x15c
 __driver_attach+0x90/0x19c
bus_for_each_dev+0x7c/0xdc
driver_attach+0x24/0x30
bus_add_driver+0xe8/0x1f8
driver_register+0x5c/0x124
__platform_driver_register+0x28/0x34
xxxx_mdio_init+0x20/0x1000 [xxxx_mdio]

        在__mdiobus_register中会调用mdiobus_scan_bus_c22的get_phy_device扫描mdio总线的上phy设备并获取的phy设备的id,id与phy设备driver的id匹配上就执行probe 

         


网站公告

今日签到

点亮在社区的每一天
去签到