xref: /OK3568_Linux_fs/device/rockchip/common/scripts/mk-loader.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash -e
2*4882a593Smuzhiyun
3*4882a593Smuzhiyunbuild_uefi()
4*4882a593Smuzhiyun{
5*4882a593Smuzhiyun	check_config RK_KERNEL_DTB || return 1
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun	if [ "$RK_CHIP" != rk3588 -o ! -d uefi ]; then
8*4882a593Smuzhiyun		echo "UEFI not supported!"
9*4882a593Smuzhiyun		return 1
10*4882a593Smuzhiyun	fi
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun	if [ ! -f "$RK_KERNEL_DTB" ]; then
13*4882a593Smuzhiyun		echo "$RK_KERNEL_DTB not exists!"
14*4882a593Smuzhiyun		return 1
15*4882a593Smuzhiyun	fi
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun	UEFI_DIR=uefi/edk2-platforms/Platform/Rockchip/DeviceTree
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun	run_command cp "$RK_KERNEL_DTB" $UEFI_DIR/$RK_CHIP.dtb
20*4882a593Smuzhiyun	run_command cd uefi
21*4882a593Smuzhiyun	run_command $UMAKE $RK_UBOOT_CFG
22*4882a593Smuzhiyun}
23*4882a593Smuzhiyun
24*4882a593Smuzhiyunbuild_uboot()
25*4882a593Smuzhiyun{
26*4882a593Smuzhiyun	check_config RK_UBOOT_CFG || return 0
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun	if [ -z "$DRY_RUN" ]; then
29*4882a593Smuzhiyun		rm -f u-boot/*.bin u-boot/*.img
30*4882a593Smuzhiyun	fi
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun	UARGS_COMMON="$RK_UBOOT_OPTS \
33*4882a593Smuzhiyun		${RK_UBOOT_INI:+../rkbin/RKBOOT/$RK_UBOOT_INI} \
34*4882a593Smuzhiyun		${RK_UBOOT_TRUST_INI:+../rkbin/RKTRUST/$RK_UBOOT_TRUST_INI}"
35*4882a593Smuzhiyun	UARGS="$UARGS_COMMON ${RK_UBOOT_SPL:+--spl-new} \
36*4882a593Smuzhiyun		${RK_SECURITY_BURN_KEY:+--burn-key-hash}"
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun	if [ "$RK_SECURITY" ]; then
39*4882a593Smuzhiyun		for IMAGE in ${1:-boot.img ${RK_RECOVERY_CFG:+recovery.img}}; do
40*4882a593Smuzhiyun			[ "$DRY_RUN" ] || \
41*4882a593Smuzhiyun				cp "$RK_FIRMWARE_DIR/$IMAGE" u-boot/
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun			UARGS="$UARGS --${IMAGE/./_} $SDK_DIR/u-boot/$IMAGE"
44*4882a593Smuzhiyun		done
45*4882a593Smuzhiyun	fi
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun	run_command cd u-boot
48*4882a593Smuzhiyun	run_command $UMAKE $RK_UBOOT_CFG $RK_UBOOT_CFG_FRAGMENTS $UARGS
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	if [ "$RK_UBOOT_SPL" ]; then
51*4882a593Smuzhiyun		if [ "$DRY_RUN" ] || \
52*4882a593Smuzhiyun			! grep -q "ROCKCHIP_FIT_IMAGE_PACK=y" .config; then
53*4882a593Smuzhiyun			# Repack SPL for non-FIT u-boot
54*4882a593Smuzhiyun			run_command $UMAKE $UARGS_COMMON --spl
55*4882a593Smuzhiyun		fi
56*4882a593Smuzhiyun	fi
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun	if [ "$RK_UBOOT_RAW" ]; then
59*4882a593Smuzhiyun		run_command $UMAKE $UARGS_COMMON --idblock
60*4882a593Smuzhiyun	fi
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun	run_command cd ..
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	if [ "$DRY_RUN" ]; then
65*4882a593Smuzhiyun		return 0
66*4882a593Smuzhiyun	fi
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun	if [ "$RK_SECURITY" ];then
69*4882a593Smuzhiyun		for IMAGE in u-boot/boot.img u-boot/recovery.img; do
70*4882a593Smuzhiyun			[ ! -r $IMAGE ] || \
71*4882a593Smuzhiyun				ln -rsf $IMAGE "$RK_SECURITY_FIRMWARE_DIR"
72*4882a593Smuzhiyun		done
73*4882a593Smuzhiyun	fi
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun	LOADER="$(echo u-boot/*_loader_*.bin | head -1)"
76*4882a593Smuzhiyun	ln -rsf "$LOADER" "$RK_FIRMWARE_DIR"/MiniLoaderAll.bin
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun	ln -rsf u-boot/uboot.img "$RK_FIRMWARE_DIR"
79*4882a593Smuzhiyun	[ ! -e u-boot/trust.img ] || \
80*4882a593Smuzhiyun		ln -rsf u-boot/trust.img "$RK_FIRMWARE_DIR"
81*4882a593Smuzhiyun}
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun# Hooks
84*4882a593Smuzhiyun
85*4882a593Smuzhiyunusage_hook()
86*4882a593Smuzhiyun{
87*4882a593Smuzhiyun	echo -e "loader[:cmds]                    \tbuild loader (uboot)"
88*4882a593Smuzhiyun	echo -e "uboot[:cmds]                     \tbuild u-boot"
89*4882a593Smuzhiyun	echo -e "uefi[:cmds]                      \tbuild uefi"
90*4882a593Smuzhiyun}
91*4882a593Smuzhiyun
92*4882a593Smuzhiyunclean_hook()
93*4882a593Smuzhiyun{
94*4882a593Smuzhiyun	make -C u-boot distclean
95*4882a593Smuzhiyun}
96*4882a593Smuzhiyun
97*4882a593SmuzhiyunBUILD_CMDS="loader uboot uefi"
98*4882a593Smuzhiyunbuild_hook()
99*4882a593Smuzhiyun{
100*4882a593Smuzhiyun	if [ "$RK_RTOS" ]; then
101*4882a593Smuzhiyun		RK_UBOOT_TOOLCHAIN="$(get_toolchain "$RK_RTOS_ARCH" arm none)"
102*4882a593Smuzhiyun	else
103*4882a593Smuzhiyun		RK_UBOOT_TOOLCHAIN="$(get_toolchain "$RK_UBOOT_ARCH")"
104*4882a593Smuzhiyun	fi
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun	echo "Toolchain for loader (u-boot):"
107*4882a593Smuzhiyun	echo "${RK_UBOOT_TOOLCHAIN:-gcc}"
108*4882a593Smuzhiyun	echo
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun	export UMAKE="./make.sh CROSS_COMPILE=$RK_UBOOT_TOOLCHAIN"
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun	if [ "$DRY_RUN" ]; then
113*4882a593Smuzhiyun		echo -e "\e[35mCommands of building $1:\e[0m"
114*4882a593Smuzhiyun	else
115*4882a593Smuzhiyun		echo "=========================================="
116*4882a593Smuzhiyun		echo "          Start building $1"
117*4882a593Smuzhiyun		echo "=========================================="
118*4882a593Smuzhiyun	fi
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun	TARGET="$1"
121*4882a593Smuzhiyun	shift
122*4882a593Smuzhiyun	[ "$1" != cmds ] || shift
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun	case "$TARGET" in
125*4882a593Smuzhiyun		uboot | loader) build_uboot $@ ;;
126*4882a593Smuzhiyun		uefi) build_uefi $@ ;;
127*4882a593Smuzhiyun		*) usage ;;
128*4882a593Smuzhiyun	esac
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun	if [ -z "$DRY_RUN" ]; then
131*4882a593Smuzhiyun		finish_build build_$TARGET $@
132*4882a593Smuzhiyun	fi
133*4882a593Smuzhiyun}
134*4882a593Smuzhiyun
135*4882a593Smuzhiyunbuild_hook_dry()
136*4882a593Smuzhiyun{
137*4882a593Smuzhiyun	DRY_RUN=1 build_hook $@
138*4882a593Smuzhiyun}
139*4882a593Smuzhiyun
140*4882a593Smuzhiyunsource "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}"
141*4882a593Smuzhiyun
142*4882a593Smuzhiyunbuild_hook ${@:-loader}
143