1.修改文件arch/arm/mach-s3c2410/devs.h
加入
extern struct platform_device s3c_device_dm9000 ;
2.修改文件arch/arm/mach-s3c2410/devs.c
#include
static struct resource s3c_dm9000_resource[] = {
[0] = {
.start = S3C2410_CS4 + 0x300,
.end = S3C2410_CS4 + 0x300 + 0x03,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C2410_CS4 + 0x300 + 0x04,
.end = S3C2410_CS4 + 0x300 + 0x04 + 0x3,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT7 ,
.end = IRQ_EINT7 ,
.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);
3.修改文件arch/arm/mach-s3c2410/mach-smdk2410.c
static struct platform_device *smdk2410_devices[] __initdata = {
....
&s3c_device_dm9000,
};
4.修改文件driver/net/dm9000.c
加入头文件以及宏定义
#include
#include
#define EXTINT0 (0x56000088)
#define EXTINT7_HIGHT (1<<28)
#define INTMSK (0x4A000008)
#define EXTINIT7_OPEN (~(1<<4))
#define EINTMASK (0x560000a4)
static char net_mac_addr[]={0x08,0x00,0x3e,0x21,0xc7,0xf7};
在函数dm9000_probe(struct device *dev)中添加
找到 u32 id_val;在后面添加:
static void *extint0, *intmsk, *eintmsk;
unsigned int value = 0 ;
value = __raw_readl(S3C2410_BWSCON);
value &= ~(S3C2410_BWSCON_WS4|S3C2410_BWSCON_ST4|
S3C2410_BWSCON_DW4_32);
value |= (S3C2410_BWSCON_ST4|S3C2410_BWSCON_DW4_16);
__raw_writel(value , S3C2410_BWSCON);
value = 0 ;
value = (S3C2410_BANKCON_Tacs4 | S3C2410_BANKCON_Tcos4|
S3C2410_BANKCON_Tacc14| S3C2410_BANKCON_Tcoh4|
S3C2410_BANKCON_Tcah4 | S3C2410_BANKCON_Tacp6|
S3C2410_BANKCON_PMCnorm);
__raw_writel(value , S3C2410_BANKCON4);
找到并且注释,完了之后再添加: 初始化网卡地址
/* 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];
*/
/*add*/
for(i=0; i<6 ; i++)
{
ndev->dev_addr[i] = net_mac_addr[i];
}
/*end add*/
在if (!is_valid_ether_addr(ndev->dev_addr))
printk("%s: Invalid ethernet MAC address. Please "
"set using ifconfig\n", ndev->name);
后面添加
/*add here*/
s3c2410_gpio_cfgpin(S3C2410_GPF7, S3C2410_GPF7_EINT7);
extint0 = ioremap_nocache(EXTINT0,4);
writel( (readl(extint0)&0x8fffffff) |EXTINT7_HIGHT, extint0 );
intmsk = ioremap_nocache(INTMSK ,4 );
writel ( readl(intmsk)& (~(1<<4)), intmsk);
eintmsk = ioremap_nocache(EINTMASK , 4);
writel ( readl(intmsk)&(~(1<<7)), eintmsk ) ;
iounmap(intmsk);
iounmap(extint0);
iounmap(eintmsk);
;--------------------------------------------------------
移植完毕:
配置 内核时选中支持DM9000的网卡
可以在System.map中找到 dm9000.o链接进入内核的信息
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.1.22 mask 255.255.255.0
启动信息
dm9000 Ethernet Driver
DM9000 start init.....
eth0: dm9000 at c4910300,c4912304 IRQ 51 MAC: 08:00:3e:21:c7:f7
配置网卡后
IP config
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.1.100
eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
阅读(858) | 评论(0) | 转发(0) |