Linux2.6 移植:DM9000 驱动
工作环境:Ubuntu10.0.4
交叉编译环境:3.4.1
板子:MagicARM2410
系统内核:linux2.6.24.4
移植DM9000 驱动前需要知道的DM9000 的硬件信息:
1)EECS 拉高:16bit 模式;
2)EECK 拉高,INT 连接到2410 EINT0 :INT 脚为低时为有效中断信号,中断线为EINT0
3)cs 连接到2410 的nGCS3 ,CMD 连接2410 地址总线ADDR[2] :INDEX 和DATA 端口地址分别为0x180003000 和0x18000304 。
接下来就是具体移植步骤了:
1 .修改arch/arm/plat-s3c24xx/devs.c ,加入dm9000 的信息,并使用EXPORT_SYMBOL 宏将platform_device s3c_device_dm9000 导出,在smdk2410.c 中会用到,在 devs.c 中先添加头文件:
#include <linux/dm9000.h>
再添加以下代码:
//===========================================================================
/* 注意: 以下有两个地方需要根据自己的开发板上的dm9000 与s3c2410 硬件电路连接情况而定( 一般在开发板的手册上有说明,也就是刚才所列出的几条信息):(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
//===========================================================================