This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PROCESSOR-SDK-AM437X:AM437X eth0和 eth1环回- ping 不起作用

Guru**** 1966425 points
Other Parts Discussed in Thread: AM4378
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/988214/processor-sdk-am437x-am437x-eth0-and-eth1-loopback---ping-not-working

器件型号:PROCESSOR-SDK-AM437X
主题中讨论的其他器件:AM4378

在我们的硬件上、我们尝试从 eth1 (环回) ping eth0以进行板级功能测试、但我无法从 eth1 ping eth0、反之亦然。  

注:

  • 我还在 AM4378 SK EVM 上尝试过相同的测试、SD 卡上存在默认映像。 在 SK EMV 上、我也无法 从 eth1 (环回) ping eth0、反之亦然。
  • 我能够从 eth0/eth1 ping PC /笔记本电脑。

请参阅以下以太网电缆连接的方框图。

以下是 eth0和 eth1配置以及 ping 命令结果:   

root@picv6-1:~#[275.209337] cpsw 4a100000.ethernet eth1:链路断开

[279.849350] cpsw 4a100000.ethernet eth0:链路断开

[286.089616] cpsw 4a100000.以太网 eth0:链路向上- 100Mbps/全-流控制关闭

[286.169688] cpsw 4a100000.以太网 eth1:链路接通- 100Mbps/全-流控制关闭

 

root@picv6-1:~ ifconfig -a

eth0     Link encap:以太网 HWaddr 14:42:FC:D2:84:61  

          iNet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

         inet6 addr:2001:db8::1642:fcff:fed2:8461/128范围:全局

         inet6 addr:fe80::1642:fcff:fed2:8461/64范围:链接

         运行 PROMISC 多播 MTU:1500 公制:1的上广播

         RX 数据包:177错误:0丢弃:3溢出:0帧:0

         TX 数据包:43错误:0丢弃:0超限:0载波:0

         冲突:0 txqueuelen:3000

          RX 字节:22610 (22.0 KiB) TX 字节:9169 (8.9KiB)

         中断:48

 

ETH1     链路连接:以太网 HWaddr 14:42:FC:D2:84:63  

          iNet addr:192.168.2.100 Bcast:192.168.2.255 掩码:255.255.255.0

         inet6 addr:fe80::1642:fcff:fed2:8463/64范围:链接

         inet6 addr:2001:db8::1642:fcff:fed2:8463/128范围:全局

         运行 PROMISC 多播 MTU:1500 公制:1的上广播

         RX 数据包:182错误:0丢弃:3溢出:0帧:0

         TX 数据包:45错误:0丢弃:0超限:0载波:0

         冲突:0 txqueuelen:3000

          RX 字节:23611 (23.0 KiB) TX 字节:9307 (9.0 KiB)

 

LO       链路环接:本地环回  

          iNet addr:127.0.0.1 掩码:255.0.0.0

         inet6 addr:::1/128范围:Host

         inet6 addr:2001:db8:200:ff:fe00:0/128范围:全局

         运行 PROMISC MTU:65536 公制:1.

         RX 数据包:2错误:0丢弃:0超限:0帧:0

         TX 数据包:2错误:0丢弃:0超限:0载波:0

         冲突:0 txqueuelen:3000

          RX 字节:140 (140.0 B) TX 字节:140 (140.0 B)

 

sit0     Link encap:IPv6-in IPv4  

          NOARP MTU:1480 公制:1.

         RX 数据包:0错误:0丢弃:0超限:0帧:0

         TX 数据包:0错误:0丢弃:0超限:0载波:0

         冲突:0 txqueuelen:1000

          RX 字节:0 (0.0 B) TX 字节:0 (0.0 B)

 

wlan0    Link encap:以太网 HWaddr 30:EB:1F:1D:A9:9A  

          向上广播 PROMISC 多播 MTU:1500 公制:1

         RX 数据包:0错误:0丢弃:0超限:0帧:0

         TX 数据包:0错误:0丢弃:0超限:0载波:0

         冲突:0 txqueuelen:3000

          RX 字节:0 (0.0 B) TX 字节:0 (0.0 B)

 

root@picv6-1:~# netstat -rn

内核 IP 路由表

目标    网关        Genmask        Flags  MSS Window irtt iface

192.168.1.0    0.0.0.0        255.255.255.0  U        0         0 0 0 eth0

192.168.2.0    0.0.0.0        255.255.255.0  U        0         0 0 0 ETH1

root@picv6-1:~ ping# ping -i eth0 192.168.2.100

从192.168.1.100 eth0 ping 192.168.2.100 (192.168.2.100):56 (84)个字节的数据。

^C

--192.168.2.100 ping 统计信息--

发送15个数据包、接收0个数据包、100%数据包丢失、时间558ms

管道3.

root@picv6-1:~ ping# ping -i eth1 192.168.1.100

从192.168.2.100 eth1 ping 192.168.1.100 (192.168.1.100):56 (84)字节数据。

^C

--192.168.1.100 ping 统计信息--

发送9个数据包、接收0个数据包、100%数据包丢失、时间346ms

管道3.

 

我们使用 Processor SDK 06_03_00_106、在介绍 CPSW 驱动程序部分时、我在使用双独立 EMAC 模式时遇到了以下限制:

