以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取【原创】
以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取
Author:张昺华
Email:920052390@qq.com
Time:2019年3月23日星期六
此文也在我的个人公众号以及《Linux内核之旅》上有发表:以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取
很喜欢一群人在研究技术,一起做有意思的东西,一起分享技术带给我们的快乐,也希望中国有更多的人热爱技术,喜欢一起研究、分享技术,然后可以一起用我们的技术来做一些好玩的东西,可以为这个社会创造一些东西来改善人们的生活。
如下是本人调试过程中的一点经验分享,以太网驱动架构毕竟涉及的东西太多,如下仅仅是针对加载流程和围绕这个问题产生的分析过程和驱动加载流程部分,并不涉及以太网协议层的数据流程分析。
【硬件环境】 Imx6ul
【Linux kernel版本】 Linux4.1.15
【以太网phy】 Realtek8201f
1.1. 以太网驱动probe流程
1.1 mii_bus初始化以及phy id的获取
然后进行mii的一些初始化fec_enet_mii_init(pdev);
主要是对struct mii_bus这里的成员进行初始化
并且会做注册mdiobus的工作
因为我们系统是使用设备数,因此会执行of_mdiobus_register
进行midobus_register
由于设备树代码是这样的:
如下路径:drivers/of/of_mdio.c
因此我们是走get_phy_device这个函数:
所以我说内核代码写的好,就是注释和函数名基本就是意思了,获取phy device,
最关键的函数就是它,也就是本文的核心,这里是从寄存器中通过mdiobus的read方法来从phy中获取phy id,但是这里并没有获取到phy_id ,这寄存器都是以太网的通用寄存器
既然没有从寄存器中获取到phy_id,因此phy_device_create也不会在mii bus数据结构中创建phy_device,
那么应用层在进行socket的时候,回调了open函数 fec_enet_open,这个函数中的fec_enet_mii_probe就不会从of_phy_connect中获取到phy_device,因此就会出现-19的错误。那么获取不到phy_id的根本原因就是因为reset的时序没满足datasheet的要求,具体原因分析请见最上面的《标题2 原因分析》
1.2 Realtek phy的内核配置
那这是获取不到phy id的过程,那么正常的获取phy id的流程又是怎样的呢?
我们可以看到这样的log:
那这里又是怎样匹配的呢?
make kernel_menuconfig中我们需要选中realtek这款phy
选中Realtek PHYs,这样realtek.c就可以编译到kernel了
代码路径:drivers/net/phy/realtek.c
phy_id = 0x001cc816我们需要把这个phy id填入
module_phy_driver(realtek_drvs);
这里会将这个phy_drvier注册进去
然后在这里把phy_device与phy_drvier关联了起来,再由phy_driver_register注册
Freescale的以太网控制器驱动fec_main.c中
static int fec_enet_mii_probe(struct net_device *ndev)
1.3 以太网流程总图
最后汇总一个图给大家:
4. 网址分享
http://stackoverflow.com/questions/5308090/set-ip-address-using-siocsifaddr-ioctl
http://www.ibm.com/support/knowledgecenter/ssw_aix_72/com.ibm.aix.commtrf2/ioctl_socket_control_operations.htm
https://lkml.org/lkml/2017/2/3/396
linux PHY驱动
http://www.latelee.org/programming-under-linux/linux-phy-driver.html
Linux PHY几个状态的跟踪
http://www.latelee.org/programming-under-linux/linux-phy-state.html
第十六章PHY -基于Linux3.10
https://blog.csdn.net/shichaog/article/details/44682931
```
End
以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取【原创】的更多相关文章
- 以太网驱动的流程浅析(三)-ifconfig的-19错误最底层分析【原创】
以太网驱动流程浅析(三)-ifconfig的-19错误最底层分析 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及& ...
- 以太网驱动的流程浅析(一)-Ifconfig主要流程【原创】
以太网驱动的流程浅析(一)-Ifconfig主要流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...
- 以太网驱动的流程浅析(四)-以太网驱动probe流程【原创】
以太网驱动的流程浅析(四)-以太网驱动probe流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...
- 以太网驱动的流程浅析(二)-Ifconfig的详细代码流程【原创】
以太网驱动流程浅析(二)-ifconfig的详细代码流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<L ...
- Android 4.4 Kitkat Phone工作流程浅析(七)__来电(MT)响铃流程
本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. ...
- Android 4.4 Kitkat Phone工作流程浅析(六)__InCallActivity显示更新流程
本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. ...
- Android 4.4 Kitkat Phone工作流程浅析(八)__Phone状态分析
本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象.与Google原生AOSP有些许差异.请读者知悉. ...
- 玩转Windows服务系列——服务运行、停止流程浅析
通过研究Windows服务注册卸载的原理,感觉它并没有什么特别复杂的东西,Windows服务正在一步步退去它那神秘的面纱,至于是不是美女,大家可要睁大眼睛看清楚了. 接下来研究一下Windows服务的 ...
- 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解
本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...
随机推荐
- 自己封装Linux命令行万能解压命令
问题背景 Linux下经常需要解压文件,直接在命令行敲命令解压是最便捷的. 但问题在于,不同的压缩格式,需要用不同命令和不同参数,完全记不住啊. 解决方式 既然记不住,那就换一种思路,假如有一条命令能 ...
- Excel映射到实体-easyexcel工具
来源 项目需要把Excel进行解析,并映射到对象属性,实现类似Mybatis的ORM的效果.使用的方式是自定义注解+POI,这种方式代码复杂而且不易于维护. easyexcel是阿里巴巴开源的一个框架 ...
- sap-abap 权限控制
FORM AUTH_CHECK . "工厂 LOOP AT S_WERKS. AUTHORITY-CHECK OBJECT 'M_BANF_WRK' ID 'WERKS' FIELD S_W ...
- PlayJava Day029
1.Java Reflection:Reflection(反射)是被视为动态语言的关键 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息 并能直接操作任意对象的内部属性及 ...
- centos开启ftp服务
新安装的要先配置网络 $_> vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 最后一行 onboot = yes $_> yum i ...
- 初步了解Node.js,学做简单的留言本案例
在还没有正式的学Node.js的时候, 你们认为Node.js 对于前端来说是什么呢? 会认为Node.js 是框架? 认为这是类似Jquery的一个快速.简洁的JavaScript框架? 反正我自己 ...
- windows下安装mysql教程
1.下载安装包-根据自己电脑系统选择合适的版本: https://dev.mysql.com/downloads/mysql/ 2.配置环境变量 2.1 解压所下载的压缩包 2.2 环境变量 win ...
- 50-overlay 如何实现跨主机通信?
上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...
- [Go] 轻量服务器框架全局配置的实现以及解析json
在一个应用中经常需要有一个配置文件,可以对代码中的参数进行配置,可以使用一个json文件来对应一个struct的对象,进行全局配置 建一个conf/zinx.json作为配置文件 { "Na ...
- [洛谷P1169][题解][ZJOI2007]棋盘制作
我不是题目的说 这道题运用了一种很巧妙的DP方式:悬线法 如图,蓝色为悬线,黄色为向两边延伸的长度 那么显然,最大子矩形的宽一定是这些黄线中最小的(证明从略) 所以我们可以维护三个数组: Up[i][ ...























