项目场景:

  最近在帮人复刻智能家居项目,进行到在uboot中配置网络并通过tftp挂载内核和设备树的时候,碰到了一些问题,在此进行记录


问题一描述:host 192.168.1.111 is not alive

  进入uboot界面以后,我按照如下配置网络,很奇怪,一开始其实是可以ping通ubuntu服务器的,如下所示。

=> setenv ipaddr 192.168.1.112
=> setenv ethaddr 00:04:9F:04:D2:35
=> setenv gatewayip 192.168.1.1
=> setenv netmask 255.255.255.0
=> setenv serverip 192.168.1.111
=> saveenv
Saving Environment to MMC...
Writing to MMC(1)... done
=> ping 192.168.1.111
FEC1 Waiting for PHY auto negotiation to complete.... done
Using FEC1 device

Abort
ping failed; host 192.168.1.111 is not alive
=>
=>
=>
=> ping 192.168.1.111
Using FEC1 device
host 192.168.1.111 is alive

  但后面就不行,一直显示的是这样。

=> ping 192.168.1.111
No ethernet found.
ping failed; host 192.168.1.111 is not alive

解决方案:

  搜索了一下,发现有这种解法setenv ethact FEC1,我对比之前成功可以ping通的代码,发现它在ping的时候,打印了一句Using FEC1 device,但我现在不断重新去ping是没有这段话的。重新试看一下,发现成功了。我又搜索了一下,在U-Boot中,FEC1 是 i.MX系列处理器中的以太网控制器硬件模块(Fast Ethernet Controller),通常对应开发板上的第一个以太网接口。我这样需要显式指定 ethact=FEC1才恢复的原因通常与 U-Boot 的网络接口动态选择机制硬件/驱动的不稳定行为 相关,意思是说在多个FEC中选错了或者是PHY芯片(叫啥物理层芯片)或者控制器间歇性失效
  下次碰到这样的问题,我觉得我可以这样去理解,No ethernet found,没有自动找到ethernet,那我就需要手动给他指定ethernet,所以就使用setenv ethact FEC1这个去指定

问题二描述:Loading: #error frame: 0x9ef548c0 0x00000810

  解决了问题一的网络问题,就出现了问题二,如下所示,这个问题的描述是帧传输的问题

=> tftp 80800000 zImage
Using FEC1 device
TFTP from server 192.168.1.111; our IP address is 192.168.1.112
Filename 'zImage'.
Load address: 0x80800000
Loading: #error frame: 0x9ef548c0 0x00000810
T error frame: 0x9ef548c0 0x00000810
T error frame: 0x9ef54900 0x00000810

解决方案:

  确定网络没有出现问题,尝试在uboot中修改块大小,重新执行,成功了。

setenv tftpblocksize 512
saveenv
tftp 80800000 zImage

  搜索了一下,调整TFTP块大小后问题得以解决,主要与网络数据包分片限制和TFTP协议实现兼容性相关。默认块大小比较大,那就需要分包,比较容易出现问题。将默认块,调小,则无需分包,就比较不会出现问题。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