Linux 内核首次启动时未设置 U-boot ethaddr

U-boot ethaddr is not set during the first time bootup of Linux kernel

我有两块来自不同供应商的板,其中第一块运行良好,另一块带有 Macronix 闪存的板无法检测到 ethaddrr。

编辑:我的硬件信息:

Working Hw:     Micoron 512MB Nor flash, AR; 32-bit 
Not working Hw: Macronix 512 MB(MX29GL256F) NOR Flash, ARM 32 bit.

我检查过我的环境变量中没有 ethaddr。我检查了我的工作板我有 ethaddr 变量 ethaddr=00:01:02:03:04:54

我尝试使用 setenvsaveenv 将 ethaddr/mac-id 设置为 00:01:02:03:04:55,但这不起作用。

我也检查了我的 u-boot 配置。

#define CONFIG_NET_MULTI        1

我的问题是,ethaddr/mac-id 更具体,为什么它在某些主板上检测不到 ethddr?

这是我的错误信息:

U-Boot 2010.09 (Apr 16 2018 - 10:59:13)
DRAM:  32 MiB
Flash: 32 MiB
In:    serial
Out:   serial
Err:   serial
Net:   macb0
Hit any key to stop autoboot:  0
Checking firmware at 0x100e0000-0x107fffff
  invalid magic 0xffff, ignoring
Checking firmware at 0x10820000-0x10f3ffff
  invalid magic 0xffff, ignoring
highest = 0
No valid firmware in flash, trying to load kernel and ramdisk from server
macb0: PHY present at 0
macb0: Starting autonegotiation...
macb0: Autonegotiation complete
macb0: link up, 100Mbps full-duplex (lpa: 0xcde1)
*** ERROR: `ethaddr' not set
macb0: PHY present at 0
macb0: link up, 100Mbps full-duplex (lpa: 0xcde1)
Wrong Image Format for bootm command
ERROR: can't get kernel image!

永远不要突然设置 MAC 地址。内核没有获取它,因为您的 MAC 地址设置了多播位。

http://www.denx.de/wiki/bin/view/DULG/EthernetDoesNotWork

如果您想设置一个本地 MAC 地址,您需要确保它是有效的。 U-BOOT 你可以使用

$ make tools/gen_eth_addr
cc     tools/gen_eth_addr.c   -o tools/gen_eth_addr
$ tools/gen_eth_addr
ba:d0:4a:9c:4e:ce

详情见http://www.denx.de/wiki/bin/view/DULG/WhereCanIGetAValidMACAddress

此外,这不是内核编程问题,所以它真的不属于这里。