国科解决YT8521网不通的方法

前言

第一次移植PHY驱动,几经波折终于是调好了,写个blog来记录这一次遇到的问题以及解决方案,以防之后遇到类似的问题忘记了如何解决。

调试准备

硬件调试

根据硬件原理图确保管脚复用正确,可使用bspmm查看。

内核配置

这个步骤可以参考裕泰给出的文档进行操作。

比如我的目标板开发环境Linux是在如下目录:~/motocomm/kernel/linux-rt-4.19.94
就将motorcomm.c和头文件motorcomm_phy.h(新版本中不需要此文件了)copy到各自的目录:cp motorcomm.c       ~/motocomm/kernel/linux-rt-4.19.94/drivers/net/phy/.cp motorcomm_phy.h  ~/motocomm/kernel/linux-rt-4.19.94/ include/linux/.
cp: cannot stat '/tmp/use_code': No such file or directory
注意Kconfig和Makefile不能直接copy过去而要与当前系统里的这二个文件做合并:
Kconfig是合并下面的部分:
config MOTORCOMM_PHY
tristate "Motorcomm PHYs"
---help---Supports the YT8010, YT8510, YT8511, YT8512 PHYs.
Makefile合并下面的部分:
obj-$(CONFIG_MOTORCOMM_PHY) += motorcomm.o
修改完成后(编译链因板而异)
make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- menuconfig
device drivers -> Network device support -> PHY Device support and infrastructure
在上述路径下选中 motorcomm模块,最后重新编译内核即可。

编译内核

make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- uImage -j 20

运行内核并测试网口情况

编译完成后,重新烧录。
正常情况下,板端会出现以下驱动和eth0网络设备:

~ # ls /sys/bus/mdio_bus/drivers
Generic 10G PHY             YT8521 Ethernet
Generic PHY                 YT8531 Gigabit Ethernet
YT8010 Automotive Ethernet  YT8531S Ethernet
YT8510 100!10Mb Ethernet    YT8614 Ethernet
YT8511 Gigabit Ethernet     YT8618 Ethernet
YT8512 Ethernet             YT8821 2.5Gb Ethernet
YT8512B Ethernet
~ # ls /sys/class/net/
eth0  lo

出现的问题:
1.net下面并没有eth0设备
分析:PHY地址没有设置正确。板端默认PHY地址为1,但是YT8521对应PHY0,正确配置gmac以及PHY地址后,解决问题。

● U-boot下配置方式
U-boot下可通过修改U-boot配置文件include/configs/ss928v100.h中宏定义
CONFIG_GMAC_PHY0_ADDR和CONFIG_GMAC_PHY1_ADDR的值来配置不同的
PHY地址。
● Kernel下配置方式
在Kernel下可通过修改 arch/arm64/boot/dts/vendor下的dts配置文件
ss928v100-demb.dts配置PHY地址。“reg = <1>”中的数值1表示
PHY地址。

2.ping不通
板端只发不收,这个问题困扰了我好几天,还好看到了这个帖子。网络驱动->PHY驱动调试.按照文章提供的思路逐个排查,发现之前的硬件版提供了2ns的RX_DELAY,新板是没有的。由于设备树内并没有配置RX_DELAY的部分,因此使用寄存器加长RX_DELAY。
根据YT的文档:

实际使用中若需要加长 rx_delay,以改善 setup 时间,也可以通过配置 common 扩展寄存器来配置:
Write_ext_reg0xa003[13:10]: 默认为 4’b0,每加 1,则 rx_delay 延长约 150ps。(无论 RGMII 工作在
125MHz/25MHz/2.5MHz)

加长接收延时后问题解决!

./phyreg eth0 0x1e 0xa003 && ./phyreg eth0 0x1f 0x3cf1

phyreg源码如下:

#include <stdio.h>
#include <unistd.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 busret = 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", 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", mii->phy_id, mii->reg_num, mii->val_in);}
lab:close(sockfd);return 0;
}

参考链接:
海思YT8511千兆网不通的解决方法
网络驱动->PHY驱动调试

