DM9000网卡驱动在MINI2440上的移植

前些天完成了DM9000在MINI2440平台上的驱动移植。完成之后对源码进行了进一步的分析和整理。

1. 移植DM9000网卡驱动

Linux-2..6.32.2已经自带了完善的DM9000 网卡驱动驱动(源代码位置:linux-2.6.32.2/drivers/net/dm9000.c),它也是一个平台设备,因此在目标平台初始化代码中,只要填写好相

应的结构表即可,具体步骤如下:

1.1 首先添加驱动所需的头文件 dm9000.h

 

1.2 再定义DM9000 网卡设备的物理基地址,以便后面用到:

/* DM9000AEP 10/100 ethernet controller */

#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)

1.3 再填充该平台设备的资源设置接口,以便和 DM9000 网卡驱动接口配合起来,如下

网卡映射的片选地址设定为CS4

static struct resource mini2440_dm9k_resource[] = {

[0] = {

.start = MACH_MINI2440_DM9K_BASE,

.end = MACH_MINI2440_DM9K_BASE + 3,

.flags = IORESOURCE_MEM //IO内存地址地址IO地址

},

[1] = {

.start = MACH_MINI2440_DM9K_BASE + 4,

.end = MACH_MINI2440_DM9K_BASE + 7,

.flags = IORESOURCE_MEM//数据IO地址

},

[2] = {

.start = IRQ_EINT7, //设置网卡设备的中断号

.end = IRQ_EINT7,

.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,

}

};

1.4 然后再将该平台设备添加到统一的平台设备,进行注册。

1.5 调整DM9000 所用的位宽寄存器

因为 Linux-2.6.32.2 DM9000 网卡驱动并不是专门为mini2440 准备的,所以还要在

其源代码中做一些移植工作

static int __init

dm9000_init(void)

{

#if defined(CONFIG_ARCH_S3C2410)

unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;

unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;

//设置带宽为16位,启用BANK4WAIT状态,启用BANK4 SRAM的写搞的字节使能

*((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

printk(KERN_INFO "%s Ethernet Driver, V%s\n", CARDNAME, DRV_VERSION);

return platform_driver_register(&dm9000_driver);

}

MAC地址的修改,因为没有介入EEPROM,所以直接可以在软件中修改。


 

时序图中的时间参数设定

1.时间参数为多少纳秒

2.时间参数为多少个时钟周期。比如400MHZ 一个时钟周期就是5ns

3.对应的时间参数bit位的设定。

4.写信号的流程:片选使能(TCOS + 写命令使能(TACC写命令使能结束

S3C2410_BWSCON_WS4

 

有参考:

http://www.doc88.com/p-949836023276.html

 

 

你可能感兴趣的:(linux,驱动移植,dm9000)