ZHCAEL2 October 2024 AM3351 , AM3352 , AM3354 , AM3356 , AM3357 , AM3358 , AM3359 , AM4372 , AM4376 , AM4377 , AM4378 , AM4379 , AM620-Q1 , AM623 , AM625 , AM625-Q1 , AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM62P , AM6411 , AM6412 , AM6421 , AM6422 , AM6441 , AM6442
在调试潜在的网络连接问题之前,需要执行一些初始步骤来验证以太网数据包的基本发送或接收是否存在问题。第一步是查看是否定义了一个以太网接口。下一步是确定是否在两个链路伙伴之间建立了链路。最后一步是验证以太网 MAC 统计信息是否显示正在发送或接收数据包而没有发生任何损坏。
下文总结了调试以太网接口的初始步骤。请在 DUT 已成功引导至 Linux 环境后执行这些步骤。
ifconfig -a
或 ip link show
初始化接口ethtool <interface name>
确定是否与链路伙伴建立了链路ethtool eth0
查看第一个以太网接口的详细信息ethtool -S <interface name>
验证是否发送或接收了任何数据包链路伙伴 一词就是指两个直接连接的平台,如图 3-1 所示。这称为直接连接 拓扑。对于上述三个初始步骤,为 DUT 推荐的链路伙伴是运行 Ubuntu 的 PC 或另一个已知运行良好的 Linux 平台。推荐链路伙伴采用 Linux 平台的原因是为了提供一个对称测试环境,以便链路伙伴与运行 Linux 的 DUT 具有类似平台。此外,在 Linux 平台上可以轻松使用 ethtool
。
图 3-1 显示了以太网接口如何细分为两个部分:MAC 和 PHY。MAC 负责发送和接收数据包。PHY 负责将信号从 MAC 转换到以太网电缆。
确认使用 ifconfig -a
或 ip link show
列出了要测试的接口后,下一步是查看是否检测到与链路伙伴的以太网链路。
调试建议:
如果 ifconfig
或 ip a
命令未列出该接口,这可能意味着定义 CPSW 或 PRU-ICSSG 以太网接口的 DTS 文件中存在错误。CPSW 和 PRU-ICSSG 都是 TI 设计的以太网接口。另请参阅节 5。
当两个链路伙伴(例如 TI EVM 和 PC)之间连接了以太网电缆时,这两个器件上的以太网 PHY 会尝试在这两个器件之间建立链路,此过程不依赖于运行的任何软件(例如 ping
测试)。如果检测到链路,下一步是检查是否有任何接收数据包或发送数据包的流量。如果 DUT 上的以太网驱动程序没有检测到链路,则以太网驱动程序不会初始化,也不会传递网络流量。
ethtool
实用程序用于执行链路检测和流量分析这两个步骤。步骤 1 是检查链路检测。在此示例中,被测接口假定为 eth0。以下代码片段显示了 ethtool
命令的部分输出。打印出来的信息有很多,但需要关注的部分是 Link detected:
属性。Linked detected:
为 yes(如果检测到链路)或 no(如果未检测到链路)。此命令还返回链路速度和双工模式信息。
root@am62xx-evm:~# ethtool eth0 Settings for eth0: ... Speed: 1000Mb/s Duplex: Full ... PHYAD: 0 Link detected: yes
如果未检测到链路,则表示无法传递流量。请先解决此问题,然后再继续。
检测到以太网链路后,可以查看 MAC 硬件统计信息(ethtool -S <interface name>
的结果)。从 MAC 硬件统计信息返回的信息包含有关基本数据包发送和接收的数据。通过检查 DUT 上是否发送和接收了数据包,即可了解以太网接口和以太网 PHY 是否正常工作。此外,DUT 未收到 IPv4 地址或未收到 ping 响应并不一定意味着数据包的基本发送和接收存在问题。例如,未收到 IPv4 地址的原因可能很简单,只是因为没有设置 DHCP 服务器来提供 IPv4 地址。
就以太网 MAC 是否正在发送和接收数据包而言,以太网 MAC 统计信息是最准确的一组统计信息。之所以说这些统计信息是可查看的最准确的统计信息,是因为此数据直接从物理线路测得,没有额外的抽象层。从 MAC 的角度来看,ifconfig
或 ip -s link
命令显示的已发送数据包(TX 数据包)或已接收数据包(RX 数据包)计数并不完全准确。在内核网络协议栈和 MAC 驱动程序之间可能会丢弃数据包。
以下代码片段显示了以太网 MAC 硬件统计信息的部分示例,其中显示了接收和发送的数据包以及所有相关的错误。此示例显示了在检测到正确接收以太网帧和成功发送以太网帧时的预期结果。可能存在某些仅可通过连接的链路伙伴以太网 MAC 硬件统计信息来查看的发送错误。有关链路伙伴分析的更多详细信息,请参阅节 9。
root@am62xx-evm:~# ethtool -S eth0 NIC statistics: ... rx_good_frames: 1127 ... rx_crc_errors: 0 rx_align_code_errors: 0 ... tx_good_frames: 163
有关如何分析 RX 和 TX 流量错误的更多信息,请参阅节 7。
总之,如果定义了网络接口(例如 eth0),检测到与链路伙伴之间存在链路,发送和接收数据包计数器在递增,并且 MAC 统计信息中没有错误计数器在递增,那么以太网数据包的基本发送和接收没有问题。
一个常见问题为是否需要诸如 ping
或 iperf3
(以前名为 iperf
)之类的应用程序来执行以太网帧的基本发送和接收。Linux 引导完成后,会尝试使用广播消息获取 IP 地址。来自这些广播消息的流量用于执行基本的以太网帧发送和接收。有关如何获取 IPv4 地址的更多详细信息,请参阅节 8。
调试建议:
章节摘要:
ethtool <interface name>
检查所需接口是否有链路。如果没有链路,则必须调试该问题。如果没有检测到链路,任何数据都无法传递。ethtool -S <interface name>
来检测以太网帧(或数据包)基本发送和接收(即查看以太网 MAC 硬件统计信息)。如果检测到以太网帧或数据包,则表明接口正在基本层面工作。如果统计信息表明没有发送或接收过以太网帧或数据包,则可以对这方面进行调试。