|
移植之后,可以检测到dm9000设备,但ping不通局域网内的任何电脑,我是这样移植的,请大家帮我看看哪里有错误?
我的步骤如下:
------------------------------------------------------------------------
1,在百问网上看到一个前辈说“内核已经支持DM9000AEP,如果DM9000AEP不使用nWAIT信号,那么在UBOOT里设置相应的BANK即可 ”,所以我没有对linux/drivers/net/dm9000.c文件做任何修改,保持原封不动。
2,修改linux/arch/arm/mach-s3c2440/mach-smdk2440.c文件:
(2.1)static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_dm9000,//添加了这一行
&s3c_device_rtc,
};
(2.2) #define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)
(2.3)
static struct resource mini2440_dm9000_resource[] = {
[0] = {
.start = MACH_MINI2440_DM9K_BASE,
.end = MACH_MINI2440_DM9K_BASE + 3,
.flags = IORESOURCE_MEM
},
[1] = {
.start = MACH_MINI2440_DM9K_BASE + 4,
.end = MACH_MINI2440_DM9K_BASE + 7,
.flags = IORESOURCE_MEM
},
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
}
};
(2.4)
static struct dm9000_plat_data mini2440_dm9000_pdata = {
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
};
(2.5)
static struct platform_device mini2440_device_dm9000 = {
.name = "dm9000",
.id = -1,
.num_resources = ARRAY_SIZE(mini2440_dm9000_resource),
.resource = mini2440_dm9000_resource,
.dev = {
.platform_data = &mini2440_dm9000_pdata,
},
};
(2.6) #include <linux/dm9000.h>
-----------------------------------------------------------------
我的问题有3个:
1,上面就是我移植的完整步骤,有什么遗漏和错误吗?
2,dm9000.c文件不用修改吗?原封不动就行吗?
3,dm9000使用了外部中断IRQ_EINT7,这在上面mini2440_dm9000_resource中已经声明了,并且设置了“.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,”。那么我是否还需要“人工”的把IRQ_EINT7引脚配置为外部中断模式呢?还需要“人工”设置那些相关的中断寄存器吗?
请大侠帮忙,非常感谢!!! |
|