首页 / 操作系统 / Linux / ARM Linux移植攻略之Linux 2.6.30.4移植TE2440II开发板
宿主机:Ubuntu9.10
目标机:s3c2440
交叉编译器:arm-linux-gcc-4.3.2
交叉编译器路径:/usr/local/arm/4.3.2
要移植的内核版本:linux-2.6.30.4
文件系统类型: yaffs2步骤包括:1)给linux内核打上yaffs2补丁2)修改机器码3)修改目标板的arch和编译器路径,4)增加devfs文件管理器支持5)修改晶振频率6)修改MTD分区7)关闭ECC校验8)修改nandflash驱动9)配置内核首先,从官网上下载linux-2.6.30.4的内核。
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/可以找到。新建目录mkdir /home/haker,将内核源码包解压到hacker/目录下tar –zxvf linux-2.6.30.4.tar.gz1)给内核打jaffs2补丁 下载最新的驱动 http://www.linuxidc.com/Linux/2011-06/37643.htm解压到/home/hacker/下tar –zxvf yaffs2.tar.gz进入目录cd yaffs2给内核打补丁./patch-ker.sh c /home/hacker/linux-2.6.30.4加上c 他会自动解压到后面的目录中成功后会打印信息:Updating /home/hacker/linux-2.6.30.4/fs/KconfigUpdating /home/hacker/linux-2.6.30.4/fs/Makefile2)修改机器码暂时我使用的是飞凌的boot,自己的boot还没有完全做好,飞凌boot的默认机器码是193,修改arch/arm/tools/mach-types,将s3c2410 ARCH_S3C2410 S3C2410 193 删掉然后将 s3c2440 ARCH_S3C2440 S3C2440 362修改为
s3c2440 ARCH_S3C2440 S3C2440 1933)修改目标板的arch和编译器路径修改linux/2.6.30.4下的Makefile将ARCH ?= $(SUBARCH)CROSS_COMPILE ?= 修改成ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux-4)增加devfs文件管理器支持修改fs/Kconfig,找到menu “Pseudo filesystems” 添加config DEVFS_FS bool “/dev file system support (OBSOLETE)” default yconfig DEVFS_MOUNTbool “Automatially mount at bool”default depends on DEVFS_FS5)修改晶振频率arch/arm/mach-s3c2440/mach-smdk2440.c/*s3c24xx_init_clocks(16934400);*/ s3c24xx_init_clocks(12000000); 6)修改MTD分区,由于自己的uboot还没有完全做好,暂时用飞凌的boot的分区,修改文件arch/arm/plat-s3c24xx/common-smdk.cstatic 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 = 0x03c00000, //60M .offset = 0x00800000, }, [4] = { .name = "WINCE", .size = 0x03c00000, .offset = 0x04400000, }};7)关闭ECC校验文件drivers/mtd/nand/s3c2410.c函数:s3c2410_nand_init_chip/*chip->ecc.mode = NAND_ECC_SOFT; */ chip->ecc.mode = NAND_ECC_NONE;这个有两个 软件校验和硬件校验都要关掉8)修改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, //原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash .pattern = scan_ff_pattern};9)配置内核make menuconfig首先加载s3c24xx系列的通用配置,然后在此基础上修改配置完后将配置文件保存为.config,这样方便下次make menuconfig时默认加载上次配置过的文件 交叉编译内核make zImage如果没有任何错误,编译出来的内核在arch/arm/boot/目录下,文件zImage即是。