首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于Linux2.6.34下DM9000网卡驱动移植详解

关于Linux2.6.34下DM9000网卡驱动移植详解

作者:徐老师 凌阳教育嵌入式培训高级讲师

    DM9000是10/100M自适应的总线型网卡,Linux中对其支持已经非常完善,不同开发板之间移植、修改主要集中在总线的选择及中断选择上


    1)修改arch/arm/mach-s3c2440/mach-smdk2440.c文件,增加以下信息

    /****add by dengwei*********************************/

    #include

    static struct resource s3c_dm9k_resource[] =

    {

    [0] =

    {

    .start = S3C2410_CS3,      //网卡连接在CS3总线上(此处跟据不同开发板进行修改)

    .end = S3C2410_CS3 + 3,

    .flags = IORESOURCE_MEM,

    },

    [1] =

    {

    .start = S3C2410_CS3 + 4,   //同上

    .end = S3C2410_CS3 + 4 + 3,

    .flags = IORESOURCE_MEM,

    },

    [2] = {

    .start = IRQ_EINT7,                //根据硬件外部中断管脚修改此数字

    .end = IRQ_EINT7,

    .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,

    }

    };

    static struct dm9000_plat_data s3c_dm9k_platdata =

    {

    .flags =DM9000_PLATF_16BITONLY,

    };

    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,

    }

    };

    EXPORT_SYMBOL(s3c_device_dm9k);

/*************************add by dengwei***************************/


    2修改 arch/arm/mach-s3c2440/mach-smdk2440.c文件

    修改struct platform_device *smdk2440_devices[]__initdata结构体增加以下代码:

    static struct platform_device*smdk2440_devices[] __initdata =

    {

    &s3c_device_ohci,

    &s3c_device_lcd,

    &s3c_device_wdt,

    &s3c_device_i2c0,

    &s3c_device_iis,

    &s3c_device_dm9k,            //for dm9000   add by dengwei

};


    3)修改drivers/net/dm9000.c源码

    在头文件区增加头文件:

    #include

    大约1365行左右增加以下代码:

    static int __devinit dm9000_probe(structplatform_device *pdev)

    {

    //add   here  函数开始处

    }

    /**********add by dengwei******************************************/

    [cpp] view plaincopy

    #if defined(CONFIG_ARCH_S3C2440)

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

    *((volatileunsigned int *)S3C2410_BWSCON)=(oldval_bwscon&~(3<<16))|S3C2410_BWSCON_DW3_16|S3C2410_BWSCON_WS3|S3C2410_BWSCON_ST3; //设置BANK3:总线宽度为16,使能nWAIT

    *((volatile unsigned int *)S3C2410_BANKCON3) = 0x1f7c; //设置BANK3的时间参数

    #endif

/**********add by dengwei****************/


    4)修改make menuconfig配置选项:

    Devices  Drivers --->

    Network device support--->

    Ethernet (10 or 100) --->

   

  • DM9000support

        (4)DM9000maxinum   debug level

    //仅保留这两个选项,其余的全部去掉


        5)重新编译内核,烧入开发板中即可

        6)第一次使用的开发板需使用ifconfig eth0 hw ether 12:34:56:78:32:65 设置mac地址

        (MAC地址可以随便设置)

        使用ifconfigeth0 192.168.220.*设置开发板IP

        使用ping命令ping主机即可

  • 返回列表