Hi3556v200 u-boot+Liteos方案编译流程分析-7. liteos编译流程

1.前言

本文主要就Hi3556v200的U-boot+Liteos方案的编译流程做简要介绍,主要通过make过程的打印来逐步理清编译的过程,本文主要结合编译的打印信息介绍liteos的编译流程
U-boot版本:u-boot-2016.11

2. 编译流程

# osdrv/Makefile
##########################################################################################
##task [2] make liteos
##########################################################################################
liteos:prepare
        echo "------- task [2] build liteos -------"
ifneq ($(OSDRV_DIR)/platform/liteos/liteos, $(wildcard $(OSDRV_DIR)/platform/liteos/liteos))
        pushd $(OSDRV_DIR)/platform/liteos;tar -xzf liteos.tgz -C .;popd
endif
        if [ $(CHIP) == "hi3559v200" ];then\
                ./osdrv_mem_cfg.sh liteos $(CHIP);\
        fi;
        if [ $(CHIP) == "hi3556v200" ];then\
                ./osdrv_mem_cfg.sh liteos $(CHIP);\
        fi;
        pushd $(OSDRV_DIR)/platform/liteos/liteos;cp tools/build/config/$(CHIP)_defconfig .config;make savemenuconfig;make clean;make -j;popd
        pushd $(OSDRV_DIR)/platform/liteos/liteos/sample/sample_osdrv;make;cp sample.bin $(OSDRV_DIR)/pub/liteos/sample.bin;popd

2.1 osdrv_mem_cfg.sh

首先通过osdrv_mem_cfg.sh脚本进行配置,此部分已经介绍

2.2 编译config

根据芯片类型将$(CHIP)_defconfig拷贝生成.config文件

2.3 编译lib

进入osdrv/platform/liteos/liteos目录, Makefile定义如下:

all: $(OUT) $(BUILD) $(LITEOS_LIBS_TARGET)

$(OUT): $(LITEOS_MENUCONFIG_H)
        $(HIDE)mkdir -p $(OUT)/lib
        $(HIDE)$(CC) -E $(LITEOSTOPDIR)/platform/bsp/board/$(LITEOS_PLATFORM)/board.ld.S -o $(LITEOSTOPDIR)/platform/bsp/board/$(LITEOS_PLATFORM)/board.ld -P

$(BUILD):
        $(HIDE)mkdir -p $(BUILD)

$(LITEOS_LIBS_TARGET): $(__LIBS)
        $(HIDE)for dir in $(LIB_SUBDIRS); \
                do $(MAKE) -C $$dir all || exit 1; \
        done
        $(HIDE)echo "=============== make lib done  ==============="

$(__LIBS): $(OUT) $(CXX_INCLUDE)

__LIBS = libs

通过编译$(LITEOS_LIBS_TARGET)目标,遍历每个目录下的Makefile,然后进行编译,最终将各个目录下编译出.a的静态库

关于lib编译更加详细的文档请参考:鸿蒙开发系统教程之Liteos-a编译系统分析

2.4 编译sample.bin

进入osdrv/platform/liteos/liteos/sample/sample_osdrv

SAMPLE_OUT = .

SRCS := $(wildcard *.c)

OBJS := $(patsubst %.c,$(SAMPLE_OUT)/%.o,$(SRCS))

all: $(OBJS)
        $(LD) $(LITEOS_LDFLAGS) --gc-sections -Map=$(SAMPLE_OUT)/sample.map -o $(SAMPLE_OUT)/sample $(OBJS) $(LITEOS_LIBDEPS) $(LITEOS_TABLES_LDFLAGS)
        $(OBJCOPY) -O binary $(SAMPLE_OUT)/sample $(SAMPLE_OUT)/sample.bin
        $(OBJDUMP) -d $(SAMPLE_OUT)/sample >$(SAMPLE_OUT)/sample.asm

其中LITEOS_LIBDEP 定义如下:

#platform/liteos/liteos/config.mk 
LITEOS_LIBDEP   := $(LITEOS_BASELIB)

而platform/liteos/liteos/build/mk/los_config.mk文件
主要对LITEOS_BASELIB变量进行赋值,如LITEOS_BASELIB += -lgpio,这样就看到很多的库链接参数

最终打印如下:

arm-himix400-linux-ld  -nostartfiles -static --gc-sections       -L../../tools/scripts/ld -L../../platform/bsp/board/hi3556v200 -L../../out/hi3556v200/lib -L../../out/hi3556v200/lib/obj -L../../tools/build -L/opt/hisi-linux/x86-arm/arm-himix400-linux/lib/gcc/arm-himix400-linux/7.3.0/a7_softfp_neon-vfpv4 -L/opt/hisi-linux/x86-arm/arm-himix400-linux/arm-himix400-linux/lib/a7_softfp_neon-vfpv4 -T../../liteos.ld --gc-sections -Map=./sample.map -o ./sample ./sample.o --start-group  -lgcc -lgcc_eh -lcortex-a7 -lbsp -lbase -lcpup -ldynload -lrunstop -ltickless -lcsysdeps -lc -lsec -lm -lsupc++ -lcppsupport -lstdc++ -lz -lposix -llinux -lvfs -lmulti_partition -lbch -lfat -lfsck -lbcache -lramfs -lyaffs2 -lnfs -lproc -ljffs2 -lromfs -llwip -ldriverbase -lgpio -li2c -lmem -lmmc -lmtd_common -lnand_flash -lspinor_flash -lrandom -lrtc -lspi -luart -luart -lusb_base -lusb_device -lvideo -ldisk -lshell --end-group -utask_shellcmd -ucpup_shellcmd -uhelp_shellcmd -ufree_shellcmd -usem_shellcmd -umutex_shellcmd -uqueue_shellcmd -usysteminfo_shellcmd -uswtmr_shellcmd -uhwi_shellcmd -ufindsym_shellcmd -uzbar_scan_shellcmd -udmesg_shellcmd -udate_shellcmd -ureadExcInfo_shellcmd -uwatch_shellcmd -udeadlock_shellcmd -uarp_shellcmd -utelnet_shellcmd -ucd_shellcmd -uformat_shellcmd -upartition_shellcmd -uwriteproc_shellcmd -upartinfo_shellcmd -uumount_shellcmd -umount_shellcmd -uvirstatfs_shellcmd -ulsfd_shellcmd -ufatfsck_shellcmd -uiperf_shellcmd -ulwip_dump_shellcmd -ureset_shellcmd -ustartap_shellcmd -uhimd_shellcmd -uhiddrs_shellcmd -unand_bad_shellcmd -ui2c_read_shellcmd -ussp_read_shellcmd -uuart_config_shellcmd -uusb_debug_shellcmd -uramfs_fsmap -unfs_fsmap -ufat_fsmap -uyaffs_fsmap -uromfs_fsmap -ug_fsmap -ui2c_init -ugpio_init -uregulator_init -umtd_init_list -uhispi_init -uhifmc100_init -uhisfc350_init -unand_hifmc100_init -uhifmc100_parallel_init -usd_mci_init -uhi_mci_init -upl011_init -uhinfc620_init -uhisnfc100_init -uregulator_machine_init -uhisimeidia_regulator_init -ucpufreq_init -uhisilicon_cpufreq_init -ucpufreq_machine_init -udevfreq_init -umedia_devfreq_init -udevfreq_machine_init -uhieth_machine_init -uhigmac_machine_init -ujffs_fsmap -uprocfs_fsmap -ug_fsmap_wow -ui2c_init -ugpio_init -uregulator_init -umtd_init_list -uhispi_init -uhifmc100_init -uhisfc350_init -unand_hifmc100_init -uhifmc100_parallel_init -usd_mci_init -uhi_mci_init -upl011_init -uhinfc620_init -uhisnfc100_init -uregulator_machine_init -uhisimeidia_regulator_init -ucpufreq_init -uhisilicon_cpufreq_init -ucpufreq_machine_init -udevfreq_init -umedia_devfreq_init -udevfreq_machine_init -uhieth_machine_init -uhigmac_machine_init -ug_fsmap_scatter -ui2c_init -ugpio_init -uregulator_init -umtd_init_list -uhispi_init -uhifmc100_init -uhisfc350_init -unand_hifmc100_init -uhifmc100_parallel_init -usd_mci_init -uhi_mci_init -upl011_init -uhinfc620_init -uhisnfc100_init -uregulator_machine_init -uhisimeidia_regulator_init -ucpufreq_init -uhisilicon_cpufreq_init -ucpufreq_machine_init -udevfreq_init -umedia_devfreq_init -udevfreq_machine_init -uhieth_machine_init -uhigmac_machine_init

可以看到链接sample.o与Liteos lib库,可以看到是静态链接

arm-himix400-linux-objcopy -O binary ./sample ./sample.bin
arm-himix400-linux-objdump -d ./sample >./sample.asm

生成binary文件和汇编文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值