PC机环境:Ubuntu 8.04
交叉编译器:arm-linux-gcc 3.4.5
Linux内核源码包:linux-2.6.24.tar.bz2
=============================================
第一阶段
=============================================
1)、修改Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
2)、将内核的machine id改成和bootloader一至。uboot的mach id为5244,将
include/asm/mach-types.h中的MACH_TYPE_S3C2440定义为:
#define MACH_TYPE_S3C2440 5244
3)、将arch/arm/mach-s3c2440/mach-smdk2440.c中的
s3c24xx_init_clocks(16934400);
改为:
s3c24xx_init_clocks(12000000);
4)、配置及编译内核
先把默认配置文件拷贝过来
cp arch/arm/configs/s3c2410_defconfig .config
配置
Make menuconfig
static struct dm9000_plat_data dm9000_platdata ={
.flags = DM9000_PLATF_16BITONLY,//work in 16bit mode
};
struct platform_device dm9000_device = {
.name = "dm9000",
.id = -1,
.num_resources = 3,
.resource = dm9000_resource,
.dev = {
.platform_data = &dm9000_platdata,
}
};
EXPORT_SYMBOL(dm9000_device);
3)、在arch/arm/mach-s3c2440/mach-smdk2440.c的结构体
static struct platform_device *smdk2440_devices[] __initdata
中添加
&dm9000_device,
变为:
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&dm9000_device,
};
4)、在include/asm-arm/plat-s3c24xx/devs.h 中声明平台设备 eduk_dm9000_device ,在适当位置添加以下内容:
extern struct platform_device dm9000_device;
5)、修改drivers/net/dm9000.c,在前面加上
static void *extint1;
static void *intmsk;
#define EXTINT1 (0x5600008c)
#define INTMSK (0x4A000008)
在dm9000_probe(struct platform_device *pdev)中加上
extint1=ioremap_nocache(EXTINT1,0x0000004);
intmsk=ioremap_nocache(INTMSK,0x0000004);
writel(readl(extint1)|0x40,extint1); //rising edge
writel(readl(intmsk)&0xfff1,intmsk);
重新编译,网口即通。
文章评论(0条评论)
登录后参与讨论