当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : mini2440移植网卡驱动
帖子发表于 : 2010-04-06 13:06 
头像

注册: 2009-08-12 0:39
帖子: 46
送出感谢: 0 次
接收感谢: 0 次
转载自:http://www.cnblogs.com/gumptious/archive/2010/02/20/1669706.html

一,开发环境:
主机:ubuntu9.10
内核:linux2.6.30.10
交叉编译器:arm-linux-gcc3.4.1
平台:mini2440,64M nandflash
网卡:DM9000


二,DM9000移植的好文章:

1.http://blog.chinaunix.net/u1/57901/showart_2023852.html

2.http://blog.csdn.net/baozhongchao/archi ... 38182.aspx

三,步骤

1.修改arch/arm/plat-s3c24xx/common-smdk.c文件

在包含头文件的区域增加以下代码:

#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
#include <linux/dm9000.h>
#endif

在smdk_devs结构体之前添加以下代码:
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

//DM9000网卡使用的资源列表。使用0x20000000、0x20000004这两个地址就可以操作DM9000网卡。
static struct resource s3c_dm9k_resource[] = {
[0] = {
.start = S3C2410_CS4, //S3C2410_CS4被定义为0x20000000(BANK4基地址)
.end = S3C2410_CS4+3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C2410_CS4 + 4, //0x20000004
.end = S3C2410_CS4 + 4 + 3,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT7, //连接S3C2440的EINT7引脚
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING, //上升沿触发
}

};

//DM9000与开发板相关的数据,指定访问DM9000时,数据位宽为16
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

在smdk_devs结构体中添加以下代码:

#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
&s3c_device_dm9k,
#endif

2.修改drivers/net/dm9000.c文件

在包含头文件区域添加以下代码

#if defined(CONFIG_ARCH_S3C2410)
#include <mach/regs-mem.h>
#endif

在dm9000_probe函数中的变量声明之后添加以下代码:

#if defined(CONFIG_ARCH_S3C2410)
unsigned int oldval_bwscon;
unsigned int oldval_bankcon4;
#endif

在dev_dbg(&pdev->dev, "dm9000_probe()\n");语句之后添加以下代码:

#if defined(CONFIG_ARCH_S3C2410)
oldval_bwscon=*((volatile unsigned int *)S3C2410_BWSCON);
*((volatile unsigned int *)S3C2410_BWSCON)=(oldval_bwscon & ~(3<<16))| S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
oldval_bankcon4=*((volatile unsigned int *)S3C2410_BANKCON4);
*((volatile unsigned int *)S3C2410_BANKCON4)=0x1f7c;
#endif

将platform_set_drvdata(pdev, ndev);之前的if判断语句改为:

if (!is_valid_ether_addr(ndev->dev_addr))
{
dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please "
"set using ifconfig\n", ndev->name);
#if defined(CONFIG_ARCH_S3C2410)
printk("Now use the default MAC address: 08:90:90:90:90:90\n");
ndev->dev_addr[0]=0x08;
ndev->dev_addr[1]=0x90;
ndev->dev_addr[2]=0x90;
ndev->dev_addr[3]=0x90;
ndev->dev_addr[4]=0x90;
ndev->dev_addr[5]=0x90;
#endif
}

在dev_err(db->dev, "not found (%d).\n", ret);之后添加以下代码:

#if defined(CONFIG_ARCH_S3C2410)
*((volatile unsigned int *)S3C2410_BWSCON)=oldval_bwscon;
*((volatile unsigned int *)S3C2410_BWSCON)=oldval_bankcon4;
#endif

3.配置内核

Device Drivers --->

  Network device support --->

    [*] Network device support --->

      Ethernet (10 or 100Mbit) --->

        <*> DM9000 support
4,编译即可。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: mini2440移植网卡驱动
帖子发表于 : 2010-04-06 13:08 
头像

注册: 2008-12-13 19:39
帖子: 13284
地址: 物华天宝人杰地灵
送出感谢: 1
接收感谢: 6
菜鸟路过支持楼主分享经验。 :em11


_________________
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: mini2440移植网卡驱动
帖子发表于 : 2010-04-06 23:34 
头像

注册: 2009-08-12 0:39
帖子: 46
送出感谢: 0 次
接收感谢: 0 次
wangdu2002 写道:
菜鸟路过支持楼主分享经验。 :em11

呵呵,我也是个菜鸟。都是网友的经验,linux自己学效率比较低,得多交流!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译