转载:linux+arm 网卡故障调试:ethtoolphy寄存器读写
两个工具一个是ethtool工具,一个是源码编译的可以读phy寄存器的工具phyreg。两者结合使用,事半功倍。
ethtool 可以查看和设置网卡的工作状态,比如查看设置网卡的链接 自协商,10/100/1000M,双工半双工的工作状态。
ethtool的交叉编译工具,见个人博客文章:http://blog.csdn.net/vc66vcc/article/details/52398864
phyreg 可以读写phy的任意寄存器。相关源码如下
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <linux/mii.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/ioctl.h>
- #include <net/if.h>
- #include <linux/sockios.h>
- #include <linux/types.h>
- #include <netinet/in.h>
- #define reteck(ret) \
- if(ret < 0){ \
- printf(”%m! \”%s\” : line: %d\n”, func, LINE); \
- goto lab; \
- }
- #define help() \
- printf(”mdio:\n”); \
- printf(”read operation: mdio reg_addr\n”); \
- printf(”write operation: mdio reg_addr value\n”); \
- printf(”For example:\n”); \
- printf(”mdio eth0 1\n”); \
- printf(”mdio eth0 0 0x12\n\n”); \
- exit(0);
- int sockfd;
- int main(int argc, char argv[]){
- if(argc == 1 || !strcmp(argv[1], “-h”)){
- help();
- }
- struct mii_ioctl_data *mii = NULL;
- struct ifreq ifr;
- int ret;
- memset(&ifr, 0, sizeof(ifr));
- strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);
- sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);
- reteck(sockfd);
- //get phy address in smi bus
- ret = ioctl(sockfd, SIOCGMIIPHY, &ifr);
- reteck(ret);
- mii = (struct mii_ioctl_data)&ifr.ifr_data;
- if(argc == 3){
- mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0);
- ret = ioctl(sockfd, SIOCGMIIREG, &ifr);
- reteck(ret);
- printf(”read phy addr: 0x%x reg: 0x%x value : 0x%x\n\n”, mii->phy_id, mii->reg_num, mii->val_out);
- }else if(argc == 4){
- mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0);
- mii->val_in = (uint16_t)strtoul(argv[3], NULL, 0);
- ret = ioctl(sockfd, SIOCSMIIREG, &ifr);
- reteck(ret);
- printf(”write phy addr: 0x%x reg: 0x%x value : 0x%x\n\n”, mii->phy_id, mii->reg_num, mii->val_in);
- }
- lab:
- close(sockfd);
- return 0;
- }
转载:linux+arm 网卡故障调试:ethtoolphy寄存器读写相关推荐
- linux单 网卡添加多个网段的ip,[转载]linux 单网卡来绑定多IP实现多网段访问以及多网卡绑定单IP实现附载均...
今天有遇到实现linux下访问多网段问题,以前只是有注意资料修改linux路由的的方法,在使用2003系统时倒是有经常单网卡访问多网段.前提是先绑定每个网段的一个IP 那同理如果我们需要实现linux ...
- Linux服务器网卡驱动安装及故障排除(转)
Linux服务器网卡驱动安装及故障排除(转) 转自:http://www.ccw.com.cn/server/yyjq/htm2005/20050817_15OF4.htm感谢原创作者 曹江华 Lin ...
- Linux下网卡驱动安装及故障排除
Linux下网卡驱动安装及故障排除 赛迪网 2007-4-26 9:10:00文/forgiven 网卡是Linux服务器中最重要网络设备.据统计,Linux网络故障有35%在物理层.25%在数据链路 ...
- linux 查看网卡损坏,Linux服务器网卡驱动安装及故障排除
Linux服务器网卡驱动安装及故障排除 网卡是Linux服务器中最重要网络设备.据统计,Linux网络故障有35%在物理层.25%在数据链路层.10%在网络层.10%在传输层.10%在对话.7%在表示 ...
- linux 双网卡绑定(bonding)实现负载均衡或故障转移
linux 双网卡绑定(bonding)实现负载均衡或故障转移 我们在这介绍的Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是 ...
- linux下jtag命令,[转载]LINUX内核调试过程(使用OpenJtag + OpenOCD)
[转载]LINUX内核调试过程(使用OpenJtag + OpenOCD) (2012-04-12 02:02:27) 标签: 杂谈 [转载]LINUX内核调试过程(使用OpenJtag + Open ...
- ARM DS-5单步调试ARM64 linux 内核
目录 1 介绍 2 开发环境 3 准备工作 3.1 Ubuntu环境准备 3.2 源代码准备 3.3 DS-5准备 3.4 使用DS-5调试源码 3.4.1 建立源码工程 3.4.2 创建debug配 ...
- 通过vscode进行嵌入式linux arm开发板gdb调试
下载和安装vscode, 下载 vscode for windows 地址: Visual Studio Code - Code Editing. Redefined 安装 "remote ...
- linux arm寄存器,ARM寄存器总结
ARM处理器共有37个寄存器: 1) 31个通用寄存器,包括程序计数器(PC).这些寄存器都是32位的: 2)6个状态寄存器.这些寄存器也是32位的,但是只使用了其中的12位. ARM通用寄存器 通用 ...
最新文章
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解源码(A.水+暴力,B.dp+栈)
- Windows 8.1内置微软五笔输入法
- 2.0版本的日历控件在ie8显示不全的解决办法
- mysql调用jieba库_jieba库的使用及实例
- 编程心法 之什么是MVP What is MVP development?
- 第二讲 ODE欧拉数值方法
- Java 多态中成员变量与成员属性的特点【复习】
- IDEA中如何设置方法注释格式
- 今天写一个关于浮动的页面,页面高度不能设置。用元素将他撑开。
- mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题
- 小汤学编程之JAVA基础day12——异常
- H3C-IMC 自动发现功能如何使用
- python相关性分析特征过滤_Python相关性分析
- 商品翻牌效果(纯css)
- vim基础学习之自动补全功能
- php采标教程,国内液压与气动行业标准大全
- linux系统可以下steam吗,linux – 是否可以使用optirun运行Steam游戏?
- MAC 解压 rar 文件
- Unity ParticleSystem 之 简单的电子自旋 Electrons ParticleSystem 粒子特效
- 敏捷的三个中心;再谈Buffer
热门文章
- 天气小工具新增风格-默认无背景,感谢欧阳兄制作
- SVN Switch
- STL Priority_Queue
- UA PHYS515A 电磁理论III 静磁学问题1 Maxwell方程与静磁学问题
- UA SIE545 优化理论基础 例题 对偶函数的凸性与次梯度计算
- 初步的看一下C#窗体程序的直接反汇编代码
- 3D 投影矩阵学习1
- 三套JSP源代码的安装部署过程和遇到的问题图解
- 使用Sysmon和Splunk探测网络环境中横向渗透
- aapt: error while loading shared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS64