DM9000网卡移植

DM9000的这两个端口定义

#define DM_ADDR_PORT (*((volatile unsigned short *) 0x20000300))//地址口

#define DM_DATA_PORT (*((volatile unsigned short *) 0x20000304))//数据口:

1:在linux内核下[[email protected] linux-3.0.54]$ vim ./arch/arm/mach-s3c2440/mach-smdk2440.c

  1. --- mach-smdk2440_o.c   2015-04-24 11:39:20.492017397 +0800  
  2. +++ mach-smdk2440.c     2015-04-24 12:24:04.000000000 +0800  
  3. @@ -22,6 +22,7 @@  
  4.  #include <linux/serial_core.h>  
  5.  #include <linux/platform_device.h>  
  6.  #include <linux/io.h>  
  7. +#include <linux/dm9000.h>  
  8.    
  9.  #include <asm/mach/arch.h>  
  10.  #include <asm/mach/map.h>  
  11. @@ -46,6 +47,69 @@  
  12.  #include <plat/cpu.h>  
  13.    
  14.  #include <plat/common-smdk.h>  
  15. +#include <sound/s3c24xx_uda134x.h>  
  16. +#include <mach/gpio-nrs.h>  
  17. +  
  18. +#define MACH_SMDK2440_DM9K_BASE (S3C2410_CS4 + 0x300)  
  19. +/* audio */  
  20. +  
  21. +static struct platform_device uda1340_codec = {  
  22. +               .name = "uda134x-codec",  
  23. +               .id = -1,  
  24. +};  
  25. +  
  26. +  
  27. +  
  28. +static struct s3c24xx_uda134x_platform_data smdk2440_audio_pins = {  
  29. +       .l3_clk = S3C2410_GPB(4),  
  30. +       .l3_mode = S3C2410_GPB(2),  
  31. +       .l3_data = S3C2410_GPB(3),  
  32. +       .model = UDA134X_UDA1341  
  33. +};  
  34. +  
  35. +static struct platform_device smdk2440_audio = {  
  36. +       .name           = "s3c24xx_uda134x",  
  37. +       //.id           = 0,  
  38. +       .dev            = {  
  39. +               .platform_data  = &smdk2440_audio_pins,  
  40. +       },  
  41. +};  
  42. +  
  43. +  
  44. +  
  45. +/*dm9000  */  
  46. +static struct resource smdk2440_dm9k_resource[] = {  
  47. +    [0] = {  
  48. +        .start  = MACH_SMDK2440_DM9K_BASE,  
  49. +        .end    = MACH_SMDK2440_DM9K_BASE + 3,  
  50. +        .flags  = IORESOURCE_MEM  
  51. +    },  
  52. +    [1] = {  
  53. +        .start  = MACH_SMDK2440_DM9K_BASE + 4,  
  54. +        .end    = MACH_SMDK2440_DM9K_BASE + 7,  
  55. +        .flags  = IORESOURCE_MEM  
  56. +    },  
  57. +    [2] = {  
  58. +        .start  = IRQ_EINT7,  
  59. +        .end    = IRQ_EINT7,  
  60. +        .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,  
  61. +    }  
  62. +};  
  63. +  
  64. +static struct dm9000_plat_data smdk2440_dm9k_pdata = {  
  65. +       .flags          = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),  
  66. +};  
  67. +  
  68. +static struct platform_device smdk2440_device_eth = {  
  69. +       .name           = "dm9000",  
  70. +       .id             = -1,  
  71. +       .num_resources  = ARRAY_SIZE(smdk2440_dm9k_resource),  
  72. +       .resource       = smdk2440_dm9k_resource,  
  73. +       .dev            = {  
  74. +               .platform_data  = &smdk2440_dm9k_pdata,  
  75. +       },  
  76. +};  
  77. +  
  78.    
  79.  static struct map_desc smdk2440_iodesc[] __initdata = {  
  80.         /* ISA IO Space map (memory space selected by A24) */  
  81. @@ -155,6 +219,11 @@  
  82.         &s3c_device_wdt,  
  83.         &s3c_device_i2c0,  
  84.         &s3c_device_iis,  
  85. +       &smdk2440_device_eth,  
  86. +       &smdk2440_audio,  
  87. +       &uda1340_codec,  
  88. +       &samsung_asoc_dma,  
  89. +       &s3c_device_rtc,    //额,RTC时钟使能真的只要添加一句话..加进去后修改内核配置。  
  90.  };  
  91.    
  92.  static void __init smdk2440_map_io(void)  
2:然后在dm9000.h文件中添加头文件

vim include/linux/dm9000.h 



然后直接make menuconfig中 
Devices Driver->
Network device support->
Ethernet(10 or 10Mbit)->dm9000 surpport


3.网卡使能 

使用make命令重新编译内核并烧录到开发板上,再使用ifconfig -a命令已经可以网卡驱动已经添加上了,但是此刻依然不能与主机通信,因为还没有配置ip,即网卡没有使能。