MDIO总线

news2024/11/24 0:23:43

基于linux-3.14.16

首先要搞清楚总线的位置,即硬件上的位置
在这里插入图片描述
如上图,mdio总线是mac和phy之间的连接方式,主要用于配置配置phy的寄存器,所以phy应该是器的一类物理设备,mdio总线驱动和总线设备都是围绕phy工作的。

一、总线注册

在这里插入图片描述
常规操作,定义一个bus_type调用bus_register接口注册一个总线。

二、mido总线设备

1、platform总线

设备树有节点fec
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、平台总线probe

在这里插入图片描述
fec_enet_mii_init即将会添加一个mdio总线设备
分配一个mii_bus,这个mii_bus内部有一个device,实际是一个mido总线设备(????)。

1)注册mii_bus

在这里插入图片描述
初始化mii_bus
在这里插入图片描述
在这里插入图片描述
最后注册mii_bus,我们看看是怎么注册的
在这里插入图片描述
扫描phy,每次添加新的mii_bus都会去扫描mido总线,如果有读到phy id,就会创建一个phy_device并注册。

这里是根据phy_mask的标记去决定要不要遍历,应该是有添加了就不会去扫描这个地址了。
在这里插入图片描述
看看是怎么扫描的,mdiobus_scan

2)创建并注册phy_device

看看mdiobus_scan的工作
总的来说,是扫描硬件,发现mido总线上有phy就创建一个phy_device,然后作为mido总线设备注册。
在这里插入图片描述

看看get_phy_device干了什么

get_phy_id会在mdio总线上发命令去读phy id,是硬件操作
有phy硬件就会创建phy_device
在这里插入图片描述
看看是怎么创建phy_device的,phy_device_create
在这里插入图片描述

在这里插入图片描述
这里看到,原来phy_device才是作为mdio的总线设备。

phy_device_register注册
硬件初始化
在这里插入图片描述
device_add就是注册设备的底层操作,Linux设备驱动模型(二)有说明
在这里插入图片描述

至此就是mdio总线设备的添加过程。

三、mido总线驱动

就是phy_driver
一般是具体phy芯片生产商提供
下面作简要分析
在这里插入图片描述
这是个数组,这里只截图了一个
在这里插入图片描述
匹配后会执行,应该会执行驱动的probe,但这里没有给probe,发现是注册驱动的时候给了默认的,不用驱动自己实现

1、phy_drivers_register

在这里插入图片描述
在这里插入图片描述
这里看出是mdio的总线驱动了,并紫萼初始化了驱动的probe

2、phy_probe

好像没干什么,跳过
在这里插入图片描述

至此mido总线的注册,mdio总线设备,mdio总线驱动的添加都分析完了。
关于这个mii_bus,还是没有分析清楚了,现在可以知道的是,phy驱动在需要操作寄存器的时候,会使用mii_bus的一些回调函数,
真正操作硬件的是mii_bus。

还有一点,mdio_bus_type的probe哪去了???
没有的话,也会直接执行驱动的probe了

四、mdio设备怎么被操作

待续…

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

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

相关文章

一图看懂 async_timeout 模块:异步 I/O 的超时设置,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 async_timeout 模块:异步 I/O 的超时设置,资料整理笔记(大全) 🧊摘要🧊模块图🧊类关系图…

chatgpt赋能Python-pythonfrozenset

Python frozenset介绍 在Python中,可以通过frozenset创建不可变集合。与set不同,frozenset一旦被创建就无法修改。frozenset通常用于作为字典的键,因为字典键必须是不可变的。 如何创建frozenset frozenset可以通过将可迭代对象作为参数传…

Blazor实战——Known框架快速开始

Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 开源地址: https://gitee.com/known/Known 1. 安装项目模板并创建新项目 打开命令行输入如下命令安装和创建。 -- 安装模板 dotnet n…

chatgpt赋能Python-pythonformat的用法小数点位数

Python中的format函数和小数点位数 介绍 Python中的format函数是一种格式化输出字符串的方法,允许你使用占位符来指定输出的格式。你可以使用format函数来格式化字符串,比如确定字符串的长度、插入变量或按特定格式输出字符串。 在本文中,…

