深圳建设执业注册中心网站,中国十大科技公司排名,建设青岛公司网站,家装公司文案Linux Mii management/mdio子系统分析之一 总体概述 #xff08;转载#xff09;原文链接#xff1a;https://blog.csdn.net/u014044624/article/details/123303099 从本章开始#xff0c;我们介绍linux的mii management对应的mdio子模块#xff0c;该模块主要用于管理phy… Linux Mii management/mdio子系统分析之一 总体概述 转载原文链接https://blog.csdn.net/u014044624/article/details/123303099 从本章开始我们介绍linux的mii management对应的mdio子模块该模块主要用于管理phy设备实现phy device创建与phy driver的注册等功能。本系统主要涉及如下按如下几个篇章进行分析 一、总线概述介绍mdio驱动模型的简要逻辑模型 二、mdio总线-设备-驱动模型分析 三、虚拟mii_bus模型分析即fixed-mii_bus主要的应用场景为2个cpu间网口通过rgmii/sgmii等直接相连无需phy时如何让net-device绑定一个逻辑phy-device 设备间的逻辑关联图及抽象 如下图为cpu与mac、phy之间的逻辑关联图针对mac与phy之间的连接包括两部分 通过mii/rgmii/sgmii/…与phy连接进行数据的通信通过mdc/mdio与phy连接实现对phy设备的控制命令的下发等功能 本次我们主要介绍mac与phy之间控制接口间的设备驱动模型即mac通过mii management 控制phy设备的驱动模型而针对netdevice子系统模块此次暂不介绍留待后续介绍。 MII Management interface用于MAC层芯片控制和配置phy设备而ieee 802.3中规定了phy device寄存器的额地址空间为5位最多可定义32各寄存器而ieee 802.3定义了地址为0-15这16个寄存器的功能主要包括control、status、phy identifer、auto-neg相关等而16-31由厂家自行定义。 结合我们之前介绍的i2c、spi、mmc子系统我们可以针对上面的设备逻辑图进行如下的设备驱动模型的抽象 针对mii management而言应该抽象控制器对应的类型针对该控制器需要提供访问phy的方法包括读写方法针对phy 设备应该抽象出对应的设备类型针对phy设备的驱动应该抽象出对应的phy设备驱动类型针对mdc/mdio应该抽象出对应的总线类型。 而在linux的mdio子系统中和上述我们的猜想类似该子系统抽象的内容如下 针对mii management抽象为struct mii_bus针对phy设备抽象为struct phy_device针对phy设备的驱动抽象为struct phy_driver 为mdc/mdio定义了名为“mdio_bus”的总线类型。 MDIO设备驱动模型介绍 在mdio子模块中针对mii_bus、phy_device、phy_driver、mdio_bus而建立了对应的驱动模型下面我们分析下该子系统的驱动模型。借助于设备-总线-驱动模型实现将这几个数据结构关联起来这些数据结构之间的关联说明如下 借助于设备-总线-驱动模型通过device_register、driver_register接口即实现了phy_device、phy_driver注册至mdio bus行并完成它们之间device与device_driver的关联phy_device通过其drv指针实现与phy_driver的关联与绑定其实借助设备-总线-驱动模型的device、device_driver数据结构也可以获取该phy_device对应的phy_driver个人认为phy_device中的drv指针有点多余mii_bus借助其成员phy_map将所有连接至该mii management的phy device关联起来。 此处mdio 驱动模型的数据结构的抽象该驱动模型与spi驱动模型、i2c驱动模型类似但也有些区别 mii_bus总定义了phy_map将所有连接至该mii management的phy device关联一起而在spi模型中是spi_device中定义指针指向所依附的spi_masterspi master和mii_bus的操作刚好相反spi模型中定义了一个全局链表将所有注册的spi master链接在一起而mdio模型中并没有为mii_bus创建相应的全局链表spi模型与mdio模型均没有将spi master/mii_bus注册至spi_bus/mdio_bus中这是与i2c模型的区别i2c adapter是注册至i2c bus的。mii_bus提供了read、write方法用于和具体的phy device进行通信主要是控制命令的交互 其实mdio子模块也是比较简单的只涉及到寄存器的读写操作借助mii_bus提供的方法理解起来 也相对简单点。 本篇主要是简要介绍mdio驱动模型让大家有一个感性印象下一篇文章我们主要介绍mdio总线-设备-驱动模型。