<style type="text/css"> <!-- @page {margin:2cm} p {margin-bottom:0.21cm} --> </style>
一 、vi include/linux/dm9000.h
二 、viarch/arm/mach-s3c64xx/mach-th6410.c
添加头文件:
增加mac 地址设置函数
staticint __init dm9000_set_mac(char *str) { unsigned charaddr[6]; unsigned int val; int idx = 0; char *p = str,*end; while (*p && idx < 6) { val =simple_strtoul(p, &end, 16); if (end <= p) { /* convertfailed */ break; } else { addr[idx++] = val; p = end; if(*p == ':'|| *p == '-') { p++; } else { break; } } } if(idx == 6) { printk("Setup ethernet address to %pM\n",addr); memcpy(dm9000_setup.param_addr, addr, 6); } return1; } __setup("ethmac=",dm9000_set_mac);
增加IO 映射
增加映射结构体
static struct map_desc th6410_iodesc[] = { #ifdefCONFIG_DM9000 { .virtual = (u32)S3C64XX_VA_DM9000, .pfn =__phys_to_pfn(S3C64XX_PA_DM9000), .length =S3C64XX_SZ_DM9000, .type = MT_DEVICE, }, #endif };
然后在staticvoid __init th6410_map_io(void) 函数中 将s3c64xx_init_io(NULL,0); 改成
最后在staticstruct platform_device *th6410_devices[] __initdata 的初始化设备中
将&th6410_smsc911x,
改成
三 、vidrivers/net/dm9000.c
大概1586行
将mac_src= "platform data";
memcpy(ndev->dev_addr,pdata->dev_addr, 6);
改成
mac_src= "param data"; memcpy(ndev->dev_addr,pdata->param_addr, 6);
大概1598行
增加
if(!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL){ mac_src = "platform data"; memcpy(ndev->dev_addr,pdata->dev_addr, 6); }
四 、makemenuconfig
[*] Networking support --->
Networking options--->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
[*] IP: RARPsupport
Device Drivers --->
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> DM9000 support
[ ] Ethernet (1000 Mbit) --->去掉
其他的默认
编译出来,在引导信息中就能看到dm9000网卡信息了。
dm9000Ethernet Driver, V1.31
eth0: dm9000a at d0930000,d0e00004 IRQ 108MAC: 08:90:90:90:
本文由muge0913编写,希望给嵌入开发者带来一些帮助,并希望能和大家交流技术,若有不对的地方,或有更好的方法请指出。
转载请注明出处:http://blog.csdn.net/muge0913/article/details/7242677
一 、vi include/linux/dm9000.h
28行增加
unsignedchar param_addr[6];
如下:
structdm9000_plat_data { unsignedint flags; unsignedchar dev_addr[6]; unsignedchar param_addr[6]; /*allow replacement IO routines */ void (*inblk)(void__iomem *reg, void *data, int len); void (*outblk)(void__iomem *reg, void *data, int len); void (*dumpblk)(void__iomem *reg, int len); };
二 、viarch/arm/mach-s3c64xx/mach-th6410.c
添加头文件:
/*更改网卡头文件*/ //#include<linux/smsc911x.h> #include<linux/dm9000.h>
增加
增加mac 地址设置函数
staticint __init dm9000_set_mac(char *str) { unsigned charaddr[6]; unsigned int val; int idx = 0; char *p = str,*end; while (*p && idx < 6) { val =simple_strtoul(p, &end, 16); if (end <= p) { /* convertfailed */ break; } else { addr[idx++] = val; p = end; if(*p == ':'|| *p == '-') { p++; } else { break; } } } if(idx == 6) { printk("Setup ethernet address to %pM\n",addr); memcpy(dm9000_setup.param_addr, addr, 6); } return1; } __setup("ethmac=",dm9000_set_mac);
增加IO 映射
增加映射结构体
static struct map_desc th6410_iodesc[] = { #ifdefCONFIG_DM9000 { .virtual = (u32)S3C64XX_VA_DM9000, .pfn =__phys_to_pfn(S3C64XX_PA_DM9000), .length =S3C64XX_SZ_DM9000, .type = MT_DEVICE, }, #endif };
然后在staticvoid __init th6410_map_io(void) 函数中 将s3c64xx_init_io(NULL,0); 改成
s3c64xx_init_io(th6410_iodesc,ARRAY_SIZE(th6410_iodesc));
最后在staticstruct platform_device *th6410_devices[] __initdata 的初始化设备中
将&th6410_smsc911x,
改成
&s3c_device_dm9000,
三 、vidrivers/net/dm9000.c
大概1586行
将mac_src= "platform data";
memcpy(ndev->dev_addr,pdata->dev_addr, 6);
改成
mac_src= "param data"; memcpy(ndev->dev_addr,pdata->param_addr, 6);
大概1598行
增加
if(!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL){ mac_src = "platform data"; memcpy(ndev->dev_addr,pdata->dev_addr, 6); }
四 、makemenuconfig
[*] Networking support --->
Networking options--->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
[*] IP: RARPsupport
Device Drivers --->
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> DM9000 support
[ ] Ethernet (1000 Mbit) --->去掉
其他的默认
编译出来,在引导信息中就能看到dm9000网卡信息了。
dm9000Ethernet Driver, V1.31
eth0: dm9000a at d0930000,d0e00004 IRQ 108MAC: 08:90:90:90:
本文由muge0913编写,希望给嵌入开发者带来一些帮助,并希望能和大家交流技术,若有不对的地方,或有更好的方法请指出。
转载请注明出处:http://blog.csdn.net/muge0913/article/details/7242677