Linux——以太网

一、Linux下的以太网架构

1、Linux 系统网络协议层架构

PHY 驱动的功能处于链路层:

Linux——以太网_第1张图片

2、以太网物理层与硬件连接

Linux——以太网_第2张图片

我们重点关注以下两点:

(1)与 MAC 设备的接口,即是 gmii 还是 rgmii。

(2) Phy 芯片的地址正确配置,可以通过 mdio/mdc 正确访问到 phy 芯片的寄存器。

3、链路层与 Linux 网络设备管理

        Linux 网络设备系统包括设备与驱动二大部分。网络设备驱动包括 MAC 层的驱动、MDIO 总结接口驱动 与 phy 驱动。

Linux——以太网_第3张图片

二、Linux 以太网 phy 驱动基本开发流程

1、硬件设计。

        包括 PHY 芯片地址设定、与 MAC 接口模式(如 RGMII)、MAC 时钟的接入方式、PHY 芯 片的复位管脚以及 PHY 芯片上电工作模式的设置。这一般是硬件工程师的工作,驱动工程师只要根据硬件原理图配置软件即可。

2、 根据硬件连接,修改 linux 系统的设备定义树.dts 文件。

通常是修改 GMAC 的定义以及 MII 管脚复用定义。具体需要看 SOC 芯片开发平台的定义。

Linux——以太网_第4张图片

3、 phy 驱动移植

解压驱动,解压后按照 Linux 的目录结构展开。用户需要将文件按相应的目录 copy 到目标板 Linux 系统开发环境

Linux——以太网_第5张图片

 将.c文件和头文件copy到各自的目录

motorcomm.c      --->  longan/kernel/linux-5.15/drivers/net/phy/motorcomm.c   
motorcomm_phy.h  --->  longan/kernel/linux-5.15/include/linux/ motorcomm_phy.h

添加Kconfig

config MOTORCOMM_PHY
    tristate "Motorcomm PHYs"
    ---help---
     Supports the YT8010, YT8510, YT8511, YT8512 PHYs.

添加Makefile

obj-$(CONFIG_MOTORCOMM_PHY) += motorcomm.o

4、测试

重新编译烧录后,检查目标机系统里有没有网络设备,如 eht0。

主要是 ping 通。 Ping 通是很关键的一步。Ping 通与以下配置有关:

a) 如果是 rgmii 接口,在设备树配置文件里的 tx_delay 和 rx_dealy 的配置很重要,参考后面关于 rgmii delay line 的配置。

b) PHY 的状态(link up, speed, duplex)是否正确。这个需要在 phy state machine 里增加打印进行跟 踪(通常在 phy.c 里)。

c) 通过统计计数(MAC 层,phy 层)来确认是哪个方向(tx 或者 rx)的问题。

5、常见问题

重新编译烧录后,开发板系统里没有网络设备:

(1) Phy 驱动有没被正确加载。

(2) MAC 驱动有没有正确运行,参看开发平台提供的 MAC 驱动,重点检查在 DTS 里配置的 compatible 字段与 MAC 驱动里的定义是否一致。

(3)MDIO 是否访问正确。在 mdio 扫描代码里增加打印看 phy 寄存器的读写是否正确。

(4)Phy id 是否被正确识别。在 mdio 扫描代码里增加打印看读到的 phy id 与 phy 驱动的 phy id 是 否一致。

(5)与硬件工程师确认 phy 芯片是否工作正常(上电时序、时钟,供电及复位等)。

你可能感兴趣的:(Android,linux,服务器,网络)