日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

转载:linux+arm 网卡故障调试:ethtoolphy寄存器读写

發布時間:2025/4/5 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转载:linux+arm 网卡故障调试:ethtoolphy寄存器读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩個工具一個是ethtool工具,一個是源碼編譯的可以讀phy寄存器的工具phyreg。兩者結合使用,事半功倍。


ethtool 可以查看和設置網卡的工作狀態,比如查看設置網卡的鏈接 自協商,10/100/1000M,雙工半雙工的工作狀態。


ethtool的交叉編譯工具,見個人博客文章:http://blog.csdn.net/vc66vcc/article/details/52398864


phyreg 可以讀寫phy的任意寄存器。相關源碼如下

[cpp] view plaincopyprint?
  • #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寄存器读写的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。