后上层就直接调用这个结构的函数。
1. 在板文件中加入板设备信息platform_device s3c_device_dm9000,注册即可。platform总线会找到对应驱动执行probe,这个探测函数主要就是映射网卡的物理地址到内核虚拟地址实现上面说的net_device,(注意:要注释&smdk6410_smsc911x,因为它也声明了一样的物理地址)。
2. 再就是配置内核,选上net后才会在drivers中有net_device的驱动选项,选择DM9000即可。
3. 再去net中选择需要支持的网络协议,如PPP,IP,TCP,SOCKET等等,就OK了。
下面是板文件中的配置:(其中CONFIG_DM9000是表示配置内核选择了DM9000驱动)
点击(此处)折叠或打开
- 
				/* Ethernet */
 
- 
				#ifdef CONFIG_DM9000
 
- 
				#define S3C64XX_PA_DM9000    (0x18000000)
 
- 
				#define S3C64XX_SZ_DM9000    SZ_1M
 
- 
				#define S3C64XX_VA_DM9000    S3C_ADDR(0x03b00300)
 
- 
				
 
- 
				static struct resource dm9000_resources[] = {
 
- 
				    [0] = {
 
- 
				        .start        = S3C64XX_PA_DM9000,
 
- 
				        .end        = S3C64XX_PA_DM9000 + 3,
 
- 
				        .flags        = IORESOURCE_MEM,
 
- 
				    },
 
- 
				    [1] = {
 
- 
				        .start        = S3C64XX_PA_DM9000 + 4,
 
- 
				        .end        = S3C64XX_PA_DM9000 + S3C64XX_SZ_DM9000 - 1, 
 
- 
				        .flags        = IORESOURCE_MEM,
 
- 
				    },
 
- 
				    [2] = {
 
- 
				        .start        = IRQ_EINT(7),
 
- 
				        .end        = IRQ_EINT(7),
 
- 
				        .flags        = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,
 
- 
				    },
 
- 
				};
 
- 
				
 
- 
				static struct dm9000_plat_data dm9000_setup = {
 
- 
				    .flags            = DM9000_PLATF_16BITONLY,
 
- 
				    .dev_addr        = { 0x08, 0x90, 0x00, 0xa0, 0x90, 0x90 },
 
- 
				};
 
- 
				
 
- 
				static struct platform_device s3c_device_dm9000 = {
 
- 
				    .name            = "dm9000",
 
- 
				    .id                = 0,
 
- 
				    .num_resources    = ARRAY_SIZE(dm9000_resources),
 
- 
				    .resource        = dm9000_resources,
 
- 
				    .dev            = {
 
- 
				        .platform_data = &dm9000_setup,
 
- 
				    }
 
- 
				};
 
- #endif //#ifdef CONFIG_DM9000
