Hi3556v200 u-boot+Liteos方案编译流程分析-1.总体编译流程

本文详细介绍了基于Hi3556v200平台的U-Boot和LiteOS的编译流程,包括编译准备、配置内存地址、编译通用U-Boot、编译特定U-Boot、编译PC工具以及编译LiteOS等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前言

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

2. 开启编译打印

为了能够打印出编译命令和编译信息,需要对Makefile做如下修改
在这里插入图片描述

编译命令如下:
make osdrv V=1 > make.txt 2>&1
通过查看make.txt文件,对照Makefile及链接脚本来理解编译流程

3. 编译过程

3.1 编译准备

make[1]: Entering directory `/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv'

第一次进入osdrv,执行osdrv下面的Makefile

------ task [0] prepare pub dir -------
mkdir /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/pub/boot -p
mkdir /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/pub/tools -p
mkdir /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/pub/liteos -p

创建pub下的文件夹,用于存放编译结果

---------task [0]    hiregbin_prepare
tar xzf /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1.tgz -C /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools
chmod 777 /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1/hiregbin
cp /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/Hi3556V200-DMEB-DDR3_1800M_16bit_128MB-A7_900M-SYSBUS_300M.xlsm /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1
pushd /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1;./hiregbin Hi3556V200-DMEB-DDR3_1800M_16bit_128MB-A7_900M-SYSBUS_300M.xlsm reg_info_hi3556v200.bin;popd
~/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1 ~/Hi3559V200_SmartCam_V5.0.0.1/osdrv
Generate regbin file successfully.
~/Hi3559V200_SmartCam_V5.0.0.1/osdrv
mv /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1/reg_info_hi3556v200.bin /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools
rm /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/hiregbin-v5.0.1 -rf

为海思regbin文件编译作准备

---------task [1]	build boot
pushd /data_old/xxxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot;tar xzf secureboot_release.tgz -C .;popd
~/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot ~/Hi3559V200_SmartCam_V5.0.0.1/osdrv
~/Hi3559V200_SmartCam_V5.0.0.1/osdrv
find /data_old/xxxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11 | xargs touch

进入u-boot目录,解压secureboot_release.tgz到当前目录

3.2 config的编译流程

make[2]: Entering directory `/data_old/xxxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第一次进入u-boot主目录

make -f ./scripts/Makefile.build obj=scripts/basic
  cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer      -o scripts/basic/fixdep scripts/basic/fixdep.c  
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig hi3556v200_config
  cc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer    -D_GNU_SOURCE -DCURSES_LOC="<ncurses.h>" -DLOCALE   -c -o scripts/kconfig/conf.o scripts/kconfig/conf.c
  cc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer    -D_GNU_SOURCE -DCURSES_LOC="<ncurses.h>" -DLOCALE  -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c
  cc  -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o  
scripts/kconfig/conf  --defconfig=arch/../configs/hi3556v200_defconfig Kconfig
#
# configuration written to .config
#

编译hi3556v200_config
可以看到在执行了make hi3556v200_config之后,主要生成了如下文件:
1.在根目录下生成.config文件;
2.在scripts/basic下生成fixdep工具
3.在scripts/kconfig下生成conf工具

make[2]: Leaving directory `/data_old/xxxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第一次离开u-boot主目录,回到osdrv/Makefile

3.3 配置内存地址

if [ hi3556v200 == "hi3559v200"  ];then\
		./osdrv_mem_cfg.sh uboot hi3556v200;\
	fi;
if [ hi3556v200 == "hi3556v200"  ];then\
		./osdrv_mem_cfg.sh uboot hi3556v200;\
	fi;
UBOOT_TEXT_BASE:0x80800000
UBOOT_CFG_DDR_SIZE:0x8000000
LITEOS_SYS_MEM_BASE:0x80000000
MEM_HUAWEILITE_SYS_SIZE:0x01e00000
LITEOS_MMZ_MEM_BASE:0x82100000
LITEOS_MMZ_MEM_SIZE:0x5f00000
LITEOS_TEXT_OFFSET:0x00000000
LITEOS_DDR_MEM_SIZE:0x8000000
[32;1mconfig uboot...[0m

主要对内存的运行时地址进行划分

3.4 u-boot.bin的编译过程

pushd /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11;make ARCH=arm CROSS_COMPILE=arm-himix400-linux- -j 20;popd

第二次准备进入u-boot主目录,执行主Makefile默认目标

make[2]: Entering directory `/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第二次进入u-boot主目录

make -f ./Makefile silentoldconfig
make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig silentoldconfig
mkdir -p include/config include/generated
scripts/kconfig/conf  --silentoldconfig Kconfig


make -f ./scripts/Makefile.autoconf || \
		{ rm -f include/config/auto.conf; false; }

进入scripts/Makefile.autoconf

if [ -d arch/arm/mach-hi3556v200/include/mach ]; then	\
		dest=../../mach-hi3556v200/include/mach;			\
	else								\
		dest=arch-hi3556v200;			\
	fi;								\
	ln -fsn $dest arch/arm/include/asm/arch

创建软连接到arch/arm/include/asm/arch,source为arch/arm/include/asm/arch-hi3556v200, 里面保存了SOC的地址空间范围

set -e; : '  CHK     include/config.h'; mkdir -p include/; 	(echo "/* Automatically generated - do not edit */"; for i in $(echo "" | sed 's/,/ /g'); do echo \#define CONFIG_$i | sed '/=/ {s/=/	/;q; } ; { s/$/	1/; }'; done; echo \#define CONFIG_BOARDDIR board/hisilicon/hi3556v200; echo \#include \<config_defaults.h\>; echo \#include \<config_uncmd_spl.h\>; echo \#include \<configs/"hi3556v200".h\>; echo \#include \<asm/config.h\>; echo \#include \<config_fallbacks.h\>;) < scripts/Makefile.autoconf > include/config.h.tmp; if [ -r include/config.h ] && cmp -s include/config.h include/config.h.tmp; then rm -f include/config.h.tmp; else : '  UPD     include/config.h'; mv -f include/config.h.tmp include/config.h; fi

位于Kbuild.include,主要是检查include/config.h文件是否需要更新,http://blog.chinaunix.net/uid-26009923-id-3195981.html

arm-himix400-linux-gcc -E -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -Os -fno-stack-protector -fno-delete-null-pointer-checks -g -fstack-usage -Wno-format-nonliteral -Werror=date-time  -D__KERNEL__ -D__UBOOT__   -D__ARM__ -marm -mno-thumb-interwork  -mabi=aapcs-linux  -mword-relocations  -fno-pic  -mno-unaligned-access  -ffunction-sections -fdata-sections -fno-common -ffixed-r9  -msoft-float   -pipe -Iinclude  -I./arch/arm/include -include ./include/linux/kconfig.h  -nostdinc -isystem /opt/hisi-linux/x86-arm/arm-himix400-linux/host_bin/../lib/gcc/arm-linux-gnueabi/7.3.0/include  -DDO_DEPS_ONLY -dM ./include/common.h > u-boot.cfg.tmp && { grep 'define CONFIG_' u-boot.cfg.tmp > u-boot.cfg; rm u-boot.cfg.tmp; } || { rm u-boot.cfg.tmp; false; }

编译include/u-boot.cfg

arm-himix400-linux-gcc -x c -DDO_DEPS_ONLY -M -MP -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -Os -fno-stack-protector -fno-delete-null-pointer-checks -g -fstack-usage -Wno-format-nonliteral -Werror=date-time  -D__KERNEL__ -D__UBOOT__   -D__ARM__ -marm -mno-thumb-interwork  -mabi=aapcs-linux  -mword-relocations  -fno-pic  -mno-unaligned-access  -ffunction-sections -fdata-sections -fno-common -ffixed-r9  -msoft-float   -pipe -Iinclude  -I./arch/arm/include -include ./include/linux/kconfig.h  -nostdinc -isystem /opt/hisi-linux/x86-arm/arm-himix400-linux/host_bin/../lib/gcc/arm-linux-gnueabi/7.3.0/include -MQ include/config/auto.conf ./include/common.h > include/autoconf.mk.dep || { rm include/autoconf.mk.dep; false; }

编译include/autoconf.mk.dep

 sed -n -f ./tools/scripts/define2mk.sed u-boot.cfg | while read line; do if [ -n "" ] || ! grep -q "${line%=*}=" include/config/auto.conf; then echo "$line"; fi done > include/autoconf.mk
touch include/config/auto.conf

由u-boot.cfg生成include/autoconf.mk

make[2]: Leaving directory `/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第二次离开u-boot主目录

make[2]: Entering directory `/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第三次进入u-boot主目录

set -e; : '  CHK     include/config/uboot.release'; mkdir -p include/config/; 	echo "2016.11$(/bin/sh ./scripts/setlocalversion .)" < include/config/auto.conf > include/config/uboot.release.tmp; if [ -r include/config/uboot.release ] && cmp -s include/config/uboot.release include/config/uboot.release.tmp; then rm -f include/config/uboot.release.tmp; else : '  UPD     include/config/uboot.release'; mv -f include/config/uboot.release.tmp include/config/uboot.release; fi

检查include/config/uboot.release版本

set -e; : '  CHK     include/generated/timestamp_autogenerated.h'; mkdir -p include/generated/; 	(if test -n "${SOURCE_DATE_EPOCH}"; then SOURCE_DATE="@${SOURCE_DATE_EPOCH}"; DATE=""; for date in gdate date.gnu date; do ${date} -u -d "${SOURCE_DATE}" >/dev/null 2>&1 && DATE="${date}"; done; if test -n "${DATE}"; then LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; LC_ALL=C ${DATE} -u -d "${SOURCE_DATE}" +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; else return 42; fi; else LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; LC_ALL=C date +'#define U_BOOT_TIME "%T"'; LC_ALL=C date +'#define U_BOOT_TZ "%z"'; LC_ALL=C date +'#define U_BOOT_DMI_DATE "%m/%d/%Y"'; fi) < Makefile > include/generated/timestamp_autogenerated.h.tmp; if [ -r include/generated/timestamp_autogenerated.h ] && cmp -s include/generated/timestamp_autogenerated.h include/generated/timestamp_autogenerated.h.tmp; then rm -f include/generated/timestamp_autogenerated.h.tmp; else : '  UPD     include/generated/timestamp_autogenerated.h'; mv -f include/generated/timestamp_autogenerated.h.tmp include/generated/timestamp_autogenerated.h; fi

检查include/generated/timestamp_autogenerated.h

make -f ./scripts/Makefile.build obj=scripts/basic

./scripts/Makefile.build包含scripts/basic下的Makefile,并执行./scripts/Makefile.build的__build目标

rm -f .tmp_quiet_recordmcount
set -e; : '  CHK     include/generated/version_autogenerated.h'; mkdir -p include/generated/; 	(echo \#define PLAIN_VERSION \"2016.11\"; echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; echo \#define CC_VERSION_STRING \"$(LC_ALL=C arm-himix400-linux-gcc --version | head -n 1)\"; echo \#define LD_VERSION_STRING \"$(LC_ALL=C arm-himix400-linux-ld.bfd --version | head -n 1)\"; ) < include/config/uboot.release > include/generated/version_autogenerated.h.tmp; if [ -r include/generated/version_autogenerated.h ] && cmp -s include/generated/version_autogenerated.h include/generated/version_autogenerated.h.tmp; then rm -f include/generated/version_autogenerated.h.tmp; else : '  UPD     include/generated/version_autogenerated.h'; mv -f include/generated/version_autogenerated.h.tmp include/generated/version_autogenerated.h; fi

检查include/generated/version_autogenerated.h

make -f ./scripts/Makefile.build obj=.

./scripts/Makefile.build包含.下的Makefile,并执行./scripts/Makefile.build的__build目标

mkdir -p lib/
mkdir -p arch/arm/lib/
  arm-himix400-linux-gcc -Wp,-MD,arch/arm/lib/.asm-offsets.s.d  -nostdinc -isystem /opt/hisi-linux/x86-arm/arm-himix400-linux/host_bin/../lib/gcc/arm-linux-gnueabi/7.3.0/include -Iinclude   -I./arch/arm/include -include ./include/linux/kconfig.h -D__KERNEL__ -D__UBOOT__ -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -Os -fno-stack-protector -fno-delete-null-pointer-checks -g -fstack-usage -Wno-format-nonliteral -Werror=date-time -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -mword-relocations -fno-pic -mno-unaligned-access -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe -march=armv7-a -D__LINUX_ARM_ARCH__=7 -DDO_DEPS_ONLY    -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(asm_offsets)"  -D"KBUILD_MODNAME=KBUILD_STR(asm_offsets)"  -fverbose-asm -S -o arch/arm/lib/asm-offsets.s arch/arm/lib/asm-offsets.c
  arm-himix400-linux-gcc -Wp,-MD,lib/.asm-offsets.s.d  -nostdinc -isystem /opt/hisi-linux/x86-arm/arm-himix400-linux/host_bin/../lib/gcc/arm-linux-gnueabi/7.3.0/include -Iinclude   -I./arch/arm/include -include ./include/linux/kconfig.h -D__KERNEL__ -D__UBOOT__ -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -Os -fno-stack-protector -fno-delete-null-pointer-checks -g -fstack-usage -Wno-format-nonliteral -Werror=date-time -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -mword-relocations -fno-pic -mno-unaligned-access -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe -march=armv7-a -D__LINUX_ARM_ARCH__=7 -DDO_DEPS_ONLY    -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(asm_offsets)"  -D"KBUILD_MODNAME=KBUILD_STR(asm_offsets)"  -fverbose-asm -S -o lib/asm-offsets.s lib/asm-offsets.c

编译arch/arm/lib/asm-offsets.c和lib/asm-offsets.c

set -e; : '  CHK     include/generated/generic-asm-offsets.h'; mkdir -p include/generated/; 	(set -e; echo "#ifndef __GENERIC_ASM_OFFSETS_H__"; echo "#define __GENERIC_ASM_OFFSETS_H__"; echo "/*"; echo " * DO NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo " */"; echo ""; sed -ne 	"s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; /^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; echo ""; echo "#endif" ) < lib/asm-offsets.s > include/generated/generic-asm-offsets.h.tmp; if [ -r include/generated/generic-asm-offsets.h ] && cmp -s include/generated/generic-asm-offsets.h include/generated/generic-asm-offsets.h.tmp; then rm -f include/generated/generic-asm-offsets.h.tmp; else : '  UPD     include/generated/generic-asm-offsets.h'; mv -f include/generated/generic-asm-offsets.h.tmp include/generated/generic-asm-offsets.h; fi

检查include/generated/generic-asm-offsets.h是否需要更新

set -e; : '  CHK     include/generated/asm-offsets.h'; mkdir -p include/generated/; 	(set -e; echo "#ifndef __ASM_OFFSETS_H__"; echo "#define __ASM_OFFSETS_H__"; echo "/*"; echo " * DO NOT MODIFY."; echo " *"; echo " * This file was generated by Kbuild"; echo " */"; echo ""; sed -ne 	"s:[[:space:]]*\.ascii[[:space:]]*\"\(.*\)\":\1:; /^->/{s:->#\(.*\):/* \1 */:; s:^->\([^ ]*\) [\$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; s:^->\([^ ]*\) [\$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; echo ""; echo "#endif" ) < arch/arm/lib/asm-offsets.s > include/generated/asm-offsets.h.tmp; if [ -r include/generated/asm-offsets.h ] && cmp -s include/generated/asm-offsets.h include/generated/asm-offsets.h.tmp; then rm -f include/generated/asm-offsets.h.tmp; else : '  UPD     include/generated/asm-offsets.h'; mv -f include/generated/asm-offsets.h.tmp include/generated/asm-offsets.h; fi

检查include/generated/asm-offsets.h是否需要更新

make -f ./scripts/Makefile.build obj=tools
make -f ./scripts/Makefile.build obj=arch/arm/cpu
make -f ./scripts/Makefile.build obj=arch/arm/cpu/armv7
make -f ./scripts/Makefile.build obj=arch/arm/lib
make -f ./scripts/Makefile.build obj=board/hisilicon/hi3556v200
make -f ./scripts/Makefile.build obj=cmd
make -f ./scripts/Makefile.build obj=common
make -f ./scripts/Makefile.build obj=disk
make -f ./scripts/Makefile.build obj=drivers
make -f ./scripts/Makefile.build obj=examples

./scripts/Makefile.build包含obj下的Makefile,并执行./scripts/Makefile.build的__build目标, 其中drivers将会编译drivers目录下的各个驱动

  arm-himix400-linux-ld.bfd   -pie  --gc-sections -Bstatic -Ttext 0x80800000 -o u-boot -T u-boot.lds arch/arm/cpu/armv7/start.o --start-group  arch/arm/cpu/built-in.o  arch/arm/cpu/armv7/built-in.o  arch/arm/lib/built-in.o  board/hisilicon/hi3556v200/built-in.o  cmd/built-in.o  common/built-in.o  disk/built-in.o  drivers/built-in.o  drivers/ddr/hisilicon/hi3556v200/built-in.o  drivers/dma/built-in.o  drivers/gpio/built-in.o  drivers/i2c/built-in.o  drivers/mmc/built-in.o  drivers/mtd/built-in.o  drivers/mtd/onenand/built-in.o  drivers/mtd/spi/built-in.o  drivers/net/built-in.o  drivers/net/phy/built-in.o  drivers/pci/built-in.o  drivers/power/built-in.o  drivers/power/battery/built-in.o  drivers/power/domain/built-in.o  drivers/power/fuel_gauge/built-in.o  drivers/power/mfd/built-in.o  drivers/power/pmic/built-in.o  drivers/power/regulator/built-in.o  drivers/serial/built-in.o  drivers/spi/built-in.o  drivers/usb/common/built-in.o  drivers/usb/dwc3/built-in.o  drivers/usb/emul/built-in.o  drivers/usb/eth/built-in.o  drivers/usb/gadget/built-in.o  drivers/usb/gadget/hiudc3/built-in.o  drivers/usb/gadget/udc/built-in.o  drivers/usb/host/built-in.o  drivers/usb/musb-new/built-in.o  drivers/usb/musb/built-in.o  drivers/usb/phy/built-in.o  drivers/usb/ulpi/built-in.o  fs/built-in.o  lib/built-in.o  net/built-in.o  product/himedia/built-in.o  test/built-in.o  test/dm/built-in.o --end-group arch/arm/lib/eabi_compat.o  arch/arm/lib/lib.a -Map u-boot.map

链接生成u-boot

  arm-himix400-linux-objcopy --gap-fill=0xff  -j .text -j .secure_text -j .image -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -O srec u-boot u-boot.srec

生成u-boot.srec

  arm-himix400-linux-objcopy --gap-fill=0xff  -j .text -j .secure_text -j .image -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j .u_boot_list -j .rel.dyn -O binary  u-boot u-boot-nodtb.bin
  arm-himix400-linux-objdump -t u-boot > u-boot.sym

  cp u-boot-nodtb.bin u-boot.bin

生成u-boot.bin

./scripts/check-config.sh u-boot.cfg \
		./scripts/config_whitelist.txt . 1>&2


make[2]: Leaving directory `/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第三次离开u-boot主目录

3.5 编译gzip

~/Hi3559V200_SmartCam_V5.0.0.1/osdrv

回到osdrv主目录

make -C /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/hi_gzip/

编译osdrv/tools/pc/hi_gzip相关

cp gzip-1.8/gzip bin;

cp /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/hi_gzip/bin/gzip /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/cpu/armv7/hi3556v200/hw_compressed -rf
chmod +x /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/cpu/armv7/hi3556v200/hw_compressed/gzip

拷贝到gzip工具

cp /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/uboot_tools/reg_info_hi3556v200.bin /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/.reg

拷贝.reg文件到osdrv/opensource/uboot/u-boot-2016.11/.reg

3.6 编译u-boot-hi3556v200.bin

pushd /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11;make ARCH=arm CROSS_COMPILE=arm-himix400-linux- u-boot-z.bin;popd
~/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11 ~/Hi3559V200_SmartCam_V5.0.0.1/osdrv

开始编译u-boot-z.bin

make[2]: Entering directory `/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第四次进入uboot主目录

make -C /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/cpu/armv7/hi3556v200/hw_compressed/ \
		CROSS_COMPILE=arm-himix400-linux- \

使用arch/arm/cpu/armv7/hi3556v200/hw_compressed/Makefile编译

BINIMAGE=/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/u-boot.bin TOPDIR=/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11
./gzip -fNqc -7 /data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/u-boot.bin > image_data.gzip

使用gzip压缩u-boot.bin到image_data.gzip

arm-himix400-linux-gcc -D__ASSEMBLY__ -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -o start.o start.S -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/xxx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o lowlevel_init_v300.o lowlevel_init_v300.c -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o init_registers.o init_registers.c -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o ddr_training_ctl.o ddr_training_ctl.c -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/xx/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o ddr_training_boot.o ddr_training_boot.c -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o ddr_training_custom.o ddr_training_custom.c -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o startup.o startup.c -c
arm-himix400-linux-gcc -D__ASSEMBLY__ -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -o image_data.o image_data.S -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o emmc_boot.o emmc_boot.c -c
arm-himix400-linux-gcc -g -Os -fno-builtin -ffreestanding -D__KERNEL__ -DTEXT_BASE=0x80700000 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/default -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/drivers/ddr/hisilicon/hi3556v200 -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/arch/arm/include -I/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/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  -fno-strict-aliasing -g -Wall -Wstrict-prototypes \
		-fno-stack-protector -o div0.o div0.c -c

编译Hi3556v200下的SOC相关文件

arm-himix400-linux-ld -Bstatic -T u-boot.lds -Ttext 0x80700000 start.o \
		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 emmc_boot.o div0.o -Map u-boot-hi3556v200.map -o u-boot-hi3556v200.elf

链接u-boot-hi3556v200.elf

arm-himix400-linux-objdump -d  u-boot-hi3556v200.elf > u-boot-hi3556v200.elf.asm
arm-himix400-linux-objcopy -O srec u-boot-hi3556v200.elf u-boot-hi3556v200.srec
arm-himix400-linux-objcopy -j .text -O binary u-boot-hi3556v200.elf u-boot-hi3556v200.text
arm-himix400-linux-objcopy --gap-fill=0xff -O binary u-boot-hi3556v200.elf u-boot-hi3556v200.tmp
'u-boot-hi3556v200.bin' -> '/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/u-boot-hi3556v200.bin'
u-boot-hi3556v200.bin is Ready.

生成u-boot-hi3556v200.bin

make[2]: Leaving directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11'

第四次离开uboot主目录

~/Hi3559V200_SmartCam_V5.0.0.1/osdrv
cp /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/u-boot-hi3556v200.bin /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/pub/boot
cp /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/u-boot-2016.11/u-boot-hi3556v200.bin  /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/opensource/uboot/secureboot_release

3.7 编译pc工具

---------task [3] build tools run on pc
make -C /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool/
make[2]: Entering directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool'
install -vs -t /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2
removed '/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool/mkfs.jffs2'
'/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2' -> '/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool/mkfs.jffs2'
strip /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool/tmp/sbin/mkfs.jffs2
cp -rf ./tmp/sbin/mkfs.ubifs .
cp -rf ./tmp/sbin/ubinize .
make[2]: Leaving directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool'
cp /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/jffs2_tool/mkfs.jffs2 /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/pub/tools
make -C /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/nand_production/fmc_nand_ecc_product_v100
make[2]: Entering directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/nand_production/fmc_nand_ecc_product_v100'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/nand_production/fmc_nand_ecc_product_v100'
cp /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/tools/pc/nand_production/fmc_nand_ecc_product_v100/nand_product /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/pub/tools

3.8 编译Liteos

echo "------- task [2] build liteos -------"
if [ hi3556v200 == "hi3559v200" ];then\
		./osdrv_mem_cfg.sh liteos hi3556v200;\
	fi;
if [ hi3556v200 == "hi3556v200" ];then\
		./osdrv_mem_cfg.sh liteos hi3556v200;\
	fi;
UBOOT_TEXT_BASE:0x80800000
UBOOT_CFG_DDR_SIZE:0x8000000
LITEOS_SYS_MEM_BASE:0x80000000
MEM_HUAWEILITE_SYS_SIZE:0x01e00000
LITEOS_MMZ_MEM_BASE:0x82100000
LITEOS_MMZ_MEM_SIZE:0x5f00000
LITEOS_TEXT_OFFSET:0x00000000
LITEOS_DDR_MEM_SIZE:0x8000000
[32;1mconfig liteos...[0m
pushd /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos;cp tools/build/config/hi3556v200_defconfig .config;make savemenuconfig;make clean;make -j >/dev/null;popd
~/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos ~/Hi3559V200_SmartCam_V5.0.0.1/osdrv
make[2]: Entering directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos'
make -C tools/menuconfig savemenuconfig
make[3]: Entering directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos/tools/menuconfig'
/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos/.config:217: trying to assign nonexistent symbol LOSCFG_DRIVERS_WIFI
#
# using defaults found in /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos/.config
#


make[3]: Leaving directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos/tools/menuconfig'
mv -f platform/bsp/common/menuconfig.h /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos/platform/bsp/board/hi3556v200/include/menuconfig.h
make[2]: Leaving directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos'
make[2]: Entering directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos'
......
=============== make lib done  ===============

编译lib

pushd /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos/sample/sample_osdrv;make;cp sample.bin /data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/pub/liteos/sample.bin;popd

编译sample.bin

make[2]: Entering directory `/data_old/x/Hi3559V200_SmartCam_V5.0.0.1/osdrv/platform/liteos/liteos/sample/sample_osdrv'
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文件和汇编文件

4.总结

整个编译流程可以分为如下几个过程:

  1. 编译准备
    创建pub下的文件夹,用于存放编译结果
    为海思regbin文件编译作准备
    进入u-boot目录,解压secureboot_release.tgz到当前目录
  2. .config的编译流程
  3. 配置内存地址
    主要对内存的运行时地址进行划分
  4. u-boot.bin的编译
    此为通用u-boot的编译
  5. 编译gzip
  6. 编译u-boot-hi3556v200.bin
    通过gzip工具将通用uboot压缩后,将hi3556v200 soc相关编译与压缩后的uboot打包, 生成u-boot-hi3556v200.bin
  7. 编译pc工具
  8. 编译Liteos
    Liteos将被编译为一个个的静态库,应用被编译成.o文件,通过静态链接,将liteos和应用进行链接。

参考文档

  1. https://blog.youkuaiyun.com/li_wen01/category_8476932.html
    海思(Hi3521a)uboot详细分析
  2. https://blog.youkuaiyun.com/qq_16777851/article/details/81749077
    从零开始之uboot、移植uboot2017.01(六、uboot的自举分析)
  3. https://blog.youkuaiyun.com/czg13548930186/article/details/74906099
    【补充】位置无关码和位置有关码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值