smdk2410.h添加
#define CONFIG_ETHADDR 08:00:3e:26:0a:5b
//因为板子没有使用EEPROM所以使用了自己设置的MAC
#define CFG_LOAD_ADDR 0x30008000 /* default load address */
//这是加载内核的地址
//我修改的
/*
* Hardware drivers
*/
//#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
//#define CS8900_BASE 0x19000300
//#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x10000000
//#define CONFIG_DM9000_NO_SROM 1
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+2)
#define DM9000_USE_16BIT
//#define CONFIG_DM9000_DEBUG
//我修改的end
CONFIG_DM9000_BASE为网卡的index口地址
board.c
添加
#ifdef CONFIG_DRIVER_DM9000
extern int eth_init(bd_t *bd);
#endif
在start_armboot (void)函数中添加
#ifdef CONFIG_DRIVER_DM9000
eth_init(gd->bd);
#endif
net/eth.c中添加
dm9000_initialize(bis);
初始化网卡
config_cmd_default.h添加
#define CONFIG_CMD_PING //添加PING命令
在dm9000x.c中
这是从uboot2010.06版本中直接拷贝过来的驱动,包括dm9000x.h文件
但是接口必须修改
修改了一大堆的内容。
在int dm9000_initialize(bd_t *bis)
{
struct eth_device *dev = &(dm9000_info.netdev);
/* Load MAC address from EEPROM */
dm9000_get_enetaddr(dev);
//dev->init = dm9000_init;
//dev->halt = dm9000_halt;
//dev->send = dm9000_send;
//dev->recv = dm9000_rx;
//sprintf(dev->name, "dm9000");
//eth_register(dev);
return 0;
}
并修改dm9000_init dm9000_halt dm9000_send dm9000_rx;的接口为net.h中定义的形式
在dm9000_init
主要添加了
char *s,*e;
s = getenv ("ethaddr");
for (i = 0; i < 6; ++i) {
bd->bi_enetaddr[i] = s ?
simple_strtoul (s, &e, 16) : 0;
(dm9000_info.netdev).enetaddr[i] = s ?
simple_strtoul (s, &e, 16) : 0;
if (s)
s = (*e) ? e + 1 : e;
}
屏蔽
#if 0
i = 0;
while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */
udelay(1000);
i++;
if (i == 10000) {
printf("could not establish link\n");
return 0;
}
}
#endif
出现错误:
target CPU does not support interworking
在arm920t/config.hk中修改为以下代码
PLATFORM_CPPFLAGS += -march=armv4t
现在烧进去情况是能够执行驱动的初始化函数,但是还是有问题