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