项目场景:
最近在帮人复刻智能家居项目,进行到在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协议实现兼容性相关。默认块大小比较大,那就需要分包,比较容易出现问题。将默认块,调小,则无需分包,就比较不会出现问题。
627

被折叠的 条评论
为什么被折叠?



