Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400856
  • 博文数量: 101
  • 博客积分: 2324
  • 博客等级: 大尉
  • 技术积分: 887
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-19 19:28
文章分类

全部博文(101)

文章存档

2012年(3)

2011年(60)

2010年(38)

分类: LINUX

2010-11-20 14:21:44

基于s3c2410 Dm9000网卡移植

                               -------------内核:Linux.2.6.24

一、  arch/arm/plat-s3c24xx/dev.c中添加:

 #includes 

/*****************dm9000********************/

static struct resource s3c_dm9000_resource[] = {

        [0] = {

          .start = 0x10000000,   //对应电路图nGCS2

          .end   = 0x10000001,

          .flags = IORESOURCE_MEM,

       },

        [1] = {

          .start = 0x10000002,

          .end   = 0x10000003, //   0x3f

          .flags = IORESOURCE_MEM,

       },

        [2] = {

          .start = IRQ_EINT2,

          .end   = IRQ_EINT2,

          .flags = IORESOURCE_IRQ,

       }

 

};

static struct dm9000_plat_data s3c_device_dm9000_platdata = {

        .flags= DM9000_PLATF_16BITONLY

};

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);

/************dm9000**************/

       

二、include/asm/plat-s3c24xx/dev.h中添加:

extern struct platform_device s3c_device_dm9000; //by mazhongtian dm9000

三、arch/arm/mach-s3c2410/mach-smdk2410.c 中添加新设备:

在函数里添加&s3c_device_dm9000,//by mazhongtian dm9000

static struct platform_device *smdk2410_devices[] __initdata = {

      &s3c_device_usb,

      &s3c_device_lcd,

      &s3c_device_wdt,

      &s3c_device_i2c,

      &s3c_device_iis,

      //&ax88796_dev,      //加在这里

      &s3c_device_rtc,   //加在这里

      &s3c_device_dm9000,//by mazhongtian dm9000

};

四、修改 drivers/net/dm9000.c

1. 添加头文件

/****************dm9000*********************/

#include

#include

#include

#include

/**********dm9000----end***************/

2.

  /* Read SROM content */

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

            ((u16 *) db->srom)[i] = read_srom_word(db, i);

 

      /* Set Node Address */

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

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

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

            /* try reading from mac */

 

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

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

      }

 

      if (!is_valid_ether_addr(ndev->dev_addr))

            printk("%s: Invalid ethernet MAC address.  Please "

                   "set using ifconfig\n", ndev->name);

 

      platform_set_drvdata(pdev, ndev);之前添加:

/*********** add by shark************/

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

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

       }           

        /*Set external intruppt*/

          set_irq_type(IRQ_EINT2,IRQT_HIGH);//IRQ_EINT2要根据自己开发板而定,与步骤1中对应.

 

       /******************end **************/ 大约在610行左右。

五、 内核的配置,在内核中选择:

   #make menuconfig

     Device Drivers  --->

            [*] Network device support  ---> 

                [*]   Ethernet (10 or 100Mbit)  --->     

                      <*>   DM9000 support

 保存并推出。

#make zImage

编译之后烧写内核镜像文件,启动开发板。

至此,dm9000的网卡移植结束。

阅读(665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~