【实验环境】
1、ubuntu 14.04
2、u-boot-2013.01
3、FS_4412平台(EXYNOS 4412)
4、交叉编译器 arm-none-linux-gnueabi-gcc
开始移植:
一、建立自己的平台
1、下载源码 ftp://ftp.denx.de/pub/u-boot/
我们采用的是u-boot-2013.01
2、解压uboot源码并进入目录
把压缩文件拷贝到虚拟机,并解压
$ tar xvf u-boot-2013.01.tar.bz2
$ cd u-boot-2013.013
3、指定交叉编译工具链
$ vim Makefile
把
ifeq ( ( H O S T A R C H ) , (HOSTARCH), (HOSTARCH),(ARCH))
CROSS_COMPILE ?=
#endif
改为
ifeq(arm,$(ARCH))
CROSS_COMPILE ?= arm-none-linux-gnueabi-
#endif
4、指定产品CPU
我们产品用的CPU是 exynos 4412
查看u-boot源码该CPU 是否已支持
U-boot已支持,见 arch/arm/cpu/armv7/exynos
5、指定产品BOARD
找一个最类似的board配置修改, 这里我们参考的是board/samsung/origen/
$ cp -rf board/samsung/origen/ board/samsung/fs4412
$cd board/samsung/fs4412/
$mv origen.c fs4412.c
$ vim board/samsung/fs4412/Makefile
修改origen.o 为 fs4412.o
$ cd include/configs/
$ vi include/configs/fs4412.h
修改
#define CONFIG_SYS_PROMPT “ORIGEN #”
为
#define CONFIG_SYS_PROMPT “fs4412 #”
修改
#define CONFIG_IDENT_STRING for ORIGEN
为
#define CONFIG_IDENT_STRING for fs4412
#vim boards.cfg
参考
origen arm armv7 origen samsung exynos
并在后面新增
fs4412 arm armv7 fs4412 samsung exynos
6、编译u-boot
$ make distclean
$ make fs4412_config
$ make
编译完成后生成的u-boot.bin就是可执行的镜像文件。
但是该文件还不能在我们板子上运行,我们需要对u-boot源代码进行相应的修改。
二、实现能看到串口终端信息
1、确认第一条指令有运行到(点灯法)
在arch/arm/cpu/armv7/start.S 134 行后添加点灯程序
程序从这里启动,添加点灯程序,监控运行
#if 1
ldr r0, =0x11000c40 @GPK2_7 led2
ldr r1, [r0]
bic r1, r1, #0xf0000000
orr r1, r1, #0x10000000
str r1, [r0]
ldr r0, =0x11000c44
mov r1,#0xff
str r1, [r0]
#endif
添加三星加密方式
exynos 需要三星提供的初始引导加密后,我们的u-boot,才能被引导运行
$cp sdfuse_q u-boot-2013.01-rf
注:sdfuse_q 三星提供的加密处理
$cp CodeSign4SecureBoot u-boot-2013.01 -rf
注:CodeSign4SecureBoot 三星提供的安全启动方式
修改Makefile
$vim Makefile
修改实现sdfuse_q的编译
在
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
$(BOARD_SIZE_CHECK)
下添加
@#./mkuboot
@split -b 14336 u-boot.bin bl2
@+make -C sdfuse_q/
@#cp u-boot.bin u-boot-4212.bin
@#cp u-boot.bin u-boot-4412.bin
@#./sdfuse_q/add_sign
@./sdfuse_q/chksum
@./sdfuse_q/add_padding
@rm bl2a*
@echo
注意是tab键缩进的,否则makefile编译报错
注意如果执行了make distclean 需重新拷贝CodeSign4SecureBoot
拷贝编译脚本
$cp build.sh u-boot-2013.01
$chmod 777 u-boot-2013.01/ build.sh
$ ./buildsh
注:build.sh 脚本方式完成自动添加加密方式,
编译生成所需文件u-boot_fs4412.bin
烧写新的u-boot_fs4412.bin
复位,发现灯有点亮,说明我们的u-boot有运行到
2、实现串口输出
修改lowlevel_init.S文件
$vimboard/samsung/fs4412/lowlevel_init.S
添加临时栈
在
lowlevel_init: