Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48772
  • 博文数量: 25
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-13 05:50
文章分类

全部博文(25)

文章存档

2011年(5)

2010年(1)

2009年(19)

我的朋友

分类: LINUX

2009-04-25 22:19:14

内核: Linux-2.6.14
硬件平台:S3C2440 DM9000A
;------------------------------------------------------------
参考
http://blog.chinaunix.net/u1/34474/showart_400516.html
http://blog.mcuol.com/User/lvembededsys/article/6856_1.htm
http://blog.chinaunix.net/u2/86355/showart_1832320.html
http://blog.chinaunix.net/u2/89957/showart_1845645.html
;-----------------------------------------------------------
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) |
给主人留下些什么吧!~~