1.基本开发环境
U-boot版本:u-boot-2012.04.01 (假设U-boot已经移植好)
Linux平台:虚拟机下ubuntu 14.04
交叉编译工具:gcc-4.4.3
arm开发板:mini2440(CPU:S3C2440 ,SDRAM:64M,Nor Flash:2M,Nand Flash:256M,网卡:DM9000EP)
2.下载linux源码
在linux官网 https://www.kernel.org/ 下载最新源码linux-3.15.2.tar ,解压。
3.移植
一般源码移植首先会在最顶层的Makefile中指定处理器平台和交叉编译工具。用vim工具打开,修改:ARCH ?= arm 和CROSS_COMPILE ?= arm-linux-这两行。
由于mini2440开发板在该内核版本中已经有默认配置文件(mini2440_defconfig),选用默认配置。基本功能的移植,改动较小。
根据u-boot设置分区,修改nand flash 分区(arch/arm/mach-s3c24xx/mach-mini2440.c),比如我的分区结构
static struct mtd_partition mini2440_default_nand_part[] __initdata = { [0] = { .name = "u-boot", .size = SZ_256K, .offset = 0, }, [1] = { .name = "u-boot-env", .size = SZ_128K, .offset = SZ_256K, }, [2] = { .name = "kernel", /* 5 megabytes, for a kernel with no modules * or a uImage with a ramdisk attached */ .size = 0x00400000, .offset = SZ_256K + SZ_128K, }, [3] = { .name = "root", .offset = SZ_256K + SZ_128K + 0x00400000, .size = MTDPART_SIZ_FULL, }, };
#make mini2440_defconfig #make uImage
tftp 30000000 uImage nand erase.part kernel nand write 30000000 kernel
注意:u-boot传入的machi和linux的machid要匹配。不然在启动过程中会卡住( MACH_MINI2440 MINI2440 1999)。