u-boot自2010.09版以后有比较大的变化,首先是不再在顶层Makefile中配置板级支持文件,其次是重写了start.S和board.c,还有就是提供了对S3C2440的部分支持,使得在移植时难度减小。但由于是新版本,bug也有不少。本文尝试对u-boot-2011.03进行移植,主要参考了bscbem的日志和L_Backkom的专栏,在此表示感谢。
具体见http://www.linuxidc.com/Linux/2011-02/32772.htm 与 http://www.linuxidc.com/Linux/2011-03/33476.htm
U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htm
1.1 移植环境
u-boot版本:u-boot-2011-03
Linux平台:Fedora 14
交叉编译工具:arm-linux-gcc-4.3.2
arm开发板:micro2440
CPU:S3C2440
SDRAM:64M
Nor Flash:2M
Nand Flash:256M
网卡:DM9000EP
1.2 移植目标
支持Nand启动
支持Nand读写
支持yaffs写入
支持tftp下载
1.3 删减u-boot文件(可不做)
(1)删除arch目录下除arm目录以外的所有目录
(2)删除arm/cpu目录下除arm920tmulu以外的所有目录
(3)删除arch/arm/cpu/arm920t目录下除s3c24x0目录以外的所有目录(文件不要删)
(4)删除arch/arm/include/asm目录下除arch‐s3c24x0外的所有arch‐xxxx目录(文件不要删)
(5)删除board目录下除samsung目录以外的所有目录
(6)删除board/samsung目录下除smdk2410目录以外的所有目录
(7)删除include/configs目录下除smdk2410.h文件以外的所有头文件。
1.4 建立Micro2440配置
(1)[www.linuxidc.com@linuxidc u-boot-2011.03]$ vim boards.cfg
添加一行
micro2440 arm arm920t - samsung s3c24x0
【说明】
我们是基于smdk2410开发板移植,我们仍然将开发板文件建立在board/samsung下
(2)创建板级支持文件
[www.linuxidc.com@linuxidc u-boot-2011.06]$ cp -r board/samsung/smdk2410 board/samsung/micro2440
[www.linuxidc.com@linuxidc u-boot-2011.06]$ cd board/samsung/micro2440/
[www.linuxidc.com@linuxidc micro2440]$ mv smdk2410.c micro2440.c
[www.linuxidc.com@linuxidc micro2440]$ vim Makefile
COBJS := smdk2410.o flash.o改为COBJS := micro2440.o flash.o
[www.linuxidc.com@linuxidc u-boot-2011.06]$ cd ../../..
[www.linuxidc.com@linuxidc u-boot-2011.06]$ cp include/configs/smdk2410.h include/configs/micro2440.h
[www.linuxidc.com@linuxidc u-boot-2011.03]$ vim include/configs/micro2440.h
修改一:
#define CONFIG_SYS_PROMPT "[Micro2440]# " /* Monitor Command Prompt */
修改二:
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - GENERATED_GBL_DATA_SIZE)
【说明】
如果不定义修改二的内容,编译时就会出错,这是新版本的一个bug。
这里需要注意,直接复制内容到micro2440.h可能导致make通不过,提示有garbage,我想可能是因为windows和Linux回车编码不同造成的。
(3)测试编译环境
[www.linuxidc.com@linuxidc u-boot-2011.06]$ make micro2440_config
Configuring for micro2440 board...
[www.linuxidc.com@linuxidc u-boot-2011.06]$ make
Generating include/autoconf.mk
Generating include/autoconf.mk.dep
......
......
arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin