当前位置: 首页 > news >正文

Linux 内核中PHY子系统(网络):PHY驱动

一. 简介

PHY 子系统就是用于 PHY 设备相关内容的,分为 PHY 设备和 PHY 驱动,和 platform 总线一样,PHY 子系统也是一个设备、总线和驱动模型。

前面一篇文章学习了 PHY子系统中的 PHY设备。文章如下:

Linux 内核中PHY子系统(网络):PHY设备-CSDN博客

本文继续学习 PHY子系统中内容,具体学习 Linux内核中PHY子系统中的PHY驱动。

二. Linux 内核中PHY子系统(网络):PHY驱动

1.  phy_driver结构体

PHY 驱动使用结构体 phy_driver 表示,结构体也定义在 include/linux/phy.h 文件中,结构体 内容如下 ( 为了缩小篇幅,省略了注释部分 )
struct phy_driver {u32 phy_id; /* PHY ID */char *name;unsigned int phy_id_mask; /* PHY ID 掩码 */u32 features;u32 flags;const void *driver_data;int (*soft_reset)(struct phy_device *phydev);int (*config_init)(struct phy_device *phydev);int (*probe)(struct phy_device *phydev);int (*suspend)(struct phy_device *phydev);int (*resume)(struct phy_device *phydev);int (*config_aneg)(struct phy_device *phydev);int (*aneg_done)(struct phy_device *phydev);int (*read_status)(struct phy_device *phydev);int (*ack_interrupt)(struct phy_device *phydev);int (*config_intr)(struct phy_device *phydev);int (*did_interrupt)(struct phy_device *phydev);void (*remove)(struct phy_device *phydev);int (*match_phy_device)(struct phy_device *phydev);int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb,int type);int (*set_wol)(struct phy_device *dev,struct ethtool_wolinfo *wol);void (*get_wol)(struct phy_device *dev,struct ethtool_wolinfo *wol);void (*link_change_notify)(struct phy_device *dev);int (*read_mmd_indirect)(struct phy_device *dev, int ptrad, int devnum, int regnum);void (*write_mmd_indirect)(struct phy_device *dev, int ptrad,int devnum, int regnum, u32 val);int (*module_info)(struct phy_device *dev,struct ethtool_modinfo *modinfo);int (*module_eeprom)(struct phy_device *dev,struct ethtool_eeprom *ee, u8 *data);struct device_driver driver;
};

可以看出,phy_driver 重点是大量的函数,编写 PHY 驱动的主要工作就是实现这些函数, 但是不一定全部实现,稍后我们会简单分析一下 Linux 内核通用 PHY 驱动。

2. 注册 PHY 驱动

(1) 注册一个PHY驱动

phy_driver 结构体初始化完成以后,就需要向 Linux 内核注册, PHY 驱动的注册使用
phy_driver_register 函数,注册 phy 驱动时候会设置驱动的总线为 mdio_bus_type ,也就是 MDIO 总线,关于 MDIO 总线稍后会讲解,函数原型如下:
int phy_driver_register(struct phy_driver *new_driver)
函数参数和返回值含义如下:
new_driver 需要注册的 PHY 驱动。
返回值: 0 成功,负值 失败。

(2) 连续注册多个 PHY 驱动

一个厂家会生产多种 PHY 芯片,这些 PHY 芯片内部差别一般不大,如果一个个的去注册驱动将会导致一堆重复的驱动文件,因此, Linux 内核提供了一个连续注册多个 PHY 驱动的函数: phy_drivers_register 函数。
首先准备一个 phy_driver 数组,一个数组元素就表示一个 PHY 芯片的驱 动,然后调用 phy_drivers_register 一次性注册整个数组中的所有驱动,函数原型如下:
int phy_drivers_register(struct phy_driver *new_driver, int n)

函数参数和返回值含义如下:

new_driver 需要注册的多个 PHY 驱动数组。
n 要注册的驱动数量。
返回值: 0 成功,负值 失败。

3. 卸载 PHY 驱动

卸载 PHY 驱动的话使用 phy_driver_unregister 函数,函数原型如下:
void phy_driver_unregister(struct phy_driver *drv) 
函数参数和返回值含义如下:
new_driver 需要卸载的 PHY 驱动。
返回值: 无。

主控需要配置或读取 PHY 芯片,也就是读写 PHY 的内部寄存器,所以还需要一个控制接口,叫做 MIDO。
MDIO 总线最主要的工作就是匹配 PHY 设备和 PHY 驱动。 接下来学习 MIDO接口总线。

相关文章:

Linux 内核中PHY子系统(网络):PHY驱动

一. 简介 PHY 子系统就是用于 PHY 设备相关内容的,分为 PHY 设备和 PHY 驱动,和 platform 总线一样,PHY 子系统也是一个设备、总线和驱动模型。 前面一篇文章学习了 PHY子系统中的 PHY设备。文章如下: Linux 内核中PHY子系统(网…...

【六 (1)机器学习-机器学习算法简介】

目录 文章导航一、机器学习二、基于学习方式的分类三、监督学习常见类型四、无监督学习常见类型五、强化学习常见分类 文章导航 【一 简明数据分析进阶路径介绍(文章导航)】 一、机器学习 机器学习是一门多领域交叉学科,涉及概率论、统计学…...

TCP服务端主动向客户端发送数据

C TCP 服务端和客户端通信的例子 在此基础上,要修改服务端代码,使其能够每秒向客户端发送当前时间,你需要添加一个循环,每次循环发送当前时间给客户端。同时,你需要在客户端代码中添加接收服务端发送的数据的逻辑。 …...

ObjectiveC-03-XCode的使用和基础数据类型

本节做为Objective-C的入门课程,笔者会从零基础开始介绍这种程序设计语言的各个方面。 术语 ObjeC:Objective-C的简称,因为完整的名称过长,后续会经缩写来代替;项目/工程:也称工程,指的是一个A…...

YOLOv9改进策略 :主干优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

💡💡💡本文改进内容: token mixer被验证能够大幅度提升性能,但典型的token mixer为自注意力机制,推理耗时长,计算代价大,而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构 ,在保证性能的同时足够轻量化。 💡💡💡RIFormerBlock引入到YOLOv9,多个数…...

원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)

클릭 한 번으로 전자상거래 플랫폼 데이터를 캡처하는 것은 일반적으로 웹 페이지에서 정보를 자동으로 추출 할 수있는 네트워크 파충류 기술과 관련됩니다.그러나 모든 형태의 데이터 수집은 해당 웹 사이트의 사용 약관 및 개인 정보 보호 정책 및 현지 법률 및 규정을 준수…...

2024年github开源top100中文

2024年github开源top100中文 动动美丽的小指头点个赞呗,感谢啦!💕💕💕😘😘😘 本文由Butterfly一键发布工具发布 语言star项目名称描述Python45670xai-org/grok-1Grok开源发布Ruby260…...

回收站删除的文件在哪里?专业恢复方法分享(最新版)

“我很想知道我从回收站删除的文件被保存在哪里了呢?我刚刚不小心清空了回收站,现在想将它们恢复,应该怎么操作呢?谁能教教我怎么从回收站恢复文件?” 回收站,作为Windows操作系统中的一个重要组件&#xf…...

什么是工时管理软件?

简而言之,工时管理软件是一种可以帮助管理者跟踪企业员工在项目和任务上花费的时间的软件。然而,工时管理软件不仅是一种收集信息的工具,它还是一种解决方案,使企业能够处理和优化不同的流程和活动,例如工资单、项目预…...

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来,有关智慧城市的讨论主要围绕在技术进步方面,如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上,智慧城市是一个关于未来的设想,其重要原因在于城市中存在各种基础设施、政治、地理、财…...

SQLBolt,一个练习SQL的宝藏网站

知乎上有人问学SQL有什么好的网站,这可太多了。 我之前学习SQL买了本SQL学习指南,把语法从头到尾看了个遍,但仅仅是心里有数的程度,后来进公司大量的写代码跑数,才算真真摸透了SQL,知道怎么调优才能最大化…...

TikTok防关联引流系统:全球多账号运营的终极解决方案

tiktok防关联引流系统介绍,tiktok防关联系统是基于tiktok生态研发的效率工具,帮你快速实现tiktok全球多账号运营,系统配备了性能强劲的安卓,防关联智能终端,可一建创建全球多国手机环境,完美满足各类app软件…...

卷积神经网络(CNN)的数学原理解析

文章目录 前言 1、介绍 2、数字图像的数据结构 3、卷积 4、Valid 和 Same 卷积 5、步幅卷积 6、过渡到三维 7、卷积层 8、连接剪枝和参数共享 9、卷积反向传播 10、池化层 11、池化层反向传播 前言 本篇主要分享卷积神经网络(CNN)的数学原理解析&#xf…...

2024年华为OD机试真题-亲子游戏-Java-OD统一考试(C卷)

题目描述: 宝宝和妈妈参加亲子游戏,在一个二维矩阵(N*N)的格子地图上,宝宝和妈妈抽签决定各自的位置,地图上每个格子有不同的糖果数量,部分格子有障碍物。 游戏规则是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的所有糖果都可以拿走,不能走障…...

大模型显存占用分析

kvcache显存占用分析 假设序列输入长度:s,输出长度:n,数据类型以FP16来保存KV cache。 峰值显存占用:b(sn)hl2*24blh(sn) 注:b表示batch size,第一个2表示k/v cache,第二个2表示FP1…...

matlab中旋转矩阵函数

文章目录 matlab里的旋转矩阵、四元数、欧拉角四元数根据两向量计算向量之间的旋转矩阵和四元数欧拉角转旋转矩阵旋转矩阵转欧拉角旋转矩阵转四元数参考链接 matlab里的旋转矩阵、四元数、欧拉角 旋转矩阵dcmR四元数quatq[q0,q1,q2,q3]欧拉角angle[row,pitch,yaw] % 旋转矩阵…...

探讨Spring Boot的自动配置原理

Spring Boot以其简化Spring应用开发和部署的能力而广受欢迎。其中最引人注目的特性之一就是自动配置,它极大地减少了开发者需要手动编写的配置量。在本篇博客中,我们将深入探讨Spring Boot自动配置的工作原理,以及它是如何使得Spring应用的配…...

【LeetCode】热题100 刷题笔记

文章目录 T1 两数之和T49 字母异位词分组常用小技巧 T1 两数之和 链接:1. 两数之和 题目: 【刷题感悟】这道题用两层for循环也能做出来,但我们还是要挑战一下时间复杂度小于 O ( n 2 ) O(n^2) O(n2)的解法,不能因为它是第一道 …...

基于springboot+vue+Mysql的火车订票管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

C#学习笔记 面试提要

冒泡 for (int m 0; m < arr.Length; m) { for (int n 0; n < arr.Length - 1 - m; n) { if (arr[n] > arr[n1]) { int temp arr[n]; arr[n] arr[n 1]; arr[n1] temp; } } } 选择 for (int m 0; m < arr.Length; m) { int index 0; for (int n 1; n < …...

Linux用户识别与身份验证命令一览

这些命令在系统管理、用户管理和监控工作中扮演着重要的角色。下面&#xff0c;介绍它们的类型及功能描述&#xff1a; 一、系统信息命令 hostname&#xff1a;此命令用于显示系统的主机名&#xff0c;它代表了系统在网络中的唯一标识。hostname -f&#xff1a;此命令进一步展…...

【Linux】GCC编译器(七)

文章目录 初步了解安装 GCC编译第一个程序编译选项 初步了解 GCC是GNU Compiler Collection的缩写&#xff0c;是一个由GNU项目开发的编译器集合。 GCC的历史和发展&#xff1a;GCC最初由理查德斯托曼&#xff08;Richard Stallman&#xff09;发起&#xff0c;目的是创建一个…...

【目录整理】(五)

​​​​​Git 基础 Git 详细安装教程文章浏览阅读10w次&#xff0c;点赞9.6k次&#xff0c;收藏1.7w次。Git 是个免费的开源分布式版本控制系统&#xff0c;下载地址为git-scm.com 或者 gitforwindows.org&#xff0c;本文介绍 Git-2.40.0-64-bit.exe 版本的安装方法&#x…...

项目:USB键盘和鼠标的复合设备

我们的复合设备使用一个物理设备就可以完成多个功能。 使用复合设备同时完成USB键盘和鼠标功能&#xff0c;它的主要实现方式有两种&#xff0c; 第一个就是我们将多个设备描述符合并成一个&#xff0c;这个相对比较简单&#xff0c;我们只要根据相应的报告描述符处理数据就可…...

Linux利用Jenkins部署SpringBoot项目保姆级教程

在当今快速发展的软件开发领域&#xff0c;持续集成和持续部署&#xff08;CI/CD&#xff09;已经成为提升开发效率、缩短产品上市时间的关键实践。Linux系统以其稳定性和开源友好性&#xff0c;成为众多开发者和企业的首选平台。而Spring Boot&#xff0c;作为一个轻量级的Jav…...

elementUI 输入框按回车刷新页面问题

分析原因&#xff1a; 当 el-form 表单内只有一个 el-input 输入框时&#xff0c;且type为text类型时&#xff0c;在输入框内按回车就会触发表单的提交事件。 而当 el-form 表单内有多个 el-input 输入框时&#xff0c;按回车不会执行任何操作。 使用.prevent修饰符来阻止默…...

C++的字节对齐

什么是字节对齐 参考什么是字节对齐&#xff0c;为什么要对齐? 现代计算机中&#xff0c;内存空间按照字节划分&#xff0c;理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问&#xff0c;这就需要各种类型数据按照一定的规…...

ALPHA开发板上的PHY芯片驱动:LAN8720驱动

一. 简介 前面文章了解到&#xff0c;Linux内核是有提供 PHY通用驱动的。 本文来简单了解一下ALPHA开发板上的 PHY网络芯片LAN8720的驱动。是 LAN8720芯片的公司提供的 PHY驱动。 二. ALPHA开发板上的PHY芯片驱动&#xff1a;LAN8720驱动 我 们 来 看 一 下 LAN8720A 的 …...

C语言游戏实战(9):球球大作战

前言&#xff1a; 这款简易版的球球大作战是一款单人游戏&#xff0c;玩家需要控制一个小球在地图上移动&#xff0c;吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写&#xff0c;旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前&#xf…...

【Windows】关闭自动更新

右键单击“此电脑”&#xff0c;点击“管理”。 找到&#xff1a;任务计划程序 -> 任务计划程序库 -> Microsoft -> Windows -> WindowsUpdate 右键单击Scheduled Start任务&#xff0c;然后点击“禁用”即可。 可能还会存在左下角提示更新重启的字样&#x…...

南宁网站建设电话/学网络运营需要多少钱

共2页 第 页1 2015—2016学年第二学期期中考试卷考试课程《常用工具软件》 专业 信息技术类 命题人 XXX(答题时间 90 分钟)一、选择题( 每小题2分&#xff0c;共40分)注意&#xff1a;只有将答案写在下面表格内才能得分)1、使用PartitionMagic 创建新分区时&#xff0c;默认的文…...

qian p.wordpress/百度网站排名seo

1.图片下方3像素&#xff1a;在div中插如图片时&#xff0c;图片会将div下方撑大3px&#xff1b; 解决方案&#xff1a;&#xff08;a&#xff09;将<div>和<img>写在一行上&#xff08;IE6、ie7&#xff09;; &#xff08;b&#xff09;将<img>转为块状元素…...

网站建设常用工具/怎样推广app

场景 通过上一节的学习我们掌握了如何生成并发布接口文档&#xff0c;可是现实总是残酷的。前端团队往往不满足于干巴巴的接口文档&#xff0c;他们需要对接真实的数据&#xff0c;但这样很受限于后端开发进度&#xff0c;于是便有了Mock(模拟)这种东西&#xff0c;也就是我们…...

网站每月流量/东莞做网站优化

2019独角兽企业重金招聘Python工程师标准>>> class Person_Tbl(models.Model): 定义人物类 name models.CharField(max_length254,default) #姓名 sex models.CharField(max_length125,default) …...

双语网站建设费用/今日微博热搜榜前十名

前段时间写了声通信开源SinVoice。我们发现非常IT利益相关方对声学原理与应用。特别面前的一个开放源码的版本号&#xff08;SinVoice&#xff09;在...的基础上。声波的效果、效率方面等方面做了很多优化&#xff0c;达到了商用标准。&#xff08;参见声通信理论&#xff1a;h…...

api网站模板/资源搜索引擎

在网上看了几篇AdaBoost的介绍后&#xff0c;感觉网上介绍的都不好&#xff0c;不能够让人完全理解&#xff0c;因此就下载了一个外国人写的代码&#xff0c;总算透彻的理解了AdaBoost&#xff0c;可以向Transfer开进了&#xff0c;现在分享一下代码&#xff1a;主函数代码[pla…...