Linux2.6移植:DM9000驱动

Linux2.6 移植:DM9000 驱动

工作环境:Ubuntu10.0.4

交叉编译环境:3.4.1

板子:MagicARM2410

系统内核:linux2.6.24.4

移植DM9000 驱动前需要知道的DM9000 的硬件信息:

1)EECS 拉高:16bit 模式;

2)EECK 拉高,INT 连接到2410 EINT0INT 脚为低时为有效中断信号,中断线为EINT0

3)cs 连接到2410nGCS3CMD 连接2410 地址总线ADDR[2]INDEXDATA 端口地址分别为0x1800030000x18000304

接下来就是具体移植步骤了:

1 .修改arch/arm/plat-s3c24xx/devs.c ,加入dm9000 的信息,并使用EXPORT_SYMBOL 宏将platform_device s3c_device_dm9000 导出,在smdk2410.c 中会用到,在 devs.c 中先添加头文件:
#include <linux/dm9000.h>
再添加以下代码:
//===========================================================================
/*
注意: 以下有两个地方需要根据自己的开发板上的dm9000s3c2410 硬件电路连接情况而定( 一般在开发板的手册上有说明,也就是刚才所列出的几条信息):(1)dm9000 的基地址 DM9000_BASE,(2) 所采用的是哪个外部中断*/


#define    DM9000_BASE 0x18000300 //这是 dm9000的基地址依个人情况而定
static struct resource s3c_dm9000_resource[] = {
[0] = {
.start = DM9000_BASE,
.end   = DM9000_BASE+ 0x3,
.flags = IORESOURCE_MEM
},
[1]={
.start = DM9000_BASE + 0x4,
.end = DM9000_BASE + 0x4 + 0x7c,
.flags = IORESOURCE_MEM
},
[2] = {
.start = IRQ_EINT0, //外部中断,依个人情况而定

.end   = IRQ_EINT0, //外部中断,依个人情况而定


.flags = IORESOURCE_IRQ
}
};

static struct dm9000_plat_data s3c_device_dm9000_platdata = {
.flags= DM9000_PLATF_16BITONLY, // 16bit模式

};

struct platform_device s3c_device_dm9000 = {
.name= "dm9000",
.id= -1,
.num_resources= ARRAY_SIZE(s3c_dm9000_resource),
.resource= s3c_dm9000_resource,
.dev= {
.platform_data = &s3c_device_dm9000_platdata,
}
};

EXPORT_SYMBOL(s3c_device_dm9000);     
//end of DM9000

//===========================================================================

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxxfg.html