希望这篇文章,能为那些正在学习Linux内核移植的朋友提供参考。 本文转引自 飞凌嵌入式 FL2440技术交流专区 www.witech.com.cn, 感谢作者japleak的无私奉献。
参考:http://bbs.witech.com.cn/thread-468-1-1.html 宿主机:Redhat Linux AS4 目标机:s3c2440 交叉编译器:arm-linux-gcc-3.4.1 交叉编译器路径:/usr/local/arm/3.4.1 要移植的内核版本:linux-2.6.33 文件系统类型: yaffs2 (目前使用光盘中linux-2.6.28的文件系统touch.yaffs) 笔记作者:japleak
1、 下载内核linux-2.6.33.tar.gz(http://www.kernel.org/pub/linux/kernel/v2.6/linux-
2.6.33.tar.gz 中可以找到),然后还需要下载yaffs2文件系统,目的是为了给内核打补丁。下载地址
为:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2.tar.gz?view=tar (此步骤很重要,如果
yaffs2不正确,可能引起无法正常编译通过)。 2、 将下载的文件存放在/usr/src/中。 3、 分别解压缩: [root@WEB188 src]# tar xzf linux-2.6.33.tar.gz [root@WEB188 src]# tar xzf yaffs2.tar.gz 4、 为内核增加yaffs2补丁 [root@WEB188 src]# cd yaffs2 [root@WEB188 yaffs2]# ./patch-ker.sh c ../linux-2.6.33/ Updating ../linux-2.6.33//fs/Kconfig Updating ../linux-2.6.33//fs/Makefile 5、 修改机器码。进入内核目录,修改机器码跟bootloader的机器码一致(FL2440为193) [root@WEB188 yaffs2]# cd ../linux-2.6.33 [root@WEB188 linux-2.6.33]#vi arch/arm/tools/mach-types 首先删除以下行: s3c2410 ARCH_S3C2410 S3C2410 182 然后将以下行: s3c2440 ARCH_S3C2440 S3C2440 362 修改为: s3c2440 ARCH_S3C2440 S3C2440 193 6、 指定目标板machine、编译器和编译器路径。修改Makefile文件,注意将CROSS_COMPILE对应到
你系统中交叉编译器地址 [root@WEB188 yaffs2]# vi Makefile 将两行: ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 修改为以下两行: ARCH ?= arm CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux- 7、 增加devfs文件管理器的支持。 [root@WEB188 linux-2.6.33]# vi fs/Kconfig 找到以下行: menu "Pseudo filesystems" 在此行后面增加以下内容: config DEVFS_FS bool "/dev file system support (OBSOLETE)" default y config DEVFS_MOUNT bool "Automatically mount at boot" default y depends on DEVFS_FS 8、 修改晶振频率( 可解决打印信息乱码问题 )。修改文件arch/arm/mach-s3c2440/mach-
smdk2440.c [root@WEB188 linux-2.6.33]# vi arch/arm/mach-s3c2440/mach-smdk2440.c 将如下行: s3c24xx_init_clocks(16934400); 修改为: s3c24xx_init_clocks(12000000); 9、 修改MTD分区。打开文件arch/arm/plat-s3c24xx/common-smdk.c,此处注意两个地方:一、必
须跟bootloader分区一样,二、文件系统fs_yaffs必须在第4个分区,即索引号为3。其他一些分区信息
可以不要,如下: [root@WEB188 linux-2.6.33]# vi arch/arm/plat-s3c24xx/common-smdk.c 找到static struct mtd_partition smdk_default_nand_part[]的结构体,将内容修改为: [0] = { .name = "boot", .size = 0x00020000, .offset = 0 }, [1] = { .name = "bootParam", .size = 0x00060000, .offset = 0x00020000, }, [2] = { .name = "Kernel", .size = 0x00300000, .offset = 0x00500000, }, [3] = { .name = "fs_yaffs", .size = 0x03c00000, .offset = 0x00800000, }, [4] = { .name = "eboot", .size = 0x00080000, .offset = 0x04400000, }, [5] = { .name = "WINCE", .size = 0x03b80000, .offset = 0x04480000, } 10、 关闭ECC校验。修改文件drivers/mtd/nand/s3c2410.c [root@WEB188 linux-2.6.33]# vi drivers/mtd/nand/s3c2410.c 将以下行: chip->ecc.mode = NAND_ECC_SOFT; 修改为: chip->ecc.mode = NAND_ECC_NONE; 11、 修改nandflash驱动,支持K9F1G08的nandflash。文件为:drivers/mtd/nand/nand_bbt.c [root@WEB188 linux-2.6.33]# vi drivers/mtd/nand/nand_bbt.c 将以下两个部分进行修改 static struct nand_bbt_descr largepage_memorybased = { .options = 0, .offs = 0, .len = 1, //原始值为2,改成1 .pattern = scan_ff_pattern }; static struct nand_bbt_descr largepage_flashbased = { .options = NAND_BBT_SCAN2NDPAGE, .offs = 0, .len = 2, //原始值为2,改成1 .pattern = scan_ff_pattern };
|