1. PHY芯片简介

phy:工作在网络模型的物理层,是IEEE802.3规定的一个标准模块。IEEE802.3规定了 地址0~15共16个通用寄存器,只要配置好这些通用寄存器就能保证phy芯片正常工作。16~31地址的寄存器有厂家自行定义。
mac:工作在网络模型的数据链路层,通过rgmii或rmii接口连接phy,mac控制器中的mdio控制器提供mdio接口,用于访问phy寄存器。
MDIO:Management Data Input/Output的缩写。MDIO接口包含在IEEE802.3协议中,是专用于MAC与PHY管理的串行总线接口。主要用于配置PHY芯片状态、读取寄存器、读取PHY地址、获取LINK状态等操作。与网口MII、RMII(TX_CLK、RX_CLK)等数据通讯无关。MDIO接口最多可以挂载32个PHY设备。
2. 驱动修改指南
2.1 驱动代码说明
执行以下命令进入net/phy文件夹查看跟以太网驱动程序相关的源码。
cd ~/EASY-EAI-kernel/kernel/drivers/net/phy ls

2.2 驱动代码修改
源代码修改:
把xxx.c(比如motorcomm.c)放到kernel/drivers/net/phy
把xxx.h(比如motorcomm_phy.h)放到kernel/drivers/include/linux
Makefile修改:
cd ~/EASY-EAI-kernel/kernel/drivers/net/phy vim Makefile
加入以下内容:
obj-$(CONFIG_MICROCHIP_PHY) += microchip.o obj-$(CONFIG_MOTORCOMM_PHY) += motorcomm.o

Kconfig修改(这样几可以从make menuconfig找到新加的驱动配置项)
vim Kconfig
在PHYLIB之间(如下所示)加入以下内容:
config MOTORCOMM_PHY
tristate "Motorcomm PHYs"
---help---
Supports the YT8010, YT8510, YT8511, YT8512 PHYs.

2.3 驱动配置
回到kernel目录,执行make menuconfig:
cd ~/EASY-EAI-kernel/kernel/ make menuconfig
注意:ARCH、GCC_FULLPATH、CROSS_COMPILE三个环境变量。具体的值可以参考build-kernel.sh脚本。


3. 设备树修改指南
执行以下命令进入/arch/arm/boot/dts文件夹查看rv1126相关的设备树配置。
cd ~/EASY-EAI-kernel/kernel/arch/arm/boot/dts ls -l rv1126-nano*

3.1 设备节点位置说明
打开设备树找到以太网卡相关的位置。
vim rv1126-nano.dts

3.2 设备树节点参数说明
PHY ID(以YT8512H百兆PHY为例):

寄存器ID(以YT8512H百兆PHY为例):

因此设备树【mdio】要填:

因此设备树【gmac】要填:

4. 编译及验证设计
4.1 编译
编译及烧录见《嵌入式底层开发/内核驱动/内核开发流程说明》。
4.2 查看设备情况
adb shell进入开发板,看驱动是否正确加载:
dmesg | grep -i eth
若出现下列信息(以YT8512H为例),则说明驱动被正确加载:
[ 68.212302] YT8512B Ethernet stmmac-0:01: attached PHY driver [YT8512B Ethernet] (mii_bus:phy_addr=stmmac-0:01, irq=POLL)
通过执行以下命令,确认驱动工作正常:
ifconfig
若IP地址被成功分配,则说明PHY网卡可正常使用(设备通常是eth0,但要以MAC地址为准)
eth0 Link encap:Ethernet HWaddr 4A:EF:6D:E8:5C:BA
inet addr:192.168.1.168 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:63
最后ping一下局域网内任意一台主机(如果是PC,注意一下防火墙),进行联网测试:
ping 192.168.1.191 -I eth0
返回以下信息,则说明网卡能够正常联网:
PING 192.168.1.191 (192.168.1.191) 56(84) bytes of data. 64 bytes from 192.168.1.191: icmp_seq=1 ttl=64 time=1.03 ms 64 bytes from 192.168.1.191: icmp_seq=2 ttl=64 time=1.55 ms 64 bytes from 192.168.1.191: icmp_seq=3 ttl=64 time=2.00 ms 64 bytes from 192.168.1.191: icmp_seq=4 ttl=64 time=1.51 ms 64 bytes from 192.168.1.191: icmp_seq=5 ttl=64 time=1.52 ms
5. 常见问题排查
5.1 找不到PHY
错误提示如下:
[ 5.217653] rk_gmac-dwmac ffc40000.ethernet eth0: Could not attach to PHY [ 5.219021] rk_gmac-dwmac ffc40000.ethernet eth0: stmmac_open: Cannot attach to PHY (error: -19)
硬件角度排查:确认原理图是否与手上的硬件对应(含图纸版本是否与硬件匹配、无聊参数是否与硬件一致)?排查phy芯片供电是否正常?排查RST引脚是否有按规格书所描述的要求进行控制?【若有】排查外部晶振是否起振?
软件角度排查:设备树中mdio中的phyid是否填对?mdio中的reg是否有根据硬件的实际情况配置?
5.2 网卡功能异常
具体异常表现为:
* 无法DHCP。
* 用ifconfig手动配置IP,能配置成功,但通信异常。
原因:大概率是因为驱动不兼容,具体做法如下:
* 把mdio的compatible改成"ethernet-phy-ieee802.3-c22"。
* 使用通用网卡驱动(通过make menuconfig把motorcomm的驱动去掉)。
审核编辑 黄宇
-
开发板
+关注
关注
25文章
6122浏览量
113317 -
rv1126
+关注
关注
0文章
115浏览量
4081
发布评论请先 登录
分享一份有关TB-RV1126Ds开发板硬件的规格书
rv1126和rk3568对比
基于RV1126开发板网络配置方法
基于RV1126开发板实现人脸识别方案
基于RV1126开发板实现人脸检测方案
基于RV1126开发板实现人脸检测方案
RV1126系列选型指南:从RV1126到RV1126B,一文看懂升级差异

基于RV1126开发板修改Ethernet内核设备树
评论