目录
1.前言
本文主要就Hi3556v200的U-boot+Liteos方案的编译流程做简要介绍,主要通过make过程的打印来逐步理清编译的过程,本文主要结合编译的打印信息介绍u-boot-hi3556v200.bin的编译过程
U-boot版本:u-boot-2016.11
2.目标依赖

主要目标依赖关系位于uboot/u-boot-2016.11/arch/arm/cpu/armv7/hi3556v200/hw_compressed/Makefile文件
3.编译流程
3.1 image_data.gzip目标
#主Makefile
BINIMAGE=$(CURDIR)/u-boot.bin TOPDIR=$(CURDIR)
image_data.gzip: $(BINIMAGE)
./gzip -fNqc -7 $< > $@
依赖于编译的通用的uboot.bin
编译命令如下:
./gzip -fNqc -7 /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/u-boot.bin > image_data.gzip
3.2 $(SRC)目标
SSRC := arch/arm/cpu/armv7/$(SOC)/start.S \
arch/arm/cpu/armv7/$(SOC)/reset.S \
arch/arm/cpu/armv7/$(SOC)/uart.S \
arch/arm/cpu/armv7/$(SOC)/init_registers.c \
arch/arm/cpu/armv7/$(SOC)/lowlevel_init_v300.c \
drivers/ddr/hisilicon/default/ddr_training_impl.c \
drivers/ddr/hisilicon/default/ddr_training_ctl.c \
drivers/ddr/hisilicon/default/ddr_training_boot.c \
drivers/ddr/hisilicon/default/ddr_training_console.c \
drivers/ddr/hisilicon/$(SOC)/ddr_training_custom.c \
lib/hw_dec/hw_decompress.c \
lib/hw_dec/hw_decompress_$(SOC).c \
lib/hw_dec/hw_decompress_v1.c \
lib/hw_dec/hw_decompress_v1.h
SSRC += arch/arm/cpu/armv7/$(SOC)/emmc_boot.c \
arch/arm/cpu/armv7/$(SOC)/himci_boot.c \
arch/arm/lib/div0.c
SRC := $(notdir $(SSRC))
编译规则如下:
$(SRC):
ln -sf ../../../../../../$(filter %/$@,$(SSRC)) $@
主要是在uboot/u-boot-2016.11/arch/arm/cpu/armv7/hi3556v200/hw_compressed/下对SSRC 的文件创建软链接,如为drivers/ddr/hisilicon/default/ddr_training_boot.c创建软链接文件名ddr_training_boot.c
3.3 $(START)目标
START := start.o
%.o: %.S
$(CC) -D__ASSEMBLY__ $(CFLAGS) -o $@ $< -c
TEXTBASE := 0x80700000
CFLAGS :=-g -Os -fno-builtin -ffreestanding \
-D__KERNEL__ -DTEXT_BASE=$(TEXTBASE) \
-I$(TOPDIR)/include \
-I$(TOPDIR)/drivers/ddr/hisilicon/default \
-I$(TOPDIR)/drivers/ddr/hisilicon/$(SOC) \
-I$(TOPDIR)/arch/arm/include \
-I$(TOPDIR)/lib/hw_dec \
-fno-pic -ffunction-sections \
-fdata-sections -fno-common -ffixed-r9 \
-fno-common -pipe -march=armv7-a \
-Wall -Wstrict-prototypes -fno-stack-protector \
-D__LINUX_ARM_ARCH__=7 -D__ARM__ \
-DCONFIG_MMC\
$(MKFLAGS) -fno-strict-aliasing
ifeq ($(ENABLE_MINI_BOOT),y)
CFLAGS += -DENABLE_MINI_BOOT
UBOOT_LDS := u-boot-mini.lds
else
CFLAGS += -g
UBOOT_LDS := u-boot.lds
endif
编译start.S文件,生成start.o
3.4 $(COBJS)之%.o目标
COBJS := lowlevel_init_v300.o \
init_registers.o \
uart.o \
ddr_training_impl.o \
ddr_training_ctl.o \
ddr_training_boot.o \
ddr_training_custom.o \
ddr_training_console.o \
startup.o \
image_data.o \
reset.o
%.o: %.c
$(CC) $(CFLAGS) -Wall -Wstrict-prototypes \
-fno-stack-protector -o $@ $< -c
%.o: %.S
$(CC) -D__ASSEMBLY__ $(CFLAGS) -o $@ $< -c
编译$(COBJS)中的文件
3.5 $(COBJS)之image_data.o目标
image_data.S定义如下,它实际是将image_data.gzip文件嵌入到汇编.S文件中
.section .image,#alloc
.globl input_data
/*gzip source addr must be 16 bytes aligned*/
.balign 16
input_data:
.incbin "image_data.gzip"
.globl input_data_end
input_data_end:
根据编译规则,将生成image_data.o文件,它实际包含了通用uboot.bin的压缩文件
image_data.o: image_data.S image_data.gzip
$(CC) -D__ASSEMBLY__ $(CFLAGS) -o $@ $< -c
3.6 $(BOOT).elf目标
$(BOOT).elf: image_data.gzip $(SRC) $(START) $(COBJS)
$

本文介绍Hi3556v200平台U-Boot+Liteos方案的编译流程,涵盖从源码准备到最终生成u-boot-hi3556v200.bin的全过程。详细分析了各编译目标的依赖关系及编译命令。
最低0.47元/天 解锁文章
3464

被折叠的 条评论
为什么被折叠?



