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.

[参考译文] Linux/PROCESSOR-SDK-AM57X:双以太网端口(1个静态端口、1个 DHCP)

Guru**** 2589225 points
Other Parts Discussed in Thread: PROCESSOR-SDK-AM57X

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/588689/linux-processor-sdk-am57x-dual-ethernet-ports-1-static-1-dhcp

器件型号:PROCESSOR-SDK-AM57X

工具/软件:Linux

您好!

我正在使用 TI AM572x 评估模块、同时使用两个以太网端口时遇到了很多问题。  我可以使用静态 IP 在 eth0上使用 TFTP/NFS 启动、但当我尝试启动 eth1以通过公司 DHCP 服务器访问 Internet 时、无论是通过域名还是通过指定 IP 地址、我都无法 ping 通 google.com 等。

另外值得一提的是,有时我甚至在获得 IP 地址时遇到了困难--在"ifup eth1"之后,ethtool 仍将报告10 Mb/s 和半双工。  但是、我似乎很幸运地使用"ifconfig eth1"绘制 IP、等待12-15秒以准备好链接、然后分别运行"udhcpc -i eth1"。

我已经尝试使用相同的墙上端口和电缆在 BeagleBone Black 的唯一 RJ-45连接器上获取 DHCP 地址、并且能够快速 ping 通外部世界。

我在 eth0上使用静态 IP、因为我的开发 PC 位于本地网络上、在其上安装 DHCP 服务器似乎是不太理想的解决方案。  与 U-Boot 配置相关的是 minicom 脚本提供的配置、我进行了以下更改:

setenv statical_IP 192.168.254.3:192.168.254.2:192.168.254.2:255.255.255.0::eth0:off

setenv bootargs "console=ttyO2,115200n8 root=/dev/nfs nfsroot=192.168.254.2:/home/irad/ti-processor-sdk-linux-am57xx-evm-03.02.00.05/targetNFS、nolock、v3、tcp、rsize=4096、wsize=4096 RW IP=${static_ip}"

setenv bootcmd "run findfdt;run getuenv;setenv autoload no;tftp ${loadaddr}zImage-am57xx-evm.bin;tftp ${fdtaddr}${fdtfile}; 运行 netargs;bootz ${loadaddr}-${fdtaddr}"

setenv netboot "echo Booting from network...;setenv autoload no;运行 netloadimage;运行 netloadfdt;运行 netargs; bootz ${loadaddr}-${fdtaddr}"

setenv netargs "setenv bootargs console=${console}${optargets}root=/dev/nfs nfsroot=${serverip}:${rootpath}、${nfsopts}RW IP=${static_ip}"

setenv ipaddr 192.168.254.3

SDK 版本为3.02.00.05。  似乎"dual EMAC"模式是默认模式、这种模式的局限性似乎还可以、但我尚未尝试对器件树或内核进行任何更改。  有什么建议吗?  谢谢!

戴维

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

    这两个端口是如何连接的? 请注意、在双 EMAC 模式下、两个端口必须连接到不同的子网。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Eth0连接到本地非托管交换机、后者又连接到 Ubuntu 16.04开发 PC。  此本地网络的子网为192.168.254。*--开发 PC 为192.168.254.2,目标板上的 eth0为192.168.254.3。  目标上的 eth1 (DHCP)可直接连接到公司网络基础设施。  它绘制的 DHCP 地址位于公司专用子网上。

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

    我想在这方面获得一些帮助。  我刚刚再次尝试使用03.03.00.04 SDK、遇到了同样的问题。  下面是我的步骤的完整日志:

    --------------------------------------

    sudo chmod +x ./ti-processor-sdk-linux-am57xx-evm-03.03.00.04-linux-x86-Install.bin

    ti-processor-sdk-linux-am57xx-evm-03.03.00.04-linux-x86-Install.bin

    cd ti-processor-sdk-linux-am57xx-evm-03.02.00.05/bin

    sudo ./create-sdcard.sh

    (创建两个分区、使用 SDK 中预构建的映像以及任何其他保留为默认值的设置)

    CD .
    sudo ./setup.sh

    (IP 指定为192.168.254.2、串行连接为/dev/ttyUSB0、不运行 minicom 脚本;否则、将使用默认值。)

    编辑了 bin/setupBoard.minicom 以删除发送"boot"命令并退出 minicom 的最后一行。

    已将 SD 卡移至目标。

    sudo minicom–w–S ./bin/setupBoard.minicom

    脚本成功后、使用以下命令设置用于引导的静态 IP:

    setenv statical_IP 192.168.254.3:192.168.254.2:192.168.254.2:255.255.255.0::eth0:off

    setenv bootargs "console=ttyO2,115200n8 root=/dev/nfs nfsroot=192.168.254.2:/home/irad/ti-processor-sdk-linux-am57xx-evm-03.02.00.05/targetNFS、nolock、v3、tcp、rsize=4096、wsize=4096 RW IP=${static_ip}"

    setenv fdtfile am57xx-evm-reva3.dtb

    setenv bootcmd "run findfdt;run getuenv;setenv autoload no;tftp ${loadaddr}zImage-am57xx-evm.bin;tftp ${fdtaddr}${fdtfile}; 运行 netargs;bootz ${loadaddr}-${fdtaddr}"

    setenv netboot "echo Booting from network...;setenv autoload no;运行 netloadimage;运行 netloadfdt;运行 netargs; bootz ${loadaddr}-${fdtaddr}"

    setenv netargs "setenv bootargs console=${console}${optargets}root=/dev/nfs nfsroot=${serverip}:${rootpath}、${nfsopts}RW IP=${static_ip}"

    setenv ipaddr 192.168.254.3

    保存

    引导

    登录。

    ifconfig eth1 up

    (长时间等待、除"IPv6:ADDRCONF (NETDEV_UP):eth1:链路未就绪"之外没有系统消息。)

    udhcpc -i eth1

    (Ctrl-C 可在一段时间后停止请求。)

    ifconfig eth1 down

    ifconfig eth1 up

    (这次获取"IPv6:ADDRCONF (NETDEV_CHANGE):eth1:链路就绪"。)

    udhcpc -i eth1

    这将成功:

    udhcpc (v1.24.1)已启动
    正在发送发现...
    正在发送 x.x.x.x.x..的选择
    获得 x.x.x 的租约、租期1800
    /etc/udhcpc.d/50default:添加 DNS x.x.x.x
    /etc/udhcpc.d/50default:添加 DNS x.x.x.x

    但是...

    Ping google.com

    返回"ping: bad address 'google.com'"。

    谢谢。

    戴维

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间。 我正在检查软件团队发生了什么情况。 他们应该很快在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:PROCESSOR-SDK-AM57X

    工具/软件:Linux

    电路板:TI AM572x EVM
    SDK:03.03.00.04

    这个问题是我最初的问题(这里是 https://e2e.ti.com/support/arm/sitara_arm/f/791/p/588689/2172204)的一个分支,它涉及在使用 TFTP 和 NFS 引导后配置两个以太网端口。  这次我的问题是、在使用默认映像从 SD 卡启动后。  在这种情况下、我能够使 eth0使用静态 IP、而 ETH1使用 DHCP、反之亦然。  但我无法确定如何在启动时影响这些设置、而不必使用"ifconfig eth0 192.168.254.3"或"ifconfig eth1 up"等手动设置它们。

    我已经执行了这里显示的四个命令...
    http://processors.wiki.ti.com/index.php/Linux_Core_U-Boot_User%27s_Guide#Manual_network_configuration
    ...后跟'aveenv'和'boot'。  没有明显的变化。

    我尝试通过几种方法更改 U-Boot bootargs 环境变量中的"IP="参数、例如:

    setenv netargs "setenv bootargs console=${console}${optargets}root=/dev/nfs nfsroot=${serverip}:${rootpath}、${nfsopts}RW IP=192.168.254.3::192.168.254.2:255.255.255.0::eth0:off"

    虽然密钥似乎是在 U-Boot 环境变量中、而不是/etc/network/interfaces 中、但下面是我尝试过的/etc/network/interfaces 变体的修改部分:

    自动 eth0
    iface eth0 inet static
           地址192.168.254.3
           子网掩码255.255.255.0
           网络192.168.254.0
           广播192.168.254.255
           网关192.168.254.2

    自动 ETH1
    iface eth1 inet DHCP
           pre-up /bin/grep -v -e "ip=[0-9]\+\.[0-9]\+\.[0-9]\+.[0-9]\+"/proc/cmd
           udhcpc_opts -R -b

    这似乎是非常基本的。  我缺少什么?  谢谢。

    戴维

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

    因此,如果我只是从 SD 卡启动而不使用 NFS,我会看到我可以使用 eth0作为 DHCP --能够成功 ping google.com-- 然后、我可以在命令行中手动配置 eth1以使用静态 IP (尽管在使用向下/向上命令和/或可能只需要很长时间的等待之后)。  但是、(1)我希望能够使用建议的 NFS 设置、(2)如果使用此配置、我基本上需要能够在引导时自动配置静态 IP。  由于这是一个有点不同的问题、我在这里创建了一个新帖子:

    https://e2e.ti.com/support/arm/sitara_arm/f/791/t/591518

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

    因此、在 SD 卡设置中、我看到应该在 setenv 命令中使用单引号而不是双引号、此外、还需要修改 args_MMC、而不是 netargs。  通过这些修复、我可以看到启动时哪些方面看起来不错:

    [6.424816]  IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪

    [6.438391]  IP-Config:完成:

    [6.441637]     device=eth0、hwaddr=fc:0f:4b:8c:10:52、ipaddr=192.168.254.3、mask=255.255.255.0、gw=192.168.254.2

    [6.452128]     host=192.168.254.3,domain=,nis-domain=(none)

    [6.458075]     bootserver=255.255.255.255、rootserver=255.255.255.255、rootpath=

    /etc/network/interfaces 很重要吗?  还有事要干扰吗?  但在登录并运行 ifconfig 后、我仍然看不到静态 IP。  我想几乎就在那里。

    戴维

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    进一步的意见:
    此时、我可以通过启动后的简单"ifup eth0"在 eth0上获取192.168.254.3静态 IP (通过 SD 卡引导)。 (但它仍需要自动化、最好是正确的方式。) 对于它的价值、重复"ifconfig eth0 down"和"ifconfig eth0 up" never (?) 工作。

    在 eth1上绘制 DHCP 地址也不一致。 如果我添加"IP=::::: eth1:DHCP"更改为 args_MMC 除了 eth0参数外、由于 DHCP 失败、启动会延迟几分钟。 无论采用哪种方式、我仍然可以获得 DHCP 地址、但只能通过"ifconfig eth1 down"/"ifconfig eth1 up"组合("ifup eth1"在此处不起作用)的可变数量获得。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对此有什么初步想法吗?  谢谢。

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

    担心无法 ping google.com 是最可能的原因,因为主板没有设置网络代理以跨越您的公司防火墙。

    当我尝试您提到的设置(eth0 static、eth1 udhcpc)时、我会得到与您相同的错误地址。 如果我 ping TI.com、我会收到一个响应、因为我位于防火墙内。  您必须与您的 IT 部门合作以解决此问题。

    用户空间是 systemd,其中运行了网络守护程序 systemd-networkd。 ifup 命令在此环境中不起作用。 可以让 eth1在使用 systemd 引导时自动启动。 您必须使用 sysctl 命令指示 systemd-networkd 启动该接口并获取 IP 地址。 我目前没有一个显示确切步骤的现成示例、您可能可以在网上找到一个示例、然后才能在此处发布。

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

    感谢你的帮助。

    您能更详细地说明网络代理吗?  如果我提升或降低接口的级别、或者我能够从 BeagleBone Black ping google.com、则有时我能够 ping 通-在这两种情况下、我都不知道特殊配置-似乎建议它与公司 IT 没有太大关系。

    非常感谢您提供系统提示。  目前、我有一个/etc/systemd/network/09-eth1.network:

    [匹配]
    NAME=eth1.

    [网络]
    DHCP=IPv4

    和/etc/systemd/network/10-eth0.network:

    [匹配]
    NAME=eth0

    [网络]
    地址=192.168.254.3
    网关=192.168.254.2

    静态 IP 会显示、但 DHCP 地址不会显示。