OK6410-A开发板学习-⑤uboot移植(3)DM9000 网卡驱动移植

开始我以为DM9000是个PHY,查了一下是个含有MAC和PHY的网卡,还包含一个4KDWORD值的SRAM


 一、网卡的正常化配置

  1、修改头文件调用关系

  在原配的smdk6400.h中(因为是复制过来的),网卡配置为CS8900,而手头开发板上的网卡为DM9000,所以第一步来修改网卡驱动程序。

  修改/include/configs/smdk6410.h

  找到如下字段,更改如下

复制代码
/*
 * Hardware drivers
 */
#define CONFIG_NET_MULTI
//#define CONFIG_CS8900                 /* we have a CS8900 on-board    */
//#define CONFIG_CS8900_BASE            0x18800300
//#define CONFIG_CS8900_BUS16           /* follow the Linux driver      */
#define CONFIG_DRIVER_DM9000    1       /* we have a DM9000 on-board    */
#define CONFIG_DM9000_BASE              0x18000000
#define DM9000_IO               CONFIG_DM9000_BASE
#define DM9000_DATA             (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT

#define CONFIG_ETHADDR          00:40:5c:26:0a:5b
#define CONFIG_NETMASK          255.255.255.0
#define CONFIG_IPADDR           192.168.0.22
#define CONFIG_SERVERIP         192.168.0.88
#define CONFIG_GATEWAYIP        192.168.0.1
复制代码

  2、修改dm9000x.c文件

  文件为drivers/net/dm9000x.c

  在for(;;)之前加入两句

DM9000_ior(DM9000_MRRH);
DM9000_ior(DM9000_MRRL);

  修改函数为dm9000_halt

复制代码
static void dm9000_halt(struct eth_device *netdev)
{
        DM9000_DBG("%s\n", __func__);

        /* RESET devie */
//      phy_write(0, 0x8000);   /* PHY RESET */ 
//      DM9000_iow(DM9000_GPR, 0x01);   /* Power-Down PHY */
//      DM9000_iow(DM9000_IMR, 0x80);   /* Disable all interrupt */
//      DM9000_iow(DM9000_RCR, 0x00);   /* Disable RX */
 
}
复制代码

  3、修改net配置文件

  文件一 /net/eth.c

  增加启动属性,在int eth_initialize(bd_t *bis)函数中,

#if defined(CONFIG_DB64360) || defined(CONFIG_CPCI750)
        mv6436x_eth_initialize(bis);
#endif
#if defined(CONFIG_DB64460) || defined(CONFIG_P3Mx)
        mv6446x_eth_initialize(bis);
#endif

之后添加

增加一段
        /* for DM9000 init */
#if defined(CONFIG_DRIVER_DM9000)
        dm9000_initialize(bis);
#endif  
        /*------------------------------*/

  文件二 /net/net.c

  修改ARP_TIMEOUT

#ifndef CONFIG_ARP_TIMEOUT
//# define ARP_TIMEOUT          5000UL  /* Milliseconds before trying ARP again */
# define ARP_TIMEOUT            5       /* Milliseconds before trying ARP again */
#else
# define ARP_TIMEOUT            CONFIG_ARP_TIMEOUT
#endif

  修改NetArpWaitTimerStart

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

  修改NetSetTimeout

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

  文件三/net/tftp.c

  修改 TftpStart (void)

  注释如下函数段

复制代码
        /*
         * 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);
 */
复制代码

  至此,网卡驱动修改完成,可以编译试一试了。

  如果在局域网中,可以尝试ping一下其他主机的ip,



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值