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,
},
};
然后命令行编译,生成uImage
#make mini2440_defconfig
#make uImage
将uImage映像通过u-boot 下载至nand flash相应的区域。
tftp 30000000 uImage
nand erase.part kernel
nand write 30000000 kernel
重新启动开发板,linux启动成功!
注意:u-boot传入的machi和linux的machid要匹配。不然在启动过程中会卡住( MACH_MINI2440 MINI2440 1999)。