目录
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.总结
整个编译流程可以分为如下几个过程:
- 编译准备
创建pub下的文件夹,用于存放编译结果
为海思regbin文件编译作准备
进入u-boot目录,解压secureboot_release.tgz到当前目录 - .config的编译流程
- 配置内存地址
主要对内存的运行时地址进行划分 - u-boot.bin的编译
此为通用u-boot的编译 - 编译gzip
- 编译u-boot-hi3556v200.bin
通过gzip工具将通用uboot压缩后,将hi3556v200 soc相关编译与压缩后的uboot打包, 生成u-boot-hi3556v200.bin - 编译pc工具
- 编译Liteos
Liteos将被编译为一个个的静态库,应用被编译成.o文件,通过静态链接,将liteos和应用进行链接。
参考文档
- https://blog.youkuaiyun.com/li_wen01/category_8476932.html
海思(Hi3521a)uboot详细分析 - https://blog.youkuaiyun.com/qq_16777851/article/details/81749077
从零开始之uboot、移植uboot2017.01(六、uboot的自举分析) - https://blog.youkuaiyun.com/czg13548930186/article/details/74906099
【补充】位置无关码和位置有关码