Linux-MDIO总线的read/write

一、MDIO总线作用:

       MDIO总线用来管理phy/switch等外置芯片,实现芯片寄存器的读写等操作,只要是挂在mdio总线上的芯片,都可以通过mdio的方式来访问;

 作用:

        1、配置phy的工作模式(自协商、百兆/千兆、交叉自适应等);

        2、获取phy的工作状态(link状态等);

        3、配置switch的相关寄存器(mode、vlan、流控等);

        4、获取switch的port的数量统计,丢包统计等;

 一般作用于以下几种情形:

        1、phy直接通过mac-to-mac连接到cpu的mac资源上:

        2、phy接到switch的mac上:

        3、switch直接通过back-to-back接到cpu的mac资源上:

        4、switch没有连接到cpu的mac资源上:

         

二、Linux系统对mdio总线的支持:

        Linux系统对于mdio总线的驱动,是用mii总线来实现的,mii总线提供了soc的bus->read/bus->write的方法;对于直接连接到mac资源的phy设备,mac网卡初始化的时候都会通过查询dts或者遍历phy地址来将该phy设备注册到该mii总线上,通ethtool工具来查看或者配置phy基本工作模式。

        

三、访问mdio总线上的设备:

        一般linux下访问mdio总线下的设备,可以通过如下几种方式来实现:

        1、linux应用程序通过ioctl来访问:

              前提条件是该phy直接挂载在mac上,注册phy的时候注册到mii总线上。

               ioctl(sockfd, SIOCGMIIPHY, &ifr);

        2、linux应用程序中通过mmap方式映射mdio寄存器区域,直接读写该寄存器来实现mdio的访问;

        3、直接通过mii总线的read/write接口来访问:

                 1)、自己写一个驱动程序,驱动中注册phy设备到mii总线,并提供operations的方法:

                 2)、自己写一个驱动程序,通过

                        drv = driver_find(name, &platfom_bus_type)

                        dev = driver_find_device(drv);

                        pdev = to_platform_device(dev);

                        ndev = platform_get_drvdata(pdev);

                        pridate = netdev_priv(ndev);

                        mii_buss = pridate->mii_bus;

                        我们就找到了mii_buss总线,及mdio总线,通过mii_buss->read/mii_buss->write来实现对mdio设备的读写。

                

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值