一:准备工作
1、linux内核2.6.38.7
2、编辑器arm-linux-gcc version 4.2.4 http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/arm-linux-tools-20080623.tar.gz 3、文件系统 yaffs2 http://aleph1.co.uk/gitweb?p=yaffs2.git;a=snapshot;h=HEAD;
4、平台 OK2440-Ⅲ
二、移植内核
1、解压内核
tar –xvf linux-2.6.38.7.tar.gz
2、进入内核目录
cd linux-2.6.38.7
3、修改主目录下Makefile
vim Makefile
在191行
ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 修改为 ARCH ?=arm CROSS_COMPILE ?=arm-linux-
4,修改机器码 # vim arch/arm/tools/mach-types 在379行 s3c2440 ARCH_S3C2440 S3C2440 362 修改为 s3c2440 ARCH_S3C2440 S3C2440 193 与bootloader传入的机器码参数一致即可
5、修改晶振频率( 可解决打印信息乱码问题 ) 文件:arch/arm/mach-s3c2440/mach-smdk2440.c 163行 /*s3c24xx_init_clocks(16934400);*/ s3c24xx_init_clocks(12000000)!
6、修改Nand Flash分区 # vim arch/arm/plat-s3c24xx/common-smdk.c 在109行 static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "Boot", .size = 0x00100000, .offset = 0 }, [1] = { .name = "MyApp", .size = 0x003c0000, .offset = 0x00140000, }, [2] = { .name = "Kernel", .size = 0x00300000, .offset = 0x00500000, }, [3] = { .name = "fs_yaffs", .size = 0x0f000000, //240M .offset = 0x00800000, }, /*[4] = { .name = "WINCE", .size = 0x03c00000, .offset = 0x04400000, } */ };
7、关闭ECC校验 文件:drivers/mtd/nand/s3c2410.c 839行 函数:s3c2410_nand_init_chip /*chip->ecc.mode = NAND_ECC_SOFT; */ chip->ecc.mode = NAND_ECC_NONE; 问题:关于ECC:ECC是“Error Correcting Code”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现 “错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个 电脑系统在工作时更趋于安全稳定。此处为避免容易出错,将ECC关闭。
8、修改nandflash驱动,支持K9F1G08的nandflash 修改drivers/mtd/nand下面的nand_bbt.c 文件: static struct nand_bbt_descr largepage_memorybased = { .options = 0, .offs = 0, .len = 1, // 原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash .pattern = scan_ff_pattern }; static struct nand_bbt_descr largepage_flashbased = { .options = NAND_BBT_SCAN2NDPAGE, .offs = 0, .len = 1, //1285行,原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash .pattern = scan_ff_pattern };