2017-09-05 07:28:15 +00:00
|
|
|
#!/bin/sh
|
2017-12-11 11:16:26 +00:00
|
|
|
set -e
|
2017-09-05 07:28:15 +00:00
|
|
|
BOARD=$1
|
2018-02-08 03:21:43 +00:00
|
|
|
SUBCMD=$2
|
2018-01-26 11:27:08 +00:00
|
|
|
RKCHIP=${BOARD##*-}
|
|
|
|
|
DSTDIR=rockdev/${RKCHIP}
|
|
|
|
|
RKCHIP=$(echo ${RKCHIP} | tr '[a-z]' '[A-Z]')
|
2017-09-05 07:28:15 +00:00
|
|
|
JOB=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l`
|
|
|
|
|
|
2018-01-26 11:27:08 +00:00
|
|
|
# Declare global rkbin tools and rkbin Responsity path, updated in prepare()
|
|
|
|
|
TOOLCHAIN_RKBIN=./
|
|
|
|
|
RKBIN=./
|
|
|
|
|
# RKTOOL path
|
|
|
|
|
RKBIN_TOOLS=../rkbin/tools
|
|
|
|
|
|
|
|
|
|
# Declare global toolchain path for CROSS_COMPILE, updated in select_toolchain()
|
|
|
|
|
TOOLCHAIN_GCC=./
|
2018-02-08 03:21:43 +00:00
|
|
|
TOOLCHAIN_OBJDUMP=./
|
2018-01-26 11:27:08 +00:00
|
|
|
# GCC toolchain
|
2018-02-09 08:25:03 +00:00
|
|
|
GCC_ARM32=arm-linux-gnueabihf-
|
|
|
|
|
GCC_ARM64=aarch64-linux-gnu-
|
|
|
|
|
TOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin
|
|
|
|
|
TOOLCHAIN_ARM64=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
|
2018-02-08 03:21:43 +00:00
|
|
|
# OBJDMP
|
2018-02-09 08:25:03 +00:00
|
|
|
OBJ_ARM32=arm-linux-gnueabihf-objdump
|
|
|
|
|
OBJ_ARM64=aarch64-linux-gnu-objdump
|
2018-01-26 11:27:08 +00:00
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
prepare()
|
|
|
|
|
{
|
2018-01-26 11:27:08 +00:00
|
|
|
local absolute_path
|
2017-12-11 11:16:26 +00:00
|
|
|
|
|
|
|
|
# Check invaid args and help
|
2018-01-26 11:27:08 +00:00
|
|
|
if [ "$BOARD" = '--help' -o "$BOARD" = '-h' -o "$BOARD" = '--h' -o "$BOARD" = '' ]; then
|
2017-12-11 11:16:26 +00:00
|
|
|
echo
|
2018-01-26 11:27:08 +00:00
|
|
|
echo "Usage: ./make.sh [board]"
|
2017-12-11 11:16:26 +00:00
|
|
|
echo "Example:"
|
|
|
|
|
echo "./make.sh evb-rk3399 ---- build for evb-rk3399_defconfig"
|
|
|
|
|
echo "./make.sh firefly-rk3288 ---- build for firefly-rk3288_defconfig"
|
|
|
|
|
exit 1
|
|
|
|
|
elif [ ! -f configs/${BOARD}_defconfig ]; then
|
|
|
|
|
echo "Can't find: configs/${BOARD}_defconfig"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
2018-01-26 11:27:08 +00:00
|
|
|
# Initialize RKBIN and TOOLCHAIN_RKBIN
|
|
|
|
|
if [ -d ${RKBIN_TOOLS} ]; then
|
|
|
|
|
absolute_path=$(cd `dirname ${RKBIN_TOOLS}`; pwd)
|
|
|
|
|
RKBIN=${absolute_path}
|
|
|
|
|
TOOLCHAIN_RKBIN=${absolute_path}/tools
|
2017-12-11 11:16:26 +00:00
|
|
|
else
|
|
|
|
|
echo
|
|
|
|
|
echo "Can't find '../rkbin/' Responsity, please download it before pack image!"
|
|
|
|
|
echo "How to obtain? 3 ways:"
|
|
|
|
|
echo " 1. Login your Rockchip gerrit account: \"Projects\" -> \"List\" -> search \"rk/rkbin\" Responsity"
|
|
|
|
|
echo " 2. Github Responsity: https://github.com/rockchip-linux/rkbin"
|
|
|
|
|
echo " 3. Download full release SDK Responsity"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
2018-02-02 06:27:13 +00:00
|
|
|
|
2018-02-03 04:36:22 +00:00
|
|
|
# Clean! We assume that ./u-boot.map, u-boot.cfg or u-boot.lds indicates U-Boot project is not clean,
|
2018-02-02 06:27:13 +00:00
|
|
|
# maybe git checkout from rkdevelop.
|
2018-02-03 04:36:22 +00:00
|
|
|
if [ -f ./u-boot.map -o -f ./u-boot.cfg -o -f ./u-boot.lds ]; then
|
2018-02-02 06:27:13 +00:00
|
|
|
make mrproper
|
|
|
|
|
echo "auto \"make mrproper\" done..."
|
|
|
|
|
fi
|
2017-12-11 11:16:26 +00:00
|
|
|
}
|
|
|
|
|
|
2017-09-05 07:28:15 +00:00
|
|
|
select_toolchain()
|
|
|
|
|
{
|
2018-01-26 11:27:08 +00:00
|
|
|
local absolute_path
|
|
|
|
|
|
2017-09-05 07:28:15 +00:00
|
|
|
if grep -q '^CONFIG_ARM64=y' ${DSTDIR}/out/.config ; then
|
2018-01-26 11:27:08 +00:00
|
|
|
if [ -d ${TOOLCHAIN_ARM64} ]; then
|
|
|
|
|
absolute_path=$(cd `dirname ${TOOLCHAIN_ARM64}`; pwd)
|
|
|
|
|
TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM64}
|
2018-02-08 03:21:43 +00:00
|
|
|
TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM64}
|
2018-01-26 11:27:08 +00:00
|
|
|
else
|
|
|
|
|
echo "Can't find toolchain: ${TOOLCHAIN_GCC}"
|
|
|
|
|
exit 1
|
2017-09-05 07:28:15 +00:00
|
|
|
fi
|
|
|
|
|
else
|
2018-01-26 11:27:08 +00:00
|
|
|
if [ -d ${TOOLCHAIN_ARM32} ]; then
|
|
|
|
|
absolute_path=$(cd `dirname ${TOOLCHAIN_ARM32}`; pwd)
|
|
|
|
|
TOOLCHAIN_GCC=${absolute_path}/bin/${GCC_ARM32}
|
2018-02-08 03:21:43 +00:00
|
|
|
TOOLCHAIN_OBJDUMP=${absolute_path}/bin/${OBJ_ARM32}
|
2018-01-26 11:27:08 +00:00
|
|
|
else
|
|
|
|
|
echo "Can't find toolchain: ${TOOLCHAIN_GCC}"
|
|
|
|
|
exit 1
|
2017-09-05 07:28:15 +00:00
|
|
|
fi
|
|
|
|
|
fi
|
2018-01-26 11:27:08 +00:00
|
|
|
|
|
|
|
|
echo "toolchain: ${TOOLCHAIN_GCC}"
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-08 03:21:43 +00:00
|
|
|
sub_commands()
|
|
|
|
|
{
|
|
|
|
|
local elf=${SUBCMD%-*} opt=${SUBCMD#*-}
|
|
|
|
|
|
|
|
|
|
# Make clean, distclean and mrproper
|
|
|
|
|
if [ "$SUBCMD" = 'clean' -o "$SUBCMD" = 'distclean' -o "$SUBCMD" = 'mrproper' ]; then
|
|
|
|
|
make $SUBCMD O=${DSTDIR}/out
|
|
|
|
|
exit 0
|
2018-02-10 01:43:05 +00:00
|
|
|
elif [ "$elf" = 'elf' ]; then
|
2018-02-08 03:21:43 +00:00
|
|
|
if [ ! -f ${DSTDIR}/out/u-boot ]; then
|
|
|
|
|
echo "Can't find elf file: ${DSTDIR}/out/u-boot"
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
# default 'elf' without option, use '-D'
|
|
|
|
|
if [ "${elf}" = 'elf' -a "${opt}" = 'elf' ]; then
|
|
|
|
|
opt=D
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
${TOOLCHAIN_OBJDUMP} -${opt} ${DSTDIR}/out/u-boot | less
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
2018-02-10 01:43:05 +00:00
|
|
|
elif [ "$SUBCMD" = 'map' ]; then
|
|
|
|
|
if [ ! -f ${DSTDIR}/out/System.map ]; then
|
|
|
|
|
echo "Can't find map file: ${DSTDIR}/out/System.map"
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
vim ${DSTDIR}/out/System.map
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
elif [ "$SUBCMD" = '.config' ]; then
|
|
|
|
|
if [ ! -f ${DSTDIR}/out/.config ]; then
|
|
|
|
|
echo "Can't find .config file: ${DSTDIR}/out/.config"
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
vim ${DSTDIR}/out/.config
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
2018-02-08 03:21:43 +00:00
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2018-01-26 11:27:08 +00:00
|
|
|
fixup_chip_name()
|
|
|
|
|
{
|
|
|
|
|
if [ "$RKCHIP" = 'RK3228' -o "$RKCHIP" = 'RK3229' ]; then
|
|
|
|
|
RKCHIP=RK322X
|
2018-02-11 07:28:59 +00:00
|
|
|
elif [ "$RKCHIP" = 'PX30' ]; then
|
|
|
|
|
RKCHIP=RK3326
|
2018-01-26 11:27:08 +00:00
|
|
|
fi
|
2017-09-05 07:28:15 +00:00
|
|
|
}
|
2017-11-28 13:12:09 +00:00
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
pack_uboot_image()
|
2017-11-28 13:12:09 +00:00
|
|
|
{
|
2017-12-11 11:16:26 +00:00
|
|
|
local UBOOT_LOAD_ADDR
|
2017-11-28 13:12:09 +00:00
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
UBOOT_LOAD_ADDR=`sed -n "/CONFIG_SYS_TEXT_BASE=/s/CONFIG_SYS_TEXT_BASE=//p" ${DSTDIR}/out/include/autoconf.mk|tr -d '\r'`
|
2018-01-26 11:27:08 +00:00
|
|
|
${TOOLCHAIN_RKBIN}/loaderimage --pack --uboot ${DSTDIR}/out/u-boot.bin uboot.img ${UBOOT_LOAD_ADDR}
|
2018-02-03 04:36:22 +00:00
|
|
|
echo "pack uboot okay! Input: ${DSTDIR}/out/u-boot.bin"
|
2017-12-11 11:16:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pack_loader_image()
|
|
|
|
|
{
|
2018-02-03 04:36:22 +00:00
|
|
|
if [ ! -f ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini ]; then
|
|
|
|
|
echo "pack loader failed! Can't find: ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
cd ${RKBIN}
|
2018-01-26 11:27:08 +00:00
|
|
|
${TOOLCHAIN_RKBIN}/boot_merger --replace tools/rk_tools/ ./ ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini
|
2017-12-11 11:16:26 +00:00
|
|
|
cd -
|
|
|
|
|
mv ${RKBIN}/*_loader_*.bin ./
|
2018-02-03 04:36:22 +00:00
|
|
|
echo "pack loader okay! Input: ${RKBIN}/RKBOOT/${RKCHIP}MINIALL.ini"
|
2017-12-11 11:16:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pack_trust_image()
|
|
|
|
|
{
|
|
|
|
|
local TOS TOS_TA DARM_BASE TEE_LOAD_ADDR TEE_OFFSET=0x8400000
|
|
|
|
|
|
|
|
|
|
# ARM64 uses trust_merger
|
|
|
|
|
if grep -q '^CONFIG_ARM64=y' ${DSTDIR}/out/.config ; then
|
2018-02-03 04:36:22 +00:00
|
|
|
if [ ! -f ${RKBIN}/RKTRUST/${RKCHIP}TRUST.ini ]; then
|
|
|
|
|
echo "pack trust failed! Can't find: ${RKBIN}/RKRUST/${RKCHIP}TRUST.ini"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
cd ${RKBIN}
|
2018-01-26 11:27:08 +00:00
|
|
|
${TOOLCHAIN_RKBIN}/trust_merger --replace tools/rk_tools/ ./ ${RKBIN}/RKTRUST/${RKCHIP}TRUST.ini
|
2017-12-11 11:16:26 +00:00
|
|
|
cd -
|
|
|
|
|
mv ${RKBIN}/trust.img ./trust.img
|
2018-02-03 04:36:22 +00:00
|
|
|
echo "pack trust okay! Input: ${RKBIN}/RKRUST/${RKCHIP}TRUST.ini"
|
2017-12-11 11:16:26 +00:00
|
|
|
# ARM uses loaderimage
|
2017-11-28 13:12:09 +00:00
|
|
|
else
|
2018-02-03 04:36:22 +00:00
|
|
|
if [ ! -f ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini ]; then
|
|
|
|
|
echo "pack trust failed! Can't find: ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
# OP-TEE is 132M(0x8400000) offset from DRAM base.
|
|
|
|
|
DARM_BASE=`sed -n "/CONFIG_SYS_SDRAM_BASE=/s/CONFIG_SYS_SDRAM_BASE=//p" ${DSTDIR}/out/include/autoconf.mk|tr -d '\r'`
|
|
|
|
|
TEE_LOAD_ADDR=$((DARM_BASE+TEE_OFFSET))
|
|
|
|
|
|
|
|
|
|
# Convert Dec to Hex
|
|
|
|
|
TEE_LOAD_ADDR=$(echo "obase=16;${TEE_LOAD_ADDR}"|bc)
|
2017-11-28 13:12:09 +00:00
|
|
|
|
2018-01-26 11:11:02 +00:00
|
|
|
# Parse orignal path
|
2017-12-11 11:16:26 +00:00
|
|
|
TOS=`sed -n "/TOS=/s/TOS=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'`
|
|
|
|
|
TOS_TA=`sed -n "/TOSTA=/s/TOSTA=//p" ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini|tr -d '\r'`
|
|
|
|
|
|
2018-01-26 11:11:02 +00:00
|
|
|
# replace "./tools/rk_tools/" with "./" to compatible legacy ini content of rkdevelop branch
|
|
|
|
|
TOS=$(echo ${TOS} | sed "s/tools\/rk_tools\//\.\//g")
|
|
|
|
|
TOS_TA=$(echo ${TOS_TA} | sed "s/tools\/rk_tools\//\.\//g")
|
|
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
if [ $TOS_TA -a $TOS ]; then
|
2018-01-26 11:27:08 +00:00
|
|
|
${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR}
|
|
|
|
|
${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust_with_ta.img ${TEE_LOAD_ADDR}
|
2017-12-11 11:16:26 +00:00
|
|
|
echo "Both trust.img and trust_with_ta.img are ready"
|
|
|
|
|
elif [ $TOS ]; then
|
2018-01-26 11:27:08 +00:00
|
|
|
${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS} ./trust.img ${TEE_LOAD_ADDR}
|
2017-12-11 11:16:26 +00:00
|
|
|
echo "trust.img is ready"
|
|
|
|
|
elif [ $TOS_TA ]; then
|
2018-01-26 11:27:08 +00:00
|
|
|
${TOOLCHAIN_RKBIN}/loaderimage --pack --trustos ${RKBIN}/${TOS_TA} ./trust.img ${TEE_LOAD_ADDR}
|
2017-12-11 11:16:26 +00:00
|
|
|
echo "trust.img with ta is ready"
|
|
|
|
|
else
|
|
|
|
|
echo "Can't find any tee bin"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
2018-02-03 04:36:22 +00:00
|
|
|
|
|
|
|
|
echo "pack trust okay! Input: ${RKBIN}/RKTRUST/${RKCHIP}TOS.ini"
|
2017-12-11 11:16:26 +00:00
|
|
|
fi
|
2017-11-28 13:12:09 +00:00
|
|
|
}
|
|
|
|
|
|
2017-12-11 11:16:26 +00:00
|
|
|
prepare
|
2017-09-05 07:28:15 +00:00
|
|
|
echo "make for ${BOARD}_defconfig by -j${JOB}"
|
|
|
|
|
make ${BOARD}_defconfig O=${DSTDIR}/out
|
2018-02-02 06:27:13 +00:00
|
|
|
select_toolchain
|
2018-02-08 03:21:43 +00:00
|
|
|
sub_commands
|
2018-01-26 11:27:08 +00:00
|
|
|
make CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB} O=${DSTDIR}/out
|
|
|
|
|
fixup_chip_name
|
2017-12-11 11:16:26 +00:00
|
|
|
pack_uboot_image
|
2018-02-02 13:28:48 +00:00
|
|
|
pack_loader_image
|
2017-12-11 11:16:26 +00:00
|
|
|
pack_trust_image
|