一、建立自己的平台
1.指定交叉编译工具
vim Makefile
在
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
的下面增加
ifeq (arm,$(ARCH))
CROSS_COMPILE ?=arm-none-linux-gnueabi-
endif
2.指定产品CPU
我们的产品是exynos4412
查看u-boot源码 arch/arm/cpu/armv7/exynos/ 可知U-boot已经支持。
3.指定产品的BOARD
找一个类似的board配置修改,这里参考的是board/samsung/origen/
cp -rf board/samsung/origen/ board/samsung/fs4412
mv board/samsung/fs4412/origen.c board/samsung/fs4412/fs4412.c
vim board/samsung/fs4412/Makefile
修改origen.o为fs4412.o
cp include/configs/origen.h include/configs/fs4412.h
vim 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"
4.指定该板子的配置文件
cp configs/origen_defconfig configs/fs4412_defconfig
make fs4412_defconfig
然后执行 ./MAKEALL
在跟目录下面即可以生成boards.cfg //从2014.10版的U-boot开始取消了boards.cfg换使用make menuconfig配置
5.配置boards.cfg
旧的boards.cfg:
(目标) (平台) (芯片) (板子名称) (厂商) (类型) (功能)
Target ARCH CPU Board name Vendor SoC Options
origen arm armv7 origen samsung exynos
fs4412 arm armv7 fs4412 samsung exynos
新的boards.cfg:
# List of boards
# Automatically generated by tools/genboardscfg.py: don't edit//从这里可以看到该文件在新版的U-boot是由genboardscfg.py自动生成的
(状态)(平台)(芯片)(类型) (厂商)(板子名称) (目标)(功能)(维护者)
# Status,Arch,CPU,SoC,Vendor,Board,Target,Options,Maintainers
- arm armv7 exynos samsung origen fs4412 origen
- arm armv7 exynos samsung smdk5420 odroid-xu3 odroid_xu3
Active aarch64 armv8 - armltd vexpress64 vexpress_aemv8a - David Feng <fenghua@phytium.com.cn>
希望是如下:
- arm armv7 exynos samsung fs4412 fs4412
6.编译u-boot
make distclean
make fs4412_config
make
二、实现能看到串口终端信息
1.确认第一条指令有运行到(点灯法)
(1)在arch/arm/cpu/armv7/start.S 134行后添加点灯程序:
/*--------------------------------------------------*/
从底板的原理图可以知道led2的GPIO口为GPX2_7
从Exynos4412 User Manual (Public) version 1.0芯片手册P249可知GPX2_7的地址为0x11000c40(控制寄存器)
/*--------------------------------------------------*/
reset:
bl save_boot_params
/*
* set the cpu to SVC32 mode
*/
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr,r0
#if 1 //添加点灯程序
ldr r0,=0x11000c40 @GPX2_7 led2
ldr r1,[r0]
bic r1,r1,#0xf0000000 @高4位清零
orr r1,r1,#0x10000000 @设置该GPIO口为输出口
str r1,[r0] @将r1的值存储到0x11000c40
ldr r0,=0x11000c44 @数据寄存器的地址
mov r1,#0xff
str r1,[r0] @数据寄存器0-7位置1(亮) 其实只有第七位相应的配置寄存器设为了输出口,所以只有第七位起作用
#endif
(2)添加三星加密方式
exynos需要三星提供的初始化引导加密后,我们的u-boot才能被引导成功。
cp sdfuse_q/ bootloader/u-boot-2013.01 -rf
chmod 777 sdfuse_q -R
cp ../CodeSign4SecureBoot ./ -rf
(3)修改Makefile
(实现sdfuse_q编译)
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@