linux内核编译

来源:互联网 发布:周恩来 知乎 编辑:程序博客网 时间:2024/05/16 13:06

一:准备工作

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 ?=armCROSS_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};