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

电子说

1.4w人已加入

描述

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的驱动去掉)。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分