今天在u-boot对DM9000X网卡的支持的移植。最后通过tftp下载时候,遇到如下问题:
tf[u-boot@MINI2440]# tp 0x30000000 root_qtopia-128M.img
Filename 'root_qtopia-128M.img'.
Load address: 0x30000000
Loading: T ##########T T #####################################################T
##T T
#T T T T ######
Retry count exceeded; starting again
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 12:34:56:78:9a:bc
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 10.1.0.128; our IP address is 10.1.0.129
Filename 'root_qtopia-128M.img'.
Load address: 0x30000000
Loading: T ###T ###T T ########一直无休止循环,经网上搜索得知Uboot 端 tftp 程序传过来的Timeout参数不符合服务器端定义引起的,Retry count exceeded; starting again 解决方法: tftp客户端传过来的timeout是7810,而服务器端定义的范围在1-255秒之间,不是服务器的问题,而是 uboot中tftp参数设置的问题,参见TFTP Unsupported option(s) requested 问题详细分析及解决。打开/net/net.c,在uboot跟目录下,输入gedit net/net.c定位到104行附近,修改如下:#if defined(CONFIG_CMD_NET)DECLARE_GLOBAL_DATA_PTR;#ifndef CONFIG_ARP_TIMEOUT
# define ARP_TIMEOUT 10000UL*CONFIG_SYS_HZ/1000 //5000UL
#else
# define ARP_TIMEOUT CONFIG_ARP_TIMEOUT
#endif
定位到573行附近,修改如下:#ifndef CONFIG_NET_MULTI
//NetSetTimeout (10000UL, startAgainTimeout);
NetSetTimeout (10000UL*CONFIG_SYS_HZ/1000, startAgainTimeout);
NetSetHandler (startAgainHandler);
#else
定位到585行附近,修改如下:eth_init (gd->bd);
if (NetRestartWrap) {
NetRestartWrap = 0;
if (NetDevExists && !once) {
//NetSetTimeout (10000UL, startAgainTimeout);
NetSetTimeout (10000UL*CONFIG_SYS_HZ/1000, startAgainTimeout);
NetSetHandler (startAgainHandler);
} else {
NetState = NETLOOP_FAIL;
}
定位到779行附近,修改如下:#define CDP_SYSOBJECT_TLV 0x0015
#define CDP_MANAGEMENT_ADDRESS_TLV 0x0016#define CDP_TIMEOUT (250UL*CONFIG_SYS_HZ/1000) //250ULstatic int CDPSeq;
static int CDPOK;
打开/net/tftp.c,中端输入命令:gedit net/tftp.c定位到16行,修改如下:#define TIMEOUT 60000UL //5000UL |