文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>2410+linux2.6 dm9000驱动移植 笔记

2410+linux2.6 dm9000驱动移植 笔记

时间:2009-04-08  来源:guliangzeng

文件: DMA9000.rar
大小: 156KB
下载: 下载
1.linux2.6 版本为 友善之臂的mini2440  提供的 2.6.13
2.实验平台 S3C2410F 板   看看论坛里的贴子。
第一步:在arm/arm/mach-s3c2410/devs.c 文件中添加如下代码
//-----------------------------------------------------------      static struct resource s3c_dm9000_resource[] = {         [0] = {           .start = 0x08000000 + 0x300,           .end   = 0x08000000 + 0x300 + 0x03,           .flags = IORESOURCE_MEM },         [1] = {           .start = 0x08000000 + 0x300 + 0x04,           .end   = 0x08000000 + 0x300 + 0x04 + 0x3,  //   0x3f           .flags = IORESOURCE_MEM },         [2] = {           .start = IRQ_EINT0,           .end   = IRQ_EINT0,           .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);      //-----------------------------------------------------   第二步:在 arm/arm/mach-s3c2410/devs.h 文件中 添加如下一行   extern struct platform_device s3c_device_dm9000;    //---------------------------------------------------------------- 第三步:在  arm/arm/mach-s3c2410/mach-smdk2410.c  文件中的*smdk2410_devices[] __initdata 添加&s3c_device_dm9000,//for dm9000   如下所示: static struct platform_device *smdk2410_devices[] __initdata = { &s3c_device_usb, &s3c_device_lcd,              &s3c_device_wdt,    &s3c_device_i2c, &s3c_device_iis,       &s3c_device_dm9000,//for dm9000  }; //---------------------------------------------------------------- 第四步:在内核自带的dm9000网卡驱动源码driver/net/dm9000.c中添加下面两行 定义 #define INTMOD          (0x4A000004)      static void *intmod;     在driver/net/dm9000.c  的       static int dm9000_probe(struct device *dev)  函数中添加下面两行:            intmod=ioremap_nocache(INTMOD,0x0000004);       writel(0x0,intmod);   
6. 5. 修改driver/net/dm9000.c
加入几个头文件,后面有用
   1. #include <asm-arm/arch/irqs.h>
      #include <asm-arm/arch/hardware.h>
  #include <asm-arm/arch/regs-gpio.h>
在probe函数中加入
   1. unsigned char ne_def_eth_mac_addr[]={0x00,0x12,0x34,0x56,0x80,0x49};//yangdk 
然后在大约640行(我的改动比较多,不记得原来的行号了)左右的地方修改
  
这是手动修改网卡的MAC地址,在上面的数组中自己随便填入,不要是全0或者全1就行。
到此为止,网卡可以发现了,也能配上IP,但是ping不同其他主机。是初始化的问题,继续
6. 在probe函数中加入这部分代码
K,经过上述努力,Dm9000设备已经成功注册进入驱动核心。下面进入driver/net/dm9000.C中,还需要做两方面的工作:设置芯片MAC地址,使能DM9000的中断。 根据2410资料。有几个地方需要设置: 1)GPFCON (56000050) GPF7 [15:14] 置 0 ,功能设置为EINT0 。 这可以用函数实现:s3c2410_gpio_cfgpin(S3C2410_GPF0, S3C2410_GPF0_EINT0); 2)EXTINT0 (56000088) [30:28] 置0 上升沿触发中断 (复位默认为全0,可能不必设) 3)外部中断屏蔽寄存器。EINTMASK (560000a4) [0] 置0 以enable interrupt EINT0 4)全局中断屏蔽寄存器  INTMASK (4A000008) [3] 置0 使能EINT0。 代码修改: 1
   2.  
   3. static void *bwscon,*bankcon4,*bankcon5; 
   4. static void *gpfcon,*gpfcon1; 
   5. static void *extint0,*extint01; 
   6. static void *intmsk; 
   7. static void *dsc0,*dsc1; 
   8. #define BWSCON           (0x48000000) 
   9. //#define BANKCON4     (0x48000014) 
  10. //#define BANKCON5     (0x48000018) 
  11.
  12. #define GPFCON         (0x56000050) 
  13. #define GPFUP         (0x56000058)
  14.// #define EXTINT0          (0x5600008C)   
  15. #define EXTINT01         (0x56000088) 
  16. #define INTMSK           (0x4A000008) 
  17. #define DSC0    0x560000c4) 
  18. #define DSC1     (0x560000c8) 
  19.
           在probe中
for (i = 0; i < 6; i++) 
       ndev->dev_addr[i] = ne_def_eth_mac_addr[i];   
  20.     bwscon=ioremap_nocache(BWSCON,0x0000004); 
  21.     extint01=ioremap_nocache(EXTINT01,0x0000004);//
 
  22.        gpfcon=ioremap_nocache(GPFCON,0x0000004); 
             gpfup=ioremap_nocache(GPFUP,0x0000004); 
  23.     intmsk=ioremap_nocache(INTMSK,0x0000004); 
  24.   //  dsc1=ioremap_nocache(DSC1,0x0000004);    
  25.  
  26.     writel(readl(bwscon)|0xc0,bwscon); 
  27.     //writel(readl(dsc1)|(0xf<<8),dsc1); 
         //s3c2410_gpio_cfgpin(S3C2410_GPF0, S3C2410_GPF0_EINT0);
  28.    writel(readl(gpfcon)|(0x1<<1),gpfcon);         writel(readl(gpfup)|0x1,gpfup);
  29.      
  30.  
  writel(readl(extint01)|(1<<2),extint01); //eint0  rise edgen
  31.     writel(readl(intmsk)&(~0x1),intmsk); //    
相关阅读 更多 +
排行榜 更多 +
木头人挑战游戏

木头人挑战游戏

休闲益智 下载
荒野神枪手

荒野神枪手

休闲益智 下载
步步通行

步步通行

学习教育 下载