我的移植步骤如下:
修改内核源码的“arch/arm/plat-s3c24xx/common-smdk.c”文件:
在46 行左右添加如下内容:
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
#include <linux/dm9000.h>
#endif
然后在151 行左右,添加如下内容:
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
/* DM9000 */
static struct resource s3c_dm9k_resource[] = {
[0] = {
.start = S3C2410_CS4,
.end = S3C2410_CS4 + 3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C2410_CS4 + 4,
.end = S3C2410_CS4 + 4 + 3,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT7, /* 中断号*/
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING
}
};
/* for the moment we limit ourselves to 16bit IO until some
* better IO routines can be written and tested
*/
static struct dm9000_plat_data s3c_dm9k_platdata = {
.flags = DM9000_PLATF_16BITONLY,
};
static struct platform_device s3c_device_dm9k = {
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(s3c_dm9k_resource),
.resource = s3c_dm9k_resource,
.dev = {
.platform_data = &s3c_dm9k_platdata,
}
};
#endif /* CONFIG_DM9000 */
然后在199 行左右,static struct platform_device __initdata *smdk_devs[] = {
这个结构体中添加如下内容:
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
&s3c_device_dm9k,
#endif
修改内核源码的“drivers/net/dm9000.c”文件:
在73 行添加如下内容:
#if defined(CONFIG_ARCH_S3C2410)
#include <asm/arch-s3c2410/regs-mem.h>
#endif
在414 行static int dm9000_probe(struct platform_device *pdev)这个函数中
添加如下内容:
#if defined(CONFIG_ARCH_S3C2410)
unsigned int oldval_bwscon=*((volatile unsigned int *)S3C2410_BWSCON);
unsigned int oldval_bankcon4= *((volatile unsigned int *)S3C2410_BANKCON4);
#endif
在428 行添加如下内容:
/* Init network device */
#if defined(CONFIG_ARCH_S3C2410)
*((volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & ~(3<<16)) \
| S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif
在628 行添加如下内容:
#if defined(CONFIG_ARCH_S3C2410)
*((volatile unsigned int *)S3C2410_BWSCON) = oldval_bwscon;
*((volatile unsigned int *)S3C2410_BANKCON4) = oldval_bankcon4;
#endif
配置并编译内核
修改完以上的内容之后,输入:#make menuconfig,进入配置单,然后添加上对DM9000 网卡的配置:
Device Drivers --->
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
-*- Generic Media Independent Interface device support
<*> DM9000 support
(4) DM9000 maximum debug level
程序运行后已经出现:eth0: link up, 10Mbps, half-duplex, lpa 0x0021的提示符,并在PC机上显示连接正常,但无法PING通,不管是和虚拟机还是和PC机之间都是,还要做哪些工作,请高手指点!