MDIO总线

基于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设备怎么被操作

待续…

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值