Xubuntu22.04之自动调节亮度护眼redshift(一百七十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

chatgpt赋能Python-pythonfib

Pythonfib:一个优秀的计算斐波那契数列的Python函数 斐波那契数列是一种非常有趣也非常常见的数列,它起源于数学但在计算机科学中也经常被用到。Pythonfib是一个优秀的Python函数,可以用来计算斐波那契数列。本文将对Pythonfib进行详细介绍&…

本地电脑搭建Plex私人影音云盘教程,内网穿透实现远程访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDN远程穿透的文章:免费搭建Plex家庭影音中心 - 打造超级多媒体中心【公网远程访问…

【红队系列】外网信息收集(二)

红队系列 🔥系列专栏:红队系列 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2023年5月20日🌴 🍭作者水平很有限,如果发现错误&…

chatgpt赋能Python-pythondescribe

PythonDescribe:更快、更准确、更易用的Python文档生成工具 介绍 Python是一种在数据科学和Web开发等领域广泛应用的高级编程语言。但是,在编写Python代码时,文档的编写常常被忽视。文档的缺失会使代码难以理解、维护和重复使用。幸运的是&…

基于MAC地址的ACL配置

基于MAC地址的ACL配置 【实验目的】 掌握基于MAC地址的标准ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 S1 e0/0 N/A N/A N/A e0/1 N/A N/A N/A PC1 N/…

chatgpt赋能Python-pythonfloat设置精度

Python float设置精度 在Python中,float是一种表示小数的数据类型。但是在某些情况下,我们可能需要设置float的精度,以避免舍入误差造成的问题。在本文中,我们将介绍如何在Python中设置float的精度。 为什么需要设置float的精度…

芯片设计全流程知识点总结

1、低功耗工具 功耗分析预测分析工具包括PowerArtist(Ansys)、Spyglass Power(Synopsys)、Prime Time PX(Synopsys)和Redhawk(Ansys)等。通过对实际项目中;不同工具的比…

单片机GD32F303RCT6 (Macos环境)开发 (二十二)—— FreeRTOS的移植

GD32F303RCT6 FreeRTOS的移植 1、在Application的Makefile中增加freertos的编译选项,如下: ENABLE_FREERTOS yes ifeq ($(ENABLE_FREERTOS), yes) APPLICATION_FLAGS \ -DENABLE_FREERTOS endif2、Application目录下增加FreeRtos目录,将下…

chatgpt赋能Python-pythoncuda

PythonCUDA:将Python与GPU相结合的高性能计算工具 介绍 Python是一种简单易学的高级编程语言,而NVIDIA CUDA是一种基于GPU的并行计算平台。两者结合,可以实现高性能计算,Python可以做到数据处理方便快捷,而CUDA则以其强大的并行…

【拼题A】 520 钻石争霸赛 2023 题解

520-1 520无尽爱 分数 5 作者 陈越 单位 浙江大学 《I Love You 1000 Times》是 The Platters 于 2019 年演唱的歌曲。在 520 这个日子里,拼题 A 请你实现一个小功能,把 1000 这个数字换成用户输入的任意一个数字,然后仿照歌名的句式输出表白…

三、Spring boot集成mongodb

文章目录 一、Spring boot集成mongodb1、集成简介2、搭建开发环境2.1 初始化工程2.2 引入依赖2.3 添加配置 3、基于MongoTemplate 开发CRUD3.1 添加实体3.2 实现3.3 添加测试类 4、基于MongoRepository开发CRUD4.1 实现4.2 添加Repository类4.3 添加测试类 一、Spring boot集成…

chatgpt赋能Python-pythondot

PythonDot - 一款强大的SEO工具 作为一名有10年Python编程经验的工程师,我一直在寻找一种能够大大简化我的SEO工作流程的工具。之前我试用了很多SEO工具,但它们要么太昂贵,要么功能太少。最终,我发现了PythonDot - 一款功能强大的…

chatgpt赋能Python-pythonend怎么用

Pythonend:什么是Pythonend以及如何使用它? 介绍 Pythonend是一个能够自动化处理网页和数据的Python框架。它能够处理各种数据来源,比如CSV、Excel、MySQL和SQL Server数据。它还可以从网页中提取数据并将其转换成易于分析的格式。 Python…

C++13-STL模板

C13-STL模板 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 大纲要求 【 3 】算法模板库中的函数:min、max、swap、sort 【 4 】栈 (stack)、队列 (queue)、链表 (list)、 向量(vector)等容器 1.函数模板 泛…

真题详解(求叶子结点数)-软件设计(七十九)

真题详解(数字签名算法)-软件设计(七十八)https://blog.csdn.net/ke1ying/article/details/130771043 1、面向对象分析和设计中: 系统内对象和系统外参与者的联系媒介:边界类。 实体类:负责业务和数据逻辑。 控制类&#xff1…