u-boot可以支持多个以太网端口吗?

时间:2015-09-23 18:48:53

标签: u-boot

我想ping掉多个以太网端口。是否存在固有的限制,其中u-boot仅支持单个以太网端口?

1 个答案:

答案 0 :(得分:4)

  

u-boot是否可以支持多个以太网端口?

是的,在最新版本的U-Boot中(至少回到2012.10) 突出代码在 net / eth.c eth_current_changed() eth_set_current()

  

u-boot是否仅支持单个以太网端口是否存在固有限制?

不,最新版本的U-Boot可以支持电路板上的多个以太网端口。

当有多个以太网接口可用时(如#34; Net&#34;设备列表在启动时报告,例如&#34; Net:macb0,gmac0,usb_ether&#34;),环境变量< strong> ethact 用于定义所选的以太网接口 使用printenv ethact命令查看当前选择 使用setenv ethact <port name>更改活动以太网端口。

U-Boot网络命令(例如 ping tftpboot )将使用 ethact 变量定义的以太网端口。这保留了旧版U-Boot的命令语法,无论可用端口的数量如何(例如,脚本不更改),语法都是一致的。

使用以下环境变量为每个以太网端口分配自己的MAC地址:

ethaddr: Ethernet MAC address for first/only ethernet interface (= eth0 in Linux).
         This variable can be set only once (usually during manufacturing of the board). U-Boot refuses to delete or overwrite this variable once it has been set.

eth1addr: Ethernet MAC address for second ethernet interface (= eth1 in Linux).

eth2addr: Ethernet MAC address for third ethernet interface (= eth2 in Linux).

显然,您一次只能(轻松)访问一个端口 也只有一个静态IP地址分配,即 ipaddr 环境变量 (我不知道DHCP使用一个端口获取的I​​P地址会发生什么,然后更改活动端口。)

U-Boot> printenv ethact
ethact=macb0
U-Boot> setenv ethact gmac0
U-Boot> ping 192.168.1.1
gmac0: PHY present at 7
gmac0: Starting autonegotiation...
gmac0: Autonegotiation complete
gmac0: link up, 1000Mbps full-duplex (lpa: 0x2800)
Using gmac0 device
host 192.168.1.1 is alive
U-Boot>

请注意,还有一个轮换方案,可在端口关闭时自动更改活动端口:

U-Boot> printenv ethact
ethact=gmac0
U-Boot> ping 192.168.1.1
gmac0: PHY present at 7
gmac0: Starting autonegotiation...
gmac0: Autonegotiation timed out (status=0x7949)
gmac0: link down (status: 0x7949)
ERROR: Need valid 'usbnet_devaddr' to be set
at drivers/usb/gadget/ether.c:2362/usb_eth_init()
macb0: PHY present at 0
macb0:0 is connected to macb0.  Reconnecting to macb0
macb0: Starting autonegotiation...
macb0: Autonegotiation timed out (status=0x7849)
macb0: link up, 100Mbps full-duplex (lpa: 0x41e1)
Using macb0 device
ping failed; host 192.168.1.1 is not alive
U-Boot> printenv ethact
ethact=macb0
U-Boot>