mini2440 DM9000 网卡驱动移植

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网卡使用的资源列表。使用0x200000000x20000004这两个地址就可以操作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,               //连接S3C2440EINT7引脚

 .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

 

到这里,网卡的内核驱动移植算是完成了,

 

但是工作还是没有做完。你必须在根文件系统中添加相应的初始化语句,才算完成了整个网卡的移植

 

在根文件系统的 /etc/init.d/rcS中添加如下语句

 

echo "network interface"

/sbin/ifconfig lo 127.0.0.1

/sbin/ifconfig eth0 210.46.98.112 up                 

route add default gw 210.46.98.112

 

ifconfig eth0 down

 

ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX ÅMAC 地址随便设 

 

ifconfig eth0 up

 

这样网卡就算是全部移植完成了

mini2440 DM9000 网卡驱动移植_第1张图片

你可能感兴趣的:(mini2440 DM9000 网卡驱动移植)