主题 : DM9000驱动移植无法PING通,请高手指点,急!! 复制链接 | 浏览器收藏 | 打印
级别: 骑士
UID: 4234
精华: 0
发帖: 152
金钱: 1420 两
威望: 1142 点
综合积分: 304 分
注册时间: 2009-03-05
最后登录: 2012-08-18
楼主  发表于: 2009-08-19 07:23

 DM9000驱动移植无法PING通,请高手指点,急!!

我的移植步骤如下:
修改内核源码的“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机之间都是,还要做哪些工作,请高手指点!
级别: 骑士
UID: 4234
精华: 0
发帖: 152
金钱: 1420 两
威望: 1142 点
综合积分: 304 分
注册时间: 2009-03-05
最后登录: 2012-08-18
1楼  发表于: 2009-08-19 10:26
补充一下,我能否用IRQ_EINT11作为DM9000的中断输入,我用的是s3c2410的片子,该端口业可以作为spi1的片选口
级别: 骑士
UID: 4234
精华: 0
发帖: 152
金钱: 1420 两
威望: 1142 点
综合积分: 304 分
注册时间: 2009-03-05
最后登录: 2012-08-18
2楼  发表于: 2009-08-19 16:33
问题解决了,郁闷,由于硬件设计出现了问题,我把中断改成了中断5,并且要用双绞线连接开发板和PC机,用直连线不行,估计我用中断11也可以
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-08-19 17:56
我想你不如花点时间想想为什么你问的问题没人愿意回
[ 此帖被kasim在2009-08-19 18:19重新编辑 ]
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."