uboot编译说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按照readme 所说的
make NAME_config
make
-------------------------------------------------------------------------
其中NAME_config在根目录的Makefile中,其中包含了很多
NAME_config,代表各个不同的板子。
如果要新添加一块板子的支持,需要在Makefile中新添加一个NAME_config
比如
#########################################################################
## HFRK S3C44B0 Systems
#########################################################################
hfrks3c44b0_config : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 hfrks3c44b0 hfrk
后面的几个参数依次表示ARCH,CPU,BOARD,VENDOR
-------------------------------------------------------------------------
然后跟到mkconfig去看看执行了什么
根据该脚本的注释知道他做了三件事情
1)为变量赋值并输出到./include/config.mk文件的末尾(不要和根目录下面的config.mk搞混) 对于上面的配置项
ARCH = arm
CPU = s3c44b0
BOARD = hfrks3c44b0
/*
9G20板子里的
ARCH = arm
CPU = arm926ejs
BOARD = at91sam9g20ek
VENDOR = atmel
SOC = at91sam9
*/
2)在./include下面建立了几个链接文件
rm -f asm
ln -s asm-$2 asm
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc
ln -s proc-armv asm-$2/proc
fi
也就是
asm/ --->asm-arm
arch-s3c44b0 --->asm-arm/arch
proc-armv ---> asm-arm/proc
3) 生产config.h文件
一般要编译一个软件,要有一个配置文件和一个makefile.u-BOOT底下,配置文件不是动态生成的。
而是手工编写的。文件中包含了很多CFG_xxx CONFIG_xxxx这类的东西,这些在u-boot的README 中
有详细的说明。
看此步骤的脚本:
#
# Create board specific header file
#
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
echo "" >>config.h
echo "#include
exit 0
就是在./include中生成一个config.h文件,该文件中包含了实际的config文件
如上面的配置中:
config.h如下:
include
所以hfrks3c44b0.h才是真正的配置文件,如果要添加一个新板子,要把该板子的
配置文件放入./include/configs/底下,名字就用NAME_config中的NAME。
----------------------------------------------------------------------------------
下面看看根目录下面的config.mk
该文件也配置了一下常用的重要选项
包括
编译器如AS,LD,CC等
一些重要的FLAGS 如CFLAGS CPPFLAGS LDFLAGS.....
由*.s *.c生成*.o的规则
#########################################
%.s: %.S
$(CPP) $(AFLAGS) -o $@ $(CURDIR)/$<
%.o: %.S
$(CC) $(AFLAGS) -c -o $@ $(CURDIR)/$<
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
#############################################
还包含了几个文件
sinclude $(TOPDIR)/$(ARCH)_config.mk PLATFORM_CPPFLAGS += -DCONFIG_ARM -D__ARM__ sinclude $(TOPDIR)/cpu/$(CPU)/config.mk PLATFORM_CPPFLAGS,PLATFORM_RELFLAGS
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk TEXT_BASE , PLATFORM_CPPFLAGS
------------------------------------------------------------------------------------------------
接下来看跟目录下面的Makefile文件,这个是编译u-boot的核心
整个Makefile可以分成下面几个部分:
初始化变量
Include文件
确定要编译的OBJS和LIBS
编译规则(就是说如果编译出Image)
所有的配置项NAME_config ......
clean规则
下面主要看看编译规则部分:
#########################################################################
ALL = u-boot.srec u-boot.bin System.map
all: $(ALL)
u-boot.srec: u-boot
$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
u-boot.bin: u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
u-boot.img: u-boot.bin
./tools/mkimage -A $(ARCH) -T firmware -C none \
-a $(TEXT_BASE) -e 0 \
-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' include/version.h | \
sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \
-d $< $@
u-boot.dis: u-boot
$(OBJDUMP) -d $< > $@