基于3c2410的Linux2.6.22移植(5)

三、  网卡和LCD驱动的移植

1.  网卡驱动移植:

这块板使用的是DM9000的网卡芯片,驱动的源代码在内核源代码的目录中可以找到:

$root@host:/home/arm/#  cd kernel/linux-2.6.22

$root@host:/home/arm/kernel/linux-2.6.22# cd drivers/net

$root@host:/home/arm/kernel/linux-2.6.22/drivers/net# ls dm*

dm9000.c              dm9000.h

修改dm9000.c:

$root@host:/home/arm/kernel/linux-2.6.22# vi dm9000.c

找到函数:

static int dm9000_probe(struct platform_device *pdev)

{

……….

int ret=0;

int iosize;

int i;

u32 idval

//添加下面数组,前6个数作为网卡的mac地址,注意不能和现有的网卡冲突

unsigned char ne_defethadder[]={0x08,0x08,0x08,0x08,0x12,0x27,0}

………………………….

………………………….

for (i = 0; i < 6; i++)

ndev->dev_addr[i] = db->srom[i];

if (!is_valid_ether_addr(ndev->dev_addr)) {

for (i = 0; i < 6; i++)

//修改mac地址

//     ndev->dev_addr[i] = ior(db, i+DM9000_PAR);

ndev->dev_addr[i]=ne_defethaddr[i];

………………………

……………………….

}

退出保存。

修改smdk2410.c:

$root@host:/home/arm/kernel/linux-2.6.22# cd arch/arm/mach-s3c2410

$root@host:/home/arm/kernel/linux-2.6.22/arch/arm/mach-s3c2410#

vi mach-smdk2410.c

在mach-smdk2410.c中添加如下内容:

…………

#include <asm/plat-s3c24xx/common-smdk.h>

//添加:

#include <linux/dm9000.h>

…………

………….

#define UCON S3C2410_UCON_DEFAULT

#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB

#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE

//添加:

static struct resource s3c_d9k_resource[]=

{

[0]={

.start      =0x10000000,

.end =0x10000000,

.flags=IORESOURCE_MEM

},

[1]={

.start      =0x10000000+0x2,

.end =0x10000000+0x2,

.flags=IORESOURCE_MEM

},

[2]={

.start      =IRQ_EINT2,

.end =IRQ_EINT2,

.flags     =IORESOURCE_IRQ

}

};

static struct dm9000_plat_data s3c_device_d9k_platdata = {

.flags= DM9000_PLATF_16BITONLY

};

struct platform_device s3c_device_d9k = {

.name= "dm9000",

.id= 0,

.num_resources= ARRAY_SIZE(s3c_d9k_resource),

.resource= s3c_d9k_resource,

.dev= {

.platform_data = &s3c_device_d9k_platdata,

}

};

………………….

………………….

static struct platform_device *smdk2410_devices[] __initdata = {

&s3c_device_usb,

//启动lcd

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c,

&s3c_device_iis,

//添加

&s3c_device_d9k

//&s3c_device_ts,

};

需要注意的是起始地址和中断号的选择。这块板上DM9000芯片的INT引脚接的是EINT2,CMD引脚接的是A1,CS引脚接的是nGCS2,所以DM9000的index端口地址是0x10000000,data端口地址是0x10000000+0x00000002,据此设置结构resource s3c_d9k_resource中的参数。最后在内核编译时加上对DM9000驱动的支持就可以了,具体见内核配置和编译。

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

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