uClinux版本:uClinux-dist-2009R1-RC6.tar.bz2
1. 修改uClinux-dist/linux-2.6.x/arch/blackfin/mach-bf561/boards/ezkit.c文件
1)添加头文件
#include <linux/dm9000.h>
2)添加DM9000E的配置信息,网卡起始基地址,结束地址,中断号为46,低电平触发
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
static struct resource dm9000_bfin_resources[] = {
[0]={
.start = 0x2C020000, // 网卡起始基地址
.end = 0x2C020000 + 16,
.flags = IORESOURCE_MEM,
},
[1]={
.start = IRQ_PF46, // 中断号
.end = IRQ_PF46,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL, // 低电平触发
},
};
static struct dm9000_plat_data bf561_dm9000_platdata = {
.flags = DM9000_PLATF_16BITONLY,
};
static struct platform_device dm9000_bfin_device = {
.name = "dm9000",
.id = -1,
.num_resources = ARRAY_SIZE(dm9000_bfin_resources),
.resource = dm9000_bfin_resources,
.dev = {
.platform_data = &bf561_dm9000_platdata,
}
};
#endif
static struct resource dm9000_bfin_resources[] = {
[0]={
.start = 0x2C020000, // 网卡起始基地址
.end = 0x2C020000 + 16,
.flags = IORESOURCE_MEM,
},
[1]={
.start = IRQ_PF46, // 中断号
.end = IRQ_PF46,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL, // 低电平触发
},
};
static struct dm9000_plat_data bf561_dm9000_platdata = {
.flags = DM9000_PLATF_16BITONLY,
};
static struct platform_device dm9000_bfin_device = {
.name = "dm9000",
.id = -1,
.num_resources = ARRAY_SIZE(dm9000_bfin_resources),
.resource = dm9000_bfin_resources,
.dev = {
.platform_data = &bf561_dm9000_platdata,
}
};
#endif
3)在static struct platform_device *ezkit_devices[] __initdata结构体中添加DM9000
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
&dm9000_bfin_device,
#endif
&dm9000_bfin_device,
#endif
2. 修改uClinux-dist/linux-2.6.x/drivers/net/dm9000.c,通u-boot的网卡驱动一样,需要在读写函数后添加延时语句asm("ssync;");
3. 配置编译内核,去掉SMC9111,选中DM9000 support,编译进内核。将编译好的内核tftp到开发板的RAM并启动后,执行ifconfig eth0 up,配置好IP地址后,可以顺利地ping通局域网内主机。
修改好的uClinux下DM9000驱动:/Files/rockstone/uClinux_DM9000.rar