我想ping掉多个以太网端口。是否存在固有的限制,其中u-boot仅支持单个以太网端口?
答案 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使用一个端口获取的IP地址会发生什么,然后更改活动端口。)
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>