网络 phy 调试方法

简介: 目前嵌入式芯片支持双网卡的有很多。在调试网络驱动时,需要通过mdc 和mdio信号对phy的寄存器进行操作调试。如果每次调试都修改网络驱动的话会很麻烦。下面提供我常用的网络驱动调试方法

在驱动层,设备树绑定mac与mdio总线的关系。

在Linux应用层,编写测试程序mdio 。代码如下:

如果是写寄存器操作,就传入四个参数./mdio ethX phyId addr value.。

ethX 表示是哪个网卡,如eth0 eth1 。

phyId是 phy的物理地址,一般0x00是广播地址.有些phy 的0x00不是广播地址,如marvell 的88e1512 ID 只能时0x00 0x11,0x00不是88e1512的广播地址。

addr 是phy手册的寄存器地址

value 是phy地址要写入的值

如果是读寄存器操作,就传入三个参数./mdio ethX phyId addr

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>

include <unistd.h>

//#include

int main(int argc, char *argv[])
{

int sockfd;
struct mii_ioctl_data *mii = NULL;
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ - 1);
sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);
ioctl(sockfd, SIOCGMIIPHY, &ifr);
mii = (struct mii_ioctl_data*)&ifr.ifr_data;

if(argc == 4)
{
    strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);
    sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);
    ioctl(sockfd, SIOCGMIIPHY, &ifr);
    mii = (struct mii_ioctl_data*)&ifr.ifr_data;

    mii->phy_id    = (uint16_t)strtoul(argv[2], NULL, 0);
    mii->reg_num    = (uint16_t)strtoul(argv[3], NULL, 0);

    ioctl(sockfd, SIOCGMIIREG, &ifr);

    printf("read --- value : 0x%x", mii->val_out);
}
else if(argc == 5)
{
    strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);
    sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);
    ioctl(sockfd, SIOCGMIIPHY, &ifr);
    mii = (struct mii_ioctl_data*)&ifr.ifr_data;
    mii->phy_id    = (uint16_t)strtoul(argv[2], NULL, 0);
    mii->reg_num    = (uint16_t)strtoul(argv[3], NULL, 0);
    mii->val_in     = (uint16_t)strtoul(argv[4], NULL, 0);

    ioctl(sockfd, SIOCSMIIREG, &ifr);
}else{
   printf("mdio ethX phyId addr value\n");
}

close(sockfd);



return 0;

}

相关文章
|
29天前
|
机器学习/深度学习 存储 供应链
【软件设计师备考 专题 】运算基本方法:预测与决策、线性规划、网络图、模拟
【软件设计师备考 专题 】运算基本方法:预测与决策、线性规划、网络图、模拟
57 0
|
1月前
|
机器学习/深度学习 存储 算法
6 种 卷积神经网络压缩方法
6 种 卷积神经网络压缩方法
28 0
|
2月前
|
弹性计算 安全 关系型数据库
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(1)
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(1)
156 0
|
2月前
|
弹性计算 运维 安全
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(2)
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(2)
37 2
|
2月前
|
云安全 弹性计算 监控
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(3)
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(3)
44 0
|
3月前
|
供应链 安全 网络协议
网络安全的行业黑话 ——攻击篇 之攻击方法(2)
网络安全的行业黑话 ——攻击篇 之攻击方法(2)
56 0
|
3月前
|
SQL 安全 网络安全
网络安全的行业黑话 ——攻击篇 之攻击方法
网络安全的行业黑话 ——攻击篇 之攻击方法
66 0
|
3月前
|
弹性计算 运维 监控
来上课!一文掌握守住ECS网络安全的最佳方法
本文整理自【弹性计算技术公开课——ECS安全季】系列课程中,阿里云弹性计算技术专家刘明带来了《如何守住ECS的第一道防线——网络安全》一节。
|
3月前
|
Linux 网络安全 芯片
linux系统中详解u-boot之网络移植与调试
linux系统中详解u-boot之网络移植与调试
188 0