Hi3556v200 u-boot+Liteos方案编译流程分析-5. u-boot-hi3556v200.bin编译过程

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

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)
        $
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值