国科解决YT8521网不通的方法相关推荐

  1. GK2302开卡工具,GK2301LT量产软件,国科微GK2301LT怎么开卡方法,GK2302量产开卡工具教程

    在修复国科微gk2301LT固态时,可以通过量产软件来开卡.以下是简单的步骤: 1. 准备工作:首先需要准备好gk2301LT固态硬盘.开卡转接板和相应的量产软件. 2. 连接开卡转接板:将gk230 ...

  2. 3个方法解决百度网盘限速 (2018-07-20)

    3个方法解决百度网盘限速 (2018-07-20) 参考文章: (1)3个方法解决百度网盘限速 (2018-07-20) (2)https://www.cnblogs.com/davygeek/p/9 ...

  3. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践

    欢迎转载,转载时请保留全文及出处. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践 Apache安装 下载源程序(http://httpd.ap ...

  4. 计算机网络断网吗,教您解决电脑网络常常断网掉线的方法?

    原标题:教您解决电脑网络常常断网掉线的方法? 在这科技发达的时代,电脑是每人必备的工具.那么,问题就来了,在使用电脑的过程中网络突然经常断网掉线,这是怎么回事呢?不急!接下来,让小编与您分享一个如何解 ...

  5. 想要下载文件,却遭遇网盘限速?教你 3 个方法解决百度网盘限速!

    360网盘关闭后,百度云似乎要成为国内网盘的唯一选择,然而百度云下载速度太慢,显然是被限速了.下面有3个方法用于百度网盘加速下载,演示的下载文件是大于1G的一个 War3.zip 单文件.使用的宽带是 ...

  6. 逃离塔克夫单机版没机器人_逃离塔科夫官网机器人验证通过方法介绍

    逃离塔科夫机器人验证怎么通过?想来很多朋友都还不是很清楚吧,所以呢小编今天给大家带来的就是逃离塔科夫官网机器人验证通过方法介绍,需要的朋友不妨进来看看. 逃离塔科夫官网机器人验证通过方法介绍 1.下载 ...

  7. 提高Google或者火狐浏览器下载速度的方法+解决百度网盘下载慢的方法

    Google或者火狐浏览器下载的时候:按ctrl+j会打开下载内容页面,右键单击复制你正在下载的文件,点击复制链接,打开IDM.迅雷.之类的下载工具,添加任务把网址粘贴进去,开始下载吧. 下载方法 * ...

  8. 义务段国网学籍导出方法

    义务段国网学籍导出方法 说明 一.用操作员账登录进入学籍网(国网) 二.进入学籍管理 三.选择要导出的选项 四.导出数据成功 说明 国网学籍一般有好几个账号,主要的有操作员账号.审核员账号. 一.用操 ...

  9. 解决官网下载MySQL慢的方法

    解决官网下载MySQL慢的方法 刚入坑的人在官网下载MySQL会很慢出现这种情况的解决办法很简单 首先需要在下载内容中复制下载的链接 复制好之后下载迅雷 将刚才复制的链接放到迅雷中,点击开始下载即可

最新文章

  1. git init 与 git init --bare 区别
  2. Enterprise Library 2.0 Hands On Lab 翻译(12):安全应用程序块(一)
  3. win7 IIS7.5 HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态...
  4. java传值和通过引用传递
  5. kickstart 为 rhel5 创建 ext4 分区
  6. 铁路部门调整车票预售期为15天 火车票今年不再“一票难求”
  7. C# Note21: 扩展方法(Extension Method)及其应用
  8. 深度学习 --- 优化入门六(正则化、参数范数惩罚L0、L1、L2、Dropout)
  9. 基于Modelica的船用大功率电推进系统建模仿真
  10. 小米商城首页仿写+课程总结报告
  11. extension(扩展)使用详情
  12. 宏基5750G 不能用内置无线网卡上网
  13. mysql 语法 日期转换成字符串_mysql日期转换成字符串的方法
  14. 顶级摄影师镜头下的世界美景(组图)
  15. 酷睿i5 1155g7相当于什么水平 i51155g7属于哪个档次
  16. zabbix4.0配置钉钉机器人告警详细教程
  17. Shell(Bash) - PHP与Sheel交互
  18. 卓有成效的管理者总结与思考
  19. hive窗口函数及示例
  20. python autoit打开软件_Python+AutoIt实现界面工具开发

热门文章

  1. ios 判断手机角度_iOS 【陀螺仪 之 iPhone绕自身的旋转角度 以及 iPhone与水平面的夹角】...
  2. 设计模式三之装饰模式
  3. NOIP2018爆炸记
  4. 让三百六十行人才荟萃、繁星璀璨!中创向心力带你读懂职业教育
  5. 我加了5000微信好友,发现了朋友圈的真相
  6. 绘制2000年、2017年第一季度国民生产总值产业构成分布、行业构成分布直方图
  7. 最终,还是没能成为吹牛逼的资本!(结束)
  8. 网站的服务器和数据库分开么,服务器和数据库要分开么
  9. 2012-2年初2:写给面临危机的计算机类学生们的肺腑之言
  10. 由浅入深!华为Android面试真题解析,最全的BAT大厂面试题整理