xref: /rk3399_rockchip-uboot/make.sh (revision 7c2526e987b679bf0f4d3f8071db7f068d9041fd)
127a50c86SAndy Yan#!/bin/sh
2cd7ae718SJoseph Chenset -e
327a50c86SAndy YanBOARD=$1
4bc98b3c8SJoseph ChenRKCHIP=${BOARD##*-}
5bc98b3c8SJoseph ChenDSTDIR=rockdev/${RKCHIP}
6bc98b3c8SJoseph ChenRKCHIP=$(echo ${RKCHIP} | tr '[a-z]' '[A-Z]')
727a50c86SAndy YanJOB=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l`
827a50c86SAndy Yan
9bc98b3c8SJoseph Chen# Declare global rkbin tools and rkbin Responsity path, updated in prepare()
10bc98b3c8SJoseph ChenTOOLCHAIN_RKBIN=./
11bc98b3c8SJoseph ChenRKBIN=./
12bc98b3c8SJoseph Chen# RKTOOL path
13bc98b3c8SJoseph ChenRKBIN_TOOLS=../rkbin/tools
14bc98b3c8SJoseph Chen
15bc98b3c8SJoseph Chen# Declare global toolchain path for CROSS_COMPILE, updated in select_toolchain()
16bc98b3c8SJoseph ChenTOOLCHAIN_GCC=./
17bc98b3c8SJoseph Chen# GCC toolchain
18bc98b3c8SJoseph ChenGCC_ARM32=arm-linux-androideabi-
19bc98b3c8SJoseph ChenGCC_ARM64=aarch64-linux-android-
20bc98b3c8SJoseph ChenTOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
21bc98b3c8SJoseph ChenTOOLCHAIN_ARM64=../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
22bc98b3c8SJoseph Chen
23cd7ae718SJoseph Chenprepare()
24cd7ae718SJoseph Chen{
25bc98b3c8SJoseph Chen	local absolute_path
26cd7ae718SJoseph Chen
27cd7ae718SJoseph Chen	# Check invaid args and help
28bc98b3c8SJoseph Chen	if [ "$BOARD" = '--help' -o "$BOARD" = '-h' -o "$BOARD" = '--h' -o "$BOARD" = '' ]; then
29cd7ae718SJoseph Chen		echo
30bc98b3c8SJoseph Chen		echo "Usage: ./make.sh [board]"
31cd7ae718SJoseph Chen		echo "Example:"
32cd7ae718SJoseph Chen		echo "./make.sh evb-rk3399     ---- build for evb-rk3399_defconfig"
33cd7ae718SJoseph Chen		echo "./make.sh firefly-rk3288 ---- build for firefly-rk3288_defconfig"
34cd7ae718SJoseph Chen		exit 1
35cd7ae718SJoseph Chen	elif [ ! -f configs/${BOARD}_defconfig ]; then
36cd7ae718SJoseph Chen		echo "Can't find: configs/${BOARD}_defconfig"
37cd7ae718SJoseph Chen		exit 1
38cd7ae718SJoseph Chen	fi
39cd7ae718SJoseph Chen
40bc98b3c8SJoseph Chen	# Initialize RKBIN and TOOLCHAIN_RKBIN
41bc98b3c8SJoseph Chen	if [ -d ${RKBIN_TOOLS} ]; then
42bc98b3c8SJoseph Chen		absolute_path=$(cd `dirname ${RKBIN_TOOLS}`; pwd)
43bc98b3c8SJoseph Chen		RKBIN=${absolute_path}
44bc98b3c8SJoseph Chen		TOOLCHAIN_RKBIN=${absolute_path}/tools
45cd7ae718SJoseph Chen	else
46cd7ae718SJoseph Chen		echo
47cd7ae718SJoseph Chen		echo "Can't find '../rkbin/' Responsity, please download it before pack image!"
48cd7ae718SJoseph Chen		echo "How to obtain? 3 ways:"
49cd7ae718SJoseph Chen		echo "	1. Login your Rockchip gerrit account: \"Projects\" -> \"List\" -> search \"rk/rkbin\" Responsity"
50cd7ae718SJoseph Chen		echo "	2. Github Responsity: https://github.com/rockchip-linux/rkbin"
51cd7ae718SJoseph Chen		echo "	3. Download full release SDK Responsity"
52cd7ae718SJoseph Chen		exit 1
53cd7ae718SJoseph Chen	fi
54*7c2526e9SJoseph Chen
55*7c2526e9SJoseph Chen	# Clean! We assume that ./u-boot.map indicates U-Boot project is not clean,
56*7c2526e9SJoseph Chen	# maybe git checkout from rkdevelop.
57*7c2526e9SJoseph Chen	if [ -f ./u-boot.map ]; then
58*7c2526e9SJoseph Chen		make mrproper
59*7c2526e9SJoseph Chen		echo "auto \"make mrproper\" done..."
60*7c2526e9SJoseph Chen	fi
61cd7ae718SJoseph Chen}
62cd7ae718SJoseph Chen
6327a50c86SAndy Yanselect_toolchain()
6427a50c86SAndy Yan{
65bc98b3c8SJoseph Chen	local absolute_path
66bc98b3c8SJoseph Chen
6727a50c86SAndy Yan	if grep  -q '^CONFIG_ARM64=y' ${DSTDIR}/out/.config ; then
68bc98b3c8SJoseph Chen		if [ -d ${TOOLCHAIN_ARM64} ]; then
69bc98b3c8SJoseph Chen			absolute_path=$(cd `dirname ${TOOLCHAIN_ARM64}`; pwd)
70bc98b3c8SJoseph Chen			TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM64}
71bc98b3c8SJoseph Chen		else
72bc98b3c8SJoseph Chen			echo "Can't find toolchain: ${TOOLCHAIN_GCC}"
73bc98b3c8SJoseph Chen			exit 1
7427a50c86SAndy Yan		fi
7527a50c86SAndy Yan	else
76bc98b3c8SJoseph Chen		if [ -d ${TOOLCHAIN_ARM32} ]; then
77bc98b3c8SJoseph Chen			absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd)
78bc98b3c8SJoseph Chen			TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32}
79bc98b3c8SJoseph Chen		else
80bc98b3c8SJoseph Chen			echo "Can't find toolchain: ${TOOLCHAIN_GCC}"
81bc98b3c8SJoseph Chen			exit 1
8227a50c86SAndy Yan		fi
8327a50c86SAndy Yan	fi
84bc98b3c8SJoseph Chen
85bc98b3c8SJoseph Chen	echo "toolchain: ${TOOLCHAIN_GCC}"
86bc98b3c8SJoseph Chen}
87bc98b3c8SJoseph Chen
88bc98b3c8SJoseph Chenfixup_chip_name()
89bc98b3c8SJoseph Chen{
90bc98b3c8SJoseph Chen	if [ "$RKCHIP" = 'RK3228' -o "$RKCHIP" = 'RK3229' ]; then
91bc98b3c8SJoseph Chen		RKCHIP=RK322X
92bc98b3c8SJoseph Chen	fi
9327a50c86SAndy Yan}
94de9a6cd2SJoseph Chen
95cd7ae718SJoseph Chenpack_uboot_image()
96de9a6cd2SJoseph Chen{
97cd7ae718SJoseph Chen	local UBOOT_LOAD_ADDR
98de9a6cd2SJoseph Chen
99cd7ae718SJoseph Chen	UBOOT_LOAD_ADDR=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" ${DSTDIR}/out/include/autoconf.mk|tr -d '\r'`
100bc98b3c8SJoseph Chen	${TOOLCHAIN_RKBIN}/loaderimage --pack --uboot ${DSTDIR}/out/u-boot.bin uboot.img ${UBOOT_LOAD_ADDR}
101de9a6cd2SJoseph Chen}
102de9a6cd2SJoseph Chen
103cd7ae718SJoseph Chenpack_loader_image()
104cd7ae718SJoseph Chen{
105cd7ae718SJoseph Chen	cd ${RKBIN}
106bc98b3c8SJoseph Chen	${TOOLCHAIN_RKBIN}/boot_merger --replace tools/rk_tools/ ./ ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini
107cd7ae718SJoseph Chen	cd -
108cd7ae718SJoseph Chen	mv ${RKBIN}/*_loader_*.bin ./
109cd7ae718SJoseph Chen}
110cd7ae718SJoseph Chen
111cd7ae718SJoseph Chenpack_trust_image()
112cd7ae718SJoseph Chen{
113cd7ae718SJoseph Chen	local TOS TOS_TA DARM_BASE TEE_LOAD_ADDR TEE_OFFSET=0x8400000
114cd7ae718SJoseph Chen
115cd7ae718SJoseph Chen	# ARM64 uses trust_merger
116cd7ae718SJoseph Chen	if grep  -q '^CONFIG_ARM64=y' ${DSTDIR}/out/.config ; then
117cd7ae718SJoseph Chen		cd ${RKBIN}
118bc98b3c8SJoseph Chen		${TOOLCHAIN_RKBIN}/trust_merger --replace tools/rk_tools/ ./ ${RKBIN}/RKTRUST/${RKCHIP}TRUST.ini
119cd7ae718SJoseph Chen		cd -
120cd7ae718SJoseph Chen		mv ${RKBIN}/trust.img ./trust.img
121cd7ae718SJoseph Chen	# ARM uses loaderimage
122cd7ae718SJoseph Chen	else
123cd7ae718SJoseph Chen		# OP-TEE is 132M(0x8400000) offset from DRAM base.
124cd7ae718SJoseph Chen		DARM_BASE=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" ${DSTDIR}/out/include/autoconf.mk|tr -d '\r'`
125cd7ae718SJoseph Chen		TEE_LOAD_ADDR=$((DARM_BASE+TEE_OFFSET))
126cd7ae718SJoseph Chen
127cd7ae718SJoseph Chen		# Convert Dec to Hex
128cd7ae718SJoseph Chen		TEE_LOAD_ADDR=$(echo "obase=16;${TEE_LOAD_ADDR}"|bc)
129cd7ae718SJoseph Chen
1300e90839aSJoseph Chen		# Parse orignal path
131cd7ae718SJoseph Chen		TOS=`sed -n "/TOS=/s/TOS=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'`
132cd7ae718SJoseph Chen		TOS_TA=`sed -n "/TOSTA=/s/TOSTA=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'`
133cd7ae718SJoseph Chen
1340e90839aSJoseph Chen		# replace "./tools/rk_tools/" with "./" to compatible legacy ini content of rkdevelop branch
1350e90839aSJoseph Chen		TOS=$(echo ${TOS} | sed "s/tools\/rk_tools\//\.\//g")
1360e90839aSJoseph Chen		TOS_TA=$(echo ${TOS_TA} | sed "s/tools\/rk_tools\//\.\//g")
1370e90839aSJoseph Chen
138cd7ae718SJoseph Chen		if [ $TOS_TA -a $TOS ]; then
139bc98b3c8SJoseph Chen			${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR}
140bc98b3c8SJoseph Chen			${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust_with_ta.img ${TEE_LOAD_ADDR}
141cd7ae718SJoseph Chen			echo "Both trust.img and trust_with_ta.img are ready"
142cd7ae718SJoseph Chen		elif [ $TOS ]; then
143bc98b3c8SJoseph Chen			${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR}
144cd7ae718SJoseph Chen			echo "trust.img is ready"
145cd7ae718SJoseph Chen		elif [ $TOS_TA ]; then
146bc98b3c8SJoseph Chen			${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust.img ${TEE_LOAD_ADDR}
147cd7ae718SJoseph Chen			echo "trust.img with ta is ready"
148cd7ae718SJoseph Chen		else
149cd7ae718SJoseph Chen			echo "Can't find any tee bin"
150cd7ae718SJoseph Chen			exit 1
151cd7ae718SJoseph Chen		fi
152cd7ae718SJoseph Chen	fi
153cd7ae718SJoseph Chen}
154cd7ae718SJoseph Chen
155cd7ae718SJoseph Chenprepare
15627a50c86SAndy Yanecho "make for ${BOARD}_defconfig by -j${JOB}"
15727a50c86SAndy Yanmake ${BOARD}_defconfig O=${DSTDIR}/out
158*7c2526e9SJoseph Chenselect_toolchain
159bc98b3c8SJoseph Chenmake CROSS_COMPILE=${TOOLCHAIN_GCC}  all --jobs=${JOB} O=${DSTDIR}/out
160bc98b3c8SJoseph Chenfixup_chip_name
161cd7ae718SJoseph Chenpack_loader_image
162cd7ae718SJoseph Chenpack_uboot_image
163cd7ae718SJoseph Chenpack_trust_image
164