u-boot 2013.10中DM9000的移植经

在一个原本无网卡的板子的uboot中添加网卡驱动

①头文件中一定要定义

#define CONFIG_DRIVER_DM9000 1
#define CONFIG_CMD_NET //tftpboot
#define CONFIG_CMD_PING 1 //ping
#define DM9000_16BIT_DATA
#define CONFIG_DM9000_BASE (0x88000300)
#define DM9000_IO (CONFIG_DM9000_BASE)
#define DM9000_DATA (CONFIG_DM9000_BASE+4)


这些话是保证dm9000.c能被编译链接,假如没有这些宏会报错

undefined eth_initialize();


②在eth.c\int eth_initialize(bd_t *bis)中较前的位置一定要调用函数dm9000_initialize(bd_t* bis)

/*
* If board-specific initialization exists, call it.
* If not, call a CPU-specific one
*/
if (board_eth_init != __def_eth_init) {
if (board_eth_init(bis) < 0)
printf("Board Net Initialization Failed\n");
} else if (cpu_eth_init != __def_eth_init) {
if (cpu_eth_init(bis) < 0)
printf("CPU Net Initialization Failed\n");
} else
printf("Net Initialization Skipped\n");
if (!eth_devices) {
puts("No ethernet found.\n");
bootstage_error(BOOTSTAGE_ID_NET_ETH_START);

比如可以

int board_eth_init(bd_t *bis)
{
  return dm9000_initialize(bis);
}

当然调用dm9000_initialize(bis);前要先声明

③ping发现错误

rx fifo error
rx length too big
DM9000 error: status check fail: 0x3

上网查,修改

/*
  Stop the interface.
  The interface is stopped when it is brought.
*/
static void dm9000_halt(struct eth_device *netdev)
{
//DM9000_DBG("%s\n", __func__);


/* RESET devie */
//dm9000_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 */
}

就是函数里全部加上注释


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值