https://software-dl.ti.com/processor-sdk-linux/esd/docs/06_03_00_106/AM437X/linux/Foundational_Components/Kernel/Kernel_Drivers/Network/CPSW.html

 

限制

 

以下是双 EMAC 模式实现的限制

 

  • VLAN ID 1和2分别保留用于 EMAC 0和1的端口隔离
  • DTS 文件中提到的端口 VLAN 是保留的、不应通过 vconfig 添加到 cpsw 中、因为它违反了双 EMAC 实现、并且将启用交换机模式。
  • 在将 VLAN id 添加到 eth 接口时、不应在两个接口中添加相同的 VLAN id、这将导致 VLAN 转发并充当交换机
  • Linux 内核参数不支持 eth1的手动 IP
  • 除非只配置桥接,而不执行 IP 路由,否则两个接口不应连接到同一子网,然后可以在同一子网上配置两个接口。

               

我有以下问题:

  1. 是否可以使用 AM437X 在双 MAC 配置中从 eth0 ping eth1。
  2. 我是否必须以特定方式配置 eth0和 eth1才能使其正常工作?
  3. 我不能完全理解这一限制:“两个接口都不应连接到同一子网,除非只配置桥接,而不进行 IP 路由,那么您可以在同一子网上配置这两个接口”。 由于我的 eth0和 eth1位于同一子网上、因此阻止我从 eth1 ping eth0、反之亦然。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    子网是 IP 地址中的第三个数字。 因此、对于 eth0 = 192.168.1.100、子网为1。 即使两个以太网端口已物理连接、它们也只会在其子网上查找通信。 由于一个以太网端口位于子网1上,而另一个以太网端口位于子网2上,因此您不能从一个端口 ping 另一个端口是很有意义的。

    该约束条件表示、如果以太网端口彼此物理连接(例如、两者都插入同一个外部以太网交换机或同一个网络)、则它们应位于不同的子网上。 如果您想知道为什么需要这样做、请告诉我、我会找到我们在哪里记录推理。

    在我的脑海中、我不确定如果您从一个以太网端口回送至另一个以太网端口会发生什么情况。 尝试将它们放在同一子网(例如192.168.1.100和192.168.1.101)上、看看会发生什么情况。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    跟进:如果不进行测试、我无法肯定使用 Linux 以太网端口执行回送时会发生什么情况。 但是、可能1)回送测试不起作用、或2)内核会确定源和目标是主机、然后在两个应用之间传递数据、而无需从以太网端口发送任何内容。 因此、我最初的建议是使用单独的链路合作伙伴(PC、第二个 AM437x EVM 等)测试以太网。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nick、

    我尝试将 eth0和 eth1放在硬件和 AM4378 SK EVM 上的同一子网上、但我无法看到 Ping 在硬件和 AM4378 SK EVM 上工作。

    请参阅以下日志:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #Our hardware
    root@picv6-1:~# ifconfig eth0; ifconfig eth1
    eth0 Link encap:Ethernet HWaddr 14:42:FC:D2:84:61
    inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    inet6 addr: 2001:db8::1642:fcff:fed2:8461/128 Scope:Global
    inet6 addr: fe80::1642:fcff:fed2:8461/64 Scope:Link
    UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
    RX packets:86 errors:0 dropped:0 overruns:0 frame:0
    TX packets:54 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:3000
    RX bytes:16451 (16.0 KiB) TX bytes:9965 (9.7 KiB)
    Interrupt:48
    eth1 Link encap:Ethernet HWaddr 14:42:FC:D2:84:63
    inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
    inet6 addr: fe80::1642:fcff:fed2:8463/64 Scope:Link
    inet6 addr: 2001:db8::1642:fcff:fed2:8463/128 Scope:Global
    UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
    RX packets:52 errors:0 dropped:0 overruns:0 frame:0
    TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    1) 1)回送测试将不起作用

    • 在之前的基于 AM335x 的硬件上、我们过去通过  使用 Linux 以太网端口进行环回来运行板级功能测试。 从 eth0 ping eth1没有问题。

    2) 2)内核会确定源设备和目标设备是主机、然后在两个应用程序之间传递数据、而无需从以太网端口发送任何数据

    • 如果我们在执行 ping 操作时不提供"-i"选项、内核将在两个应用程序之间传递数据。 当我们在 ping 内核时提供-i 选项时、会在以太网端口上发送数据  

    因此、我最初的建议是使用单独的链路合作伙伴(PC、第二个 AM437x EVM 等)测试以太网

    • 我已经使用单独的链路合作伙伴测试了以太网、它可以与 PC 配合使用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    ping 失败的原因是内核与 MAC 地址所属的端口混淆。 本 演示 将介绍所发生的情况。

    您遇到的是内核级问题、而不是驱动程序问题。 正如您指出的那样,指定接口端口确实会导致数据包被传输,但 MAC 地址混乱的问题仍然存在。

    我无法解释为什么您在 AM335x 上取得成功、也许使用了一些 IP 表规则、允许数据包与正确的端口关联。  

    此致、

    Schuyler

x 出现错误。请重试或与管理员联系。