分类: 嵌入式
2010-04-15 11:16:39
|
修改Makefile
注释掉以下内容:
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?=
增加如下内容:
ARCH ?= arm
CROSS_COMPILE ?= /work/cross/toolchain/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-
修改arch\arm\mach-s3c2410\devs.c文件
增加头文件定义
/***********add here***********/
#include
#include
#include
/**************end add********/
增加nand flash分区信息
/*****************************add here***************************/
static int chip0_map[] = { 0 };
struct mtd_partition s3c_nand_part[] = {
[0] = {
.name = "Boot Agent",
.size = SZ_256K,
.offset = 0,
},
[1] = {
.name = "Linux Kernel",
.offset = SZ_256K,
.size = SZ_2M - SZ_256K,
},
[2] = {
.name = "File System",
.offset = SZ_2M,
.size = SZ_32M - SZ_2M,
},
[3] = {
.name = "Other",
.offset = SZ_32M,
.size = SZ_32M,
}
};
static struct s3c2410_nand_set s3c_nand_sets[] = {
[0] = {
.name = "chip0",
.nr_chips = 1,
.nr_map = chip0_map,
.nr_partitions = ARRAY_SIZE(s3c_nand_part),
.partitions = s3c_nand_part
}
};
static struct s3c2410_platform_nand s3c_nand_info = {
.tacls = 0,
.twrph0 = 30,
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(s3c_nand_sets),
.sets = s3c_nand_sets,
};
/********************************end add****************************/
添加下面红色部分
struct platform_device s3c_device_nand = {
.name = "s3c2410-nand",
.id = -1,
.num_resources = ARRAY_SIZE(s3c_nand_resource),
.resource = s3c_nand_resource,
/***********add here****************/
.dev = {
.platform_data = &s3c_nand_info
}
/**************end here************/
};
可以交叉编译内核了
make mrproper //清楚所有config信息
make clean //清楚中间代码
make smdk2410_defconfig //使用默认2410配置
make menuconfig //配置
make
内核配置选择:
我在网上找了很久才找到CS8900的原码,现在把它上传,见附件,方便大家使用。我在实验板上试过,CS8900在linux-2.6.15上的移植,很简单,按下面的方法,如果硬件没问题的话,很容易就成功。
1. 拷贝文件cs8900.c cs8900.h到 linux-2.6.15.4/drivers/net/
进入目录cs8900
cp cs8900.c ../linux-2.6.15.4/drivers/net/
cp cs8900.h ../linux-2.6.15.4/drivers/net/
把cs8900.c中#include "asm/arch/smdk2410.h"改为#include "asm/arch/regs-cs8900.h"
2. 修改Kconfig
vi ../linux-2.6.15.4/drivers/net/Kconfig
找到
config NET_ETHERNET
bool "Ethernet (10 or 100Mbit)"
加入以下内容
config ARM_CS8900
tristate "CS8900 support"
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
help
3. 修改Makefile文件
vi ../linux-2.6.15.4/drivers/net/Makefile
找到 obj-$(CONFIG_CS89x0) += cs89x0.o
加入以下内容
obj-$(CONFIG_ARM_CS8900) +=cs8900.o
4.加入cs8900在内存中的位置
在 linux-2.6.15.4/include/asm-arm/arch-s3c2410 中创建regs-cs8900.h ,其内容如下
#ifndef _INCLUDE_REGS_CS8900_H
#define _INCLUDE_REGS_CS8900_H
#include
#define pSMDK2410_ETH_IO 0x19000000
#define vSMDK2410_ETH_IO 0xE0000000
#define SMDK2410_ETH_IRQ IRQ_EINT9
#endif // _INCLUDE_REGS_CS8900_H
pSMDK2410_ETH_IO 的具体地址要参考你的实验板,我的试验板是由nGCS3和A24口组合控制芯片的IO读写或内存读写,在我的开发板上是IO读写。虚拟地址参考了系统板自 带内核中设定的地址,没有改动。看网上有人说虚拟地址可以随便设只要不冲突就行,具体是否可行,没有试过,如果有人试过,告述我一声,大家一块学习。呵 呵...中断源也要看你的试验板连了哪跟中断口。
5 加入cs8900虚拟地址到物理地址的转换
vi linux-2.6.14.1/arch/arm/mach-s3c2410/mach-smdk2410.c
加入头文件
#include
加入地址转换信息, 找到smdk2410_iodesc[]结构数组,加入
{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE},
6 编译内核选择:
Device Drivers --->
Network device support --->
Ethernet (10 or 100Mbit) --->
[*] CS8900 support
到这里,cs8900的移植就完工了。
linux_cmd_line 配置为 console=ttySAC0,115200 men=64M init=/linuxrc root=/dev/nfs nfsroot=192.168.2.2:/work/nfs/rootfsln ip=192.168.2.3:192.168.2.2:192.168.2.255:255.255.255.0:DaiQ:eth0:off