1#!/bin/bash -e
2
3RK_PACK_TOOL_DIR="$SDK_DIR/tools/linux/Linux_Pack_Firmware/rockdev"
4
5gen_package_file()
6{
7	TYPE="${1:-update}"
8
9	if [ ! -r parameter.txt ]; then
10		echo -e "\e[31mparameter.txt is missing\e[0m" >&2
11		exit 1
12	fi
13
14	echo -e "# NAME\tPATH"
15	echo -e "package-file\tpackage-file"
16	echo -e "parameter\tparameter.txt"
17
18	[ ! -r MiniLoaderAll.bin ] || echo -e "bootloader\tMiniLoaderAll.bin"
19
20	for part in $(rk_partition_parse_names parameter.txt); do
21		if echo $part | grep -q "_b$"; then
22			# Not packing *_b partition for ota|sdcard
23			case $TYPE in
24				ota|sdcard) continue ;;
25			esac
26		fi
27
28		case $part in
29			backup) echo -e "backup\tRESERVED"; continue ;;
30			system|system_[ab]) IMAGE=rootfs.img ;;
31			*_a) IMAGE="${part%_a}.img" ;;
32			*_b) IMAGE="${part%_b}.img" ;;
33			*) IMAGE="$part.img" ;;
34		esac
35
36		[ ! -r "$IMAGE" ] || echo -e "$part\t$IMAGE"
37	done
38}
39
40build_updateimg()
41{
42	check_config RK_UPDATE || return 0
43
44	TARGET="${1:-$RK_FIRMWARE_DIR/update.img}"
45	TYPE="${2:-update}"
46	PKG_FILE="${3:-$RK_PACKAGE_FILE}"
47	OUT_DIR="$RK_OUTDIR/$TYPE"
48	IMAGE_DIR="$OUT_DIR/Image"
49
50	echo "=========================================="
51	echo "          Start packing $2 update image"
52	echo "=========================================="
53
54	rm -rf "$TARGET" "$OUT_DIR"
55	mkdir -p "$IMAGE_DIR"
56	cd "$IMAGE_DIR"
57
58	# Prepare images
59	ln -rsf "$RK_ROCKDEV_DIR"/* .
60	rm -f update.img
61	if [ "$TYPE" = sdcard ]; then
62		ln -rsf "$RK_IMAGE_DIR/sdupdate-ab-misc.img" misc.img
63		ln -rsf "$RK_DATA_DIR/parameter-sdupdate.txt" \
64			parameter.txt
65
66		# Not packing rootfs partition for sdcard
67		rm -f rootfs.img
68	fi
69
70	# Prepare package-file
71	if [ "$PKG_FILE" ]; then
72		PKG_FILE="$CHIP_DIR/$PKG_FILE"
73		if [ ! -r "$PKG_FILE" ]; then
74			echo "$PKG_FILE not exists!"
75			exit 1
76		fi
77		ln -rsf "$PKG_FILE" package-file
78	else
79		echo "Generating package-file for $TYPE :"
80		gen_package_file $TYPE > package-file
81		cat package-file
82	fi
83
84	echo "Packing $TARGET for $TYPE..."
85
86	if [ ! -r MiniLoaderAll.bin ]; then
87		echo -e "\e[31mMiniLoaderAll.bin is missing\e[0m"
88		exit 1
89	fi
90
91	TAG=RK$(hexdump -s 21 -n 4 -e '4 "%c"' MiniLoaderAll.bin | rev)
92	"$RK_PACK_TOOL_DIR/afptool" -pack ./ update.raw.img
93	"$RK_PACK_TOOL_DIR/rkImageMaker" -$TAG MiniLoaderAll.bin \
94		update.raw.img update.img -os_type:androidos
95
96	ln -rsf "$IMAGE_DIR/package-file" "$OUT_DIR"
97	ln -rsf "$IMAGE_DIR/update.img" "$OUT_DIR"
98	ln -rsf "$IMAGE_DIR/update.img" "$TARGET"
99
100	finish_build build_updateimg $@
101}
102
103build_ota_updateimg()
104{
105	check_config RK_AB_UPDATE || return 0
106
107	echo "Make A/B update image for OTA"
108
109	build_updateimg "$RK_FIRMWARE_DIR/update_ota.img" ota \
110		$RK_OTA_PACKAGE_FILE
111
112	finish_build
113}
114
115build_sdcard_updateimg()
116{
117	check_config RK_AB_UPDATE RK_AB_UPDATE_SDCARD || return 0
118
119	echo "Make A/B update image for SDcard"
120
121	build_updateimg "$RK_FIRMWARE_DIR/update_sdcard.img" sdcard
122
123	finish_build
124}
125
126build_ab_updateimg()
127{
128	check_config RK_AB_UPDATE || return 0
129
130	build_ota_updateimg
131	build_sdcard_updateimg
132
133	echo "Make A/B update image"
134
135	build_updateimg "$RK_FIRMWARE_DIR/update_ab.img" ab
136
137	finish_build
138}
139
140# Hooks
141
142usage_hook()
143{
144	echo -e "updateimg                         \tbuild update image"
145	echo -e "otapackage                        \tbuild A/B OTA update image"
146	echo -e "sdpackage                         \tbuild A/B SDcard update image"
147}
148
149clean_hook()
150{
151	rm -rf "$RK_OUTDIR/update"
152	rm -rf "$RK_OUTDIR/ota"
153	rm -rf "$RK_OUTDIR/sdcard"
154	rm -rf "$RK_OUTDIR/ab"
155	rm -rf "$RK_FIRMWARE_DIR/*update.img"
156}
157
158POST_BUILD_CMDS="updateimg otapackage sdpackage"
159post_build_hook()
160{
161	case "$1" in
162		updateimg)
163			if [ "$RK_AB_UPDATE" ]; then
164				build_ab_updateimg
165			else
166				build_updateimg
167			fi
168			;;
169		otapackage) build_ota_updateimg ;;
170		sdpackage) build_sdcard_updateimg ;;
171		*) usage ;;
172	esac
173}
174
175source "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}"
176
177post_build_hook ${@:-updateimg}
178