Linux Mii management/mdio子系统分析之一 总体概述

news2025/1/11 12:47:06

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之间的连接,包括两部分:

  1. 通过mii/rgmii/sgmii/…与phy连接,进行数据的通信;
  2. 通过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子系统,我们可以针对上面的设备逻辑图进行如下的设备驱动模型的抽象:

  1. 针对mii management而言,应该抽象控制器对应的类型;
  2. 针对该控制器,需要提供访问phy的方法,包括读写方法
  3. 针对phy 设备,应该抽象出对应的设备类型;
  4. 针对phy设备的驱动,应该抽象出对应的phy设备驱动类型;
  5. 针对mdc/mdio,应该抽象出对应的总线类型。

 

而在linux的mdio子系统中,和上述我们的猜想类似,该子系统抽象的内容如下:

  1. 针对mii management,抽象为struct mii_bus;
  2. 针对phy设备,抽象为struct phy_device;
  3. 针对phy设备的驱动,抽象为struct phy_driver ;
  4. 为mdc/mdio定义了名为“mdio_bus”的总线类型。

 

 

 

MDIO设备驱动模型介绍

    在mdio子模块中,针对mii_bus、phy_device、phy_driver、mdio_bus而建立了对应的驱动模型,下面我们分析下该子系统的驱动模型。借助于设备-总线-驱动模型,实现将这几个数据结构关联起来,这些数据结构之间的关联说明如下:

  1. 借助于设备-总线-驱动模型,通过device_register、driver_register接口,即实现了phy_device、phy_driver注册至mdio bus行,并完成它们之间device与device_driver的关联;
  2. phy_device通过其drv指针,实现与phy_driver的关联与绑定(其实借助设备-总线-驱动模型的device、device_driver数据结构,也可以获取该phy_device对应的phy_driver,个人认为phy_device中的drv指针有点多余);
  3. mii_bus借助其成员phy_map,将所有连接至该mii management的phy device关联起来。

 

 

 

此处mdio 驱动模型的数据结构的抽象,该驱动模型与spi驱动模型、i2c驱动模型类似,但也有些区别:

  1. mii_bus总定义了phy_map,将所有连接至该mii management的phy device关联一起,而在spi模型中,是spi_device中定义指针指向所依附的spi_master(spi master和mii_bus的操作刚好相反);
  2. spi模型中定义了一个全局链表,将所有注册的spi master链接在一起,而mdio模型中并没有为mii_bus创建相应的全局链表;
  3. spi模型与mdio模型,均没有将spi master/mii_bus注册至spi_bus/mdio_bus中,这是与i2c模型的区别(i2c adapter是注册至i2c bus的)。
  4. mii_bus提供了read、write方法,用于和具体的phy device进行通信(主要是控制命令的交互)

 

    其实mdio子模块也是比较简单的,只涉及到寄存器的读写操作(借助mii_bus提供的方法),理解起来 也相对简单点。

本篇主要是简要介绍mdio驱动模型,让大家有一个感性印象,下一篇文章我们主要介绍mdio总线-设备-驱动模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1388327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java登录功能实现原理解密

目录 1、前言 2、登录功能介绍 3、前端实现 4、后端实现 5、数据库存储 6、加密和解密机制 7、安全性考虑 8、结语 1、前言 在Web开发中,登录功能是一个常见的需求。用户在登录页面输入用户名和密码后,系统会验证用户的身份信息,并根…

【文本到上下文 #6】高级词嵌入:Word2Vec、GloVe 和 FastText

一、说明 欢迎来到“完整的 NLP 指南。到目前为止,我们已经探索了自然语言处理的基础知识、应用程序和挑战。我们深入研究了标记化、文本清理、停用词、词干提取、词形还原、词性标记和命名实体识别。我们的探索包括文本表示技术,如词袋、TF-IDF 以及词嵌…

什么是高标准农田?为何要建设?该如何建设?

随着农业技术的不断进步,高标准农田成为了现代农业的标志之一。那么,什么是高标准农田?为何要建设高标准农田?如何建设高标准农田呢?接下来,我们将为您一一解答。 首先,我们来了解一下高标准农田…

【设计模式-3.3】结构型——享元模式

说明:说明:本文介绍设计模式中结构型设计模式中的,享元模式; 游戏地图 在一些闯关类的游戏,如超级玛丽、坦克大战里面,游戏的背景每一个关卡都不相同,但仔细观察可以发现,其都是用…

深入解析JavaScript中的变量作用域和闭包

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 JavaScript作为一门解释执行的脚本语言,其变量作用域与传统编译型语言…

Elasticsearch Windows部署-ELK技术栈

1、下载Elasticsearch、kibana、logstash 本文不介绍ELK相关原理知识,只记录部署操作过程 下载地址Past Releases of Elastic Stack Software | Elastic 选择同一版本,这里选择是当前最新版本8.11.3 解压放在同目录下,方便后续操作与使用 …

Linux网络文件共享服务

目录 一.文件存储类型 1.直连式存储:Direct-Attached Storage,简称DAS 2.存储区域网络:Storage Area Network,简称SAN(可以使用空间,管理也是你来管理) 3.网络附加存储:Network-…

卡尔曼滤波基本原理详解

卡尔曼滤波 卡尔曼滤波简介 卡尔曼滤波器(Kalman Filter)是一种高效的递推滤波器(即基于上一个时刻的估计来更新当前时刻的估计),它能够从一系列含有噪声的观测数据中估计动态系统的状态。它在1960年由鲁道夫卡尔曼提…

kubectl与 jq的另外一些用法

背景: 在日常运维工作中,我们需要管理和操作大量的配置文件,这在使用 Kubernetes 集群管理应用时尤为常见。Kubernetes 提供了一个名为 ConfigMap 的资源对象,它用于存储应用的配置信息。有时,我们需要查找哪些 Confi…

第二证券:旅游股大涨 “预热”春节黄金周

在淄博烧烤热、哈尔滨冰雪热火爆出圈后,希望能接住文旅下一波“泼天富贵”的各地文旅局各出奇招并“卷”出新高度,被各地网友谈论“杀疯了”。 其间,A股游览概念股迎来一波集体上涨,成为不少出资者的重视热点,而行将到…

【原创】docker +宝塔+安装zabbix

Zabbix: Zabbix可以监控各种网络服务、服务器和网络设备,而无需在目标设备上安装客户端。它的强大之处在于自带的Web界面,能够提供实时监控和各种报警功能。方法1: 步骤 创建Docker Compose文件: 首先,你需要创建一个docker-comp…

FFmpeg之AVFormat

文章目录 一、概述二、解封装流程三、重要结构体3.1、AVFormatContext3.2、AVInputFormat3.3、AVOutputFormat3.4、AVStream 四、重要函数分析4.1、avformat_alloc_context4.2、avformat_open_input4.2.1、init_input4.2.2、av_probe_input_format2 4.3、avformat_find_stream_…

如何在几分钟内创建AI工具

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 完成这篇文章后,您将在不到 2 分钟的时间内构建您的第一个 AI 工具,而无需编写任何代码! 您只需使用我将在这里与您分享的脚本…

JVM内存模型/运行时数据区域

java虚拟机管理这块内存,所以我们也叫运行时数据区域 总览 这里按线程是否共享来分类,所谓线程不共享就是每个线程里面都会配一套 程序计数器 栈, 互相不干涉。 而方法区和堆是线程所有共享 意味着只有一个(这里注意堆是实际概念…

第二证券:行业术语解读:CPO概念是什么意思?

cpo概念又名共封装光学概念,它是指把硅光模块和CMOS芯片用高级封装的方法耦合在背板PCB上,从而在成本、功耗和尺度上都进一步提升数据中心使用中的光互联技能等相关上市公司组成的概念。 概念股,并不特指于某一支股,而是一个选股话…

SV-8004VP 网络对讲求助话筒,4个自定义按键

SV-8004VP网络对讲求助话筒,4个自定义按键 SV-8004VP是一款4按键求助对讲话筒,具有10/100M以太网接口,支持G.711音频编解码,其接收SIP网络的音频数据,实时解码播放,还配置了麦克风输入和扬声器输出。 SV-…

什么是非电离辐射与电离辐射?

摘要: 非电离辐射和电离辐射是两种不同类型的辐射,它们主要区别在于能量水平和与物质相互作用的方式。 非电离辐射 非电离辐射是指能量较低,不足以使原子或分子的电子脱离其原子核束缚而产生电离现象的电磁波。这类辐射不 ... 非电离辐射和电离辐射是两…

Bazel

简介: Bazel 是 google 研发的一款开源构建和测试工具,也是一种简单、易读的构建工具。 Bazel 支持多种编程语言的项目,并针对多个平台构建输出。 高级构建语言:Bazel 使用一种抽象的、人类可读的语言在高语义级别上描述项目的构建属性。与其…

【遥感专题系列】影像信息提取之——面向对象的影像分类技术

“同物异谱,同谱异物”会对影像分类产生的影响,加上高分辨率影像的光谱信息不是很丰富,还有经常伴有光谱相互影响的现象,这对基于像素的分类方法提出了一种挑战,面向对象的影像分类技术可以一定程度减少上述影响。 本…