移植u-boot-2010.03问题 --- 网卡DM9000

1,找到u-boot-2010.03/include/configs/smdk6410.h

//#define CONFIG_NET_MULTI
//#define CONFIG_CS8900 /*we have aCS8900on-board*/
//#define CONFIG_CS8900_BASE 0x18800300
//#define CONFIG_CS8900_BUS16 /*follow the Linux driver*/

/**然后添加DM9000网卡的宏定义---ip以及子网掩码等根据自己的需要修改***/

#defineCONFIG_NET_MULTI 1
#defineCONFIG_DM9000_NO_SROM 1
#defineCONFIG_dm9000
#defineCONFIG_DRIVER_DM9000 1
#defineCONFIG_DM9000_BASE 0x18800300
#defineDM9000_IO CONFIG_DM9000_BASE
#defineDM9000_DATA (CONFIG_DM9000_BASE+4)
#defineCONFIG_DM9000_USE_16BIT
#defineCONFIG_ETHADDR 00:40:5c:26:0a:5b
#defineCONFIG_NETMASK 255.255.255.0
#defineCONFIG_IPADDR 192.168.1.20
#defineCONFIG_SERVERIP 192.168.1.10
#defineCONFIG_GATEWAYIP 192.168.1.1
//#define CONFIG_DM9000_DEBUG

 

2,打开u-boot-2010.03/net/eth.c,找到int eth_initialize(bd_t *bis)函数:

#if defined(CONFIG_DB64460) || defined(CONFIG_P3Mx)
    mv6446x_eth_initialize(bis);
#endif
/**
add here
*/
#if defined(CONFIG_DRIVER_DM9000)
    dm9000_initialize(bis);
#endif
/**
add over
*/

 

3,打开u-boot-2010.03/net/net.c:

第一处:

//# define ARP_TIMEOUT        5000UL    /* Milliseconds before trying ARP again */
# define ARP_TIMEOUT        5    /* Milliseconds before trying ARP again */

第二处:

//  if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT) {
    if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT*CONFIG_SYS_HZ) {

第三处:

//  NetSetTimeout (10000UL, PingTimeout);
    NetSetTimeout (10*CONFIG_SYS_HZ, PingTimeout);

 

4,打开u-boot-2010.03/net/tftp.c,找到void TftpStart (void)函数:

#if 0
    /*
     * Allow the user to choose TFTP blocksize and timeout.
     * TFTP protocol has a minimal timeout of 1 second.
     */
    if ((ep = getenv("tftpblocksize")) != NULL)
        TftpBlkSizeOption = simple_strtol(ep, NULL, 10);

    if ((ep = getenv("tftptimeout")) != NULL)
        TftpTimeoutMSecs = simple_strtol(ep, NULL, 10);

    if (TftpTimeoutMSecs < 1000) {
        printf("TFTP timeout (%ld ms) too low, "
            "set minimum = 1000 ms\n",
            TftpTimeoutMSecs);
        TftpTimeoutMSecs = 1000;
    }

    debug("TFTP blocksize = %i, timeout = %ld ms\n",
        TftpBlkSizeOption, TftpTimeoutMSecs);
#endif

 

完成后重新编译。

5,测试网卡

在开发板上通过命令 printenv 查看网卡信息。

 

WU_SMDK6410 # printenv                                                          
bootargs=console=ttySAC,115200                                                  
bootcmd=nand read 0x50018000 0x60000 0x1c0000;bootm 0x50018000                  
bootdelay=10                                                                    
baudrate=115200                                                                 
ethaddr=00:40:5c:26:0a:5b                                                       
ipaddr=192.168.1.123                                                            
serverip=192.168.1.127                                                          
gatewayip=192.168.1.1                                                           
netmask=255.255.255.0                                                           
stdin=serial                                                                    
stdout=serial                                                                   
stderr=serial                                                                   
ethact=dm9000    

setenv serverip 192.168.X.XX --- 设置主机ip,该命令只是把设置保存到ram中,如果重启的话设置会重新回到原来的设置

saveenv --- 保存到flash中。

这时,我主机的ip:192.168.1.127,通过ping命令测试是否能连通:

WU_SMDK6410 # ping 192.168.1.127                                                
dm9000 i/o: 0x18800300, id: 0x90000a46                                          
DM9000: running in 16 bit mode                                                  
MAC: 00:40:5c:26:0a:5b                                                          
operating at 100M full duplex mode                                              
Using dm9000 device                                                             
host 192.168.1.127 is alive         

这里成功连通,但也有时会出现开发板能ping通主机,但是主机却ping不通开发板的奇怪现象,但不影响开发板通过tftp下载主机上的文件,暂时没想通。

 

posted on 2014-01-20 19:17  lucky_tom  阅读(640)  评论(0编辑  收藏  举报