在用户层访问smi/mdio总线, 读写phy芯片寄存器的通用代码。Linux内核2.6以上通用。

mdio_cmd.c

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/if.h>
#include <linux/mii.h>
#include <linux/sockios.h>#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>#define DEVICE getenv("ETH_DEVICE")?getenv("ETH_DEVICE"):"eth0"static int fd = -1;
static struct ifreq ifr;static int mdio_read(int skfd, int location)
{struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data;mii->reg_num = location;if (ioctl(skfd, SIOCGMIIREG, &ifr) < 0) {fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,strerror(errno));return -1;}return mii->val_out;
}static void mdio_write(int skfd, int location, int value)
{struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data;mii->reg_num = location;mii->val_in = value;if (ioctl(skfd, SIOCSMIIREG, &ifr) < 0) {fprintf(stderr, "SIOCSMIIREG on %s failed: %s\n", ifr.ifr_name,strerror(errno));}
}
static void help()
{printf("help :\n");printf("set ETH_DEVICE to change device\n");printf("\t\tmdio_cmd addr reg [val]\n");
}int main(int argc, char *argv[])
{struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data;int addr, reg;int ret;fd = socket(AF_INET, SOCK_DGRAM,0);if (fd < 0) {perror("open");exit(1);}if (argc < 3) {//i2c_scan();help();return 1;}strncpy(ifr.ifr_name, DEVICE, IFNAMSIZ);addr = strtol(argv[1], NULL, 0);ret = ioctl(fd, SIOCGMIIPHY, &ifr);if (ret < 0) {fprintf(stderr, "SIOCGMIIPHY on %s failed: %s\n", ifr.ifr_name,strerror(errno));return 1;}if (addr != -1) {/* allow to overides phy id */mii->phy_id = addr;}printf("using phy at addr %x id=%04x%04x\n", mii->phy_id,mdio_read(fd, 2), mdio_read(fd, 3));reg = strtol(argv[2], NULL, 0);if (argc == 3)printf("reading : 0x%02x\n", mdio_read(fd, reg));else {printf("writting\n");mdio_write(fd, reg, strtol(argv[3], NULL, 0));}return 0;
}

linux系统读写eth网卡PHY寄存器工具mdio_cmd相关推荐

  1. 13 种在 Linux 系统上检测 CPU 信息的工具

    13 种在 Linux 系统上检测 CPU 信息的工具 问题: 我想要了解我的电脑关于CPU处理器的详细信息,查看CPU信息比较有效地方法是什么? 根据你的需要,有各种各样的关于你的CPU处理器信息你 ...

  2. linux i2c 读写函数,Linux下读写芯片的I2C寄存器

    要想在Linux下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章<手把手教你写Linux I2C设备驱动>已经做了初 ...

  3. Linux系统\Centos没有网卡eth0配置文件怎么办?

    Linux系统\Centos没有网卡eth0配置文件怎么办? | 浏览:8185 | 更新:2014-07-16 21:14 1 2 3 4 5 6 7 分步阅读 大家都知道linux系统一般作为服务 ...

  4. Linux下读写芯片的I2C寄存器

    Linux下读写芯片的I2C寄存器 2012-01-10 11:40:18 标签:Linux 寄存器 驱动 读写 I2C 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本 ...

  5. linux系统怎么重启网卡?linux重启网卡的三种教程

    在实际工作中,经常会遇到Linux系统进行重启网卡的操作.在这里整理一下,进行多种方法的网卡重启. 一.service network restart 1.首先用CRT工具连接到Linux命令行界面. ...

  6. linux下如何重启网卡,linux系统如何重启网卡

    大家在实际工作中,经常会遇到Linux系统进行重启网卡的操作,那么具体如何进行重启呢?下面就由学习啦小编跟大家分享一下操作步骤吧,希望对大家有所帮助~ linux系统重启网卡的方法 一.service ...

  7. git管理工具 linux,linux系统下使用流行的版本管理工具 Git

    前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...

  8. linux 系统硬件信息检测工具,9种在Linux系统上检测CPU信息的工具

    在Linux中,有许多命令行或基于GUI的工具就能来展示你的CPU硬件的相关具体信息.下面是学习啦小编收集整理的9 种在 Linux 系统上检测 CPU 信息的工具,希望对大家有帮助~~ 9 种在 L ...

  9. linux重置网络的命令,linux系统怎么重启网卡?linux重启网卡的三种教程

    在实际工作中,经常会遇到Linux系统进行重启网卡的操作.在这里整理一下,进行多种方法的网卡重启. 一.service network restart 1.首先用CRT工具连接到Linux命令行界面. ...

最新文章

  1. DBSCAN的两个核心参数是什么?如何获取最佳参数?如何可视化获取的过程?
  2. 浅析响应式网站建设的注意要点
  3. Technical Artist的不归路 —— Kajiya-Kay Shading
  4. IDEA中部署Tomcat设置访问路径
  5. 我感觉我恰似一个呆逼
  6. FreeRTOS--API函数
  7. leetcode 1489. 找到最小生成树里的关键边和伪关键边(并查集)
  8. leetcode612. 平面上的最近距离(SQL)
  9. 【转载】从Docker容器漏洞谈Docker安全
  10. centos7 mysql 开机启动_mysqld service 随开机启动 (Centos6,Centos7)
  11. sequelize 左连接 left join_SparkSQL连接查询中的谓词下推处理(下)
  12. 泛型:了解泛型与通配符
  13. 高速软件加密锁技术的发展历程
  14. zookeeper单机和集群搭建过程详细步骤
  15. 【黑客】利用VBS脚本让QQ永远在线,等级速升
  16. 软件测试功底技术——编程语言
  17. 【图像增广库imgaug】官方文档翻译(一):加载并增强图片
  18. “靠天吃饭”坐拥百万资产客户,富途摆脱被动局面难?
  19. 模块加载失败请确保该二进制存储在指定路径中
  20. pc android ios 学英语,全面升级更新.免费 小学英语人教版.三起[Android.iOS]

热门文章

  1. 最高效寻找重复数据,如何高效率的查找到数组中的重复值
  2. 非标自动化设备涉及的行业有哪些?
  3. MuleSoft知识总结-13.Mule组件(Set Variable,For Each,Choice)
  4. 如何查看/修改Linux时区和时间
  5. 基于VC++的3D地形绘制与纹理贴图
  6. 小熊派移植华为 LiteOS-M(基于MDK)
  7. acdsee14.0许可密钥使用方法:
  8. Java并发包:ScheduledExecutorService
  9. 汽车变速器(自动挡)英文缩写
  10. centos7无盘启动_从无盘启动看Linux启动原理