|
简介
1:使用平台
(1)、系统 Red Hat Linux 9
(2)、编译器3.4.1
(3)、linux-2.6.24.1
2:硬件设备
Mini2440 及TE2440
linux移植
1:步骤:
(1)准备工作
(2)修改顶层Makefile
(3)添加分区
(4)添加yaffs补丁
(5) 修改串口时钟
(6) 配置编译内核
(一)、准备工作
建立工作目录,下载源码,安装交叉工具链,步骤如下。
(二)、修改顶层Makefile
修改内核目录树根下的的Makefile,指明体系结构是arm,交叉编译工具是 arm-linux-。
vi Makefile
找到ARCH和CROSS_COMPILE,修改
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
保存退出。
(三)、设置NAND分区、
(1)修改linux-2.6.24.4/arch/arm/plat-s3c24xx中static struct mtd_partition smdk_default_nand_part[]=
{
[0] = {
.name = "boot",
.size = 0x00030000,
.offset = 0,
},
[1] = {
.name = "param",
.offset = 0x00040000,
.size = 0x00020000,
},
[2] = {
.name = "kernel",
.offset = 0x00060000,
.size = 0x00200000,
},
[3] = {
.name = "cramfs",
.offset = 0x260000,
.size = 0xa00000,
},
[4] = {
.name = "yaffs",
.offset = 0xc60000,
.size = 0x73a0000,
},
}
name: 代表分区名字
size: 代表flash分区大小(单位:字节)
offset: 代表flash分区的起始地址(相对于0x0的偏移):
其中第一个分区为u-boot ,第二个为参数,第三个为内核,下面的二个是文件系统。(上面仅供参考)
(2):建立Nand Flash芯片支持
struct s3c2410_platform_nand superlpplatform={
tacls:0,
twrph0:30,
twrph1:0,
sets: &nandset,
nr_sets: 1,
};
(3):指定启动时初始化
kernel启动时依据我们对分区的设置进行初始配置.
arch/arm/mach-s3c2410/mach-smdk2410.c文件
vi mach-smdk2410.c
修改
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&s3c_device_rtc,
//添加如下语句即可
&s3c_device_nand,
};
保存,退出
(4)、禁止Flash ECC校验
我们的内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.
修改drivers/mtd/nand/s3c2410.c 文件:
找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip->eccmode = NAND_ECC_NONE;
(四)、添加yaffs补丁
在 javascript:;下载代码
进入yaffs文件执行:./patch-ker.sh c /home/linux-2.6.24.4/( 内核文件)。
上面命令完成了:
Fs/Kconfig中增加:
source “fs/yaffs2/Kconfig”
obj-$(CONFIG_YAFFS_FS)+=yaffs2
将 yaffs2中的makefile.kernel 复制为fs/yaffs2/Makefile
Kconfig 复制到fs/yaffs2下
复制所有的*.c*.hfs/yaffs2目录中。
(五)、修改平台输入时钟
修改平台的时钟频率,修改内核源码“arch/arm/machs3c2440/
mach-smdk2440.c”,把16934400 改为12000000,因为我们的开发板上为12M
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
//s3c24xx_init_clocks(16934400);
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
(六)修改机器码:
u-boot传递的机器码为1999(为了与原内核一致),修改arch/arm/tools/math-types 3c2440 ARCH_S3C2440 S3C2440 1999
配置过程大家 可以自己尝试一下!