本文选自:http://blog.csdn.net/baozhongchao/article/details/4538182
- 特别说明:本人是按第二种方法移植的,因为我受宋宝华老师的影响很深。他说过,移植的时候,跟CPU无关的驱动 ,即跟平台有关的驱动,应该只在板文件中修改。这里,我们只需要修改DM9000平台对应设备的寄存器和数据址进行赋值,并指定正确的IRQ资源即可。
在arch/arm/plat-s3c24xx/devs.c(也可做在arch/arm/mach-s3c2440/mach-smdk2440.c中的)
中加入DM9000A的端口及设备说明,仿照前面的设备添加就是了,结构都一样就是值不同。
static struct resource s3c_dm9k_resource[] = {
//dm9000a的片选我的板子接的是nGCS3,这里没有加300的基址
.start = IRQ_EINT9, //根据电路图接的是EINT9管脚
// .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, //at2440evb中的设置
static struct dm9000_plat_data s3c_device_dm9k_pdata = {
// .flags = (DM9000_PLATF_16BITONLY|DM9000_PLATF_NO_EEPROM), //at2440evb中的设置
.flags = DM9000_PLATF_16BITONLY
static struct platform_device s3c_device_dm9k = {
.num_resources = ARRAY_SIZE(s3c_dm9k_resource),
.resource = s3c_dm9k_resource,
.platform_data = &s3c_device_dm9k_pdata,
EXPORT_SYMBOL(s3c_device_dm9k);
c) arch/arm/plat-s3c24xx/include/plat/devs.h中添加网卡声明
extern struct platform_device s3c_device_dm9k;
d) arch/arm/mach-s3c2440/ mach-s3c2440.c中将dm9000a加到平台设备初始化列表中
static struct platform_device *smdk2440_devices[] __initdata = {
e) 在drivers/net/dm9000.c开头中添加
#define EINTMASK (0x560000a4) //外部中断屏蔽
#define EXTINT1 (0x5600008c) //外部中断方式
#define INTMSK (0x4a000008) //中断屏蔽
在dm9000_probe()中ret = register_netdev(ndev); 1392行,之前添加
memcpy(ndev->dev_addr,"/oandy1",6);
extint1 =ioremap_nocache(EXTINT1,0x00000004);
intmsk =ioremp_nocache(INTMSK,4);
s3c2410_gpio_cfgpin(s3c2410_GPG1,s3c2410_GPG1_EINT9); //设置GPG1为中断功能
writel(readl(extint1)|0x40,extint1); //中断为上升沿
writel(readl(intmsk)&0xfff1,intmsk);
f) 第二种方案是直接参考/arch/arm/mach-s3c2440/mach-at2440evb.c进行修改,我按照此方案更改完全有效。
i. 修改/arch/arm/mach-s3c2440/mach-smdk2440.c拷贝/arch/arm/mach-s3c2440/mach-at2440evb.c中关于DM9000AEP的代码进行修改:
static struct resource s3c_dm9k_resource[] = {
.start = S3C2410_CS3 + 4,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
static struct dm9000_plat_data s3c_dm9k_pdata = {
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
static struct platform_device s3c_device_dm9k = {
.num_resources = ARRAY_SIZE(s3c_dm9k_resource),
.resource = s3c_dm9k_resource,
.platform_data = & s3c_dm9k_pdata,
这段代码加在static struct platform_device *smdk2440_devices[] __initdata之前,修改设备初始化
static struct platform_device *smdk2440_devices[] __initdata = {
g) 修改根文件系统/etc/init.d/rcS配置网卡,增加下面的代码
ifconfig eth0 hw ether 08:00:3e:26:0a:5b
ifconfig eth0 192.168.1.70
route add default gw 192.168.1.1
|