13d0407baSopenharmony_ci#!/bin/bash
23d0407baSopenharmony_ci# SPDX-License-Identifier: GPL-2.0
33d0407baSopenharmony_ci# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd.
43d0407baSopenharmony_ciset -e
53d0407baSopenharmony_ci
63d0407baSopenharmony_ciusage() {
73d0407baSopenharmony_ci	cat >&2 << USAGE
83d0407baSopenharmony_ciusage: $0 [-h] [-z] --boot_img BOOT_IMG [--out OUT] [--kernel KERNEL] [--ramdisk RAMDISK] [--second SECOND] [--dtb DTB ] [--recovery_dtbo RECOVERY_DTBO] -o OUTPUT
93d0407baSopenharmony_ci
103d0407baSopenharmony_cioptional arguments:
113d0407baSopenharmony_ci  -h, --help            show this help message and exit
123d0407baSopenharmony_ci  -z                    pack compressed kernel image
133d0407baSopenharmony_ci  --boot_img BOOT_IMG   path to the original boot image
143d0407baSopenharmony_ci  --out OUT             path to out binaries (default: out)
153d0407baSopenharmony_ci  --kernel KERNEL       path to the new kernel
163d0407baSopenharmony_ci  --ramdisk RAMDISK     path to the new ramdisk
173d0407baSopenharmony_ci  --second SECOND       path to the new 2nd bootloader (default: resource.img)
183d0407baSopenharmony_ci  --dtb DTB             path to the new dtb
193d0407baSopenharmony_ci  --recovery_dtbo RECOVERY_DTBO
203d0407baSopenharmony_ci                        path to the new recovery DTBO
213d0407baSopenharmony_ci  -o OUTPUT, --output OUTPUT
223d0407baSopenharmony_ci                        output file name
233d0407baSopenharmony_ciUSAGE
243d0407baSopenharmony_ci}
253d0407baSopenharmony_ci
263d0407baSopenharmony_ci# Parse command-line arguments
273d0407baSopenharmony_ciwhile [ $# -gt 0 ]; do
283d0407baSopenharmony_ci	case $1 in
293d0407baSopenharmony_ci		--boot_img)
303d0407baSopenharmony_ci			boot_img=$2
313d0407baSopenharmony_ci			shift 2
323d0407baSopenharmony_ci			;;
333d0407baSopenharmony_ci		--out)
343d0407baSopenharmony_ci			out=$2
353d0407baSopenharmony_ci			shift 2
363d0407baSopenharmony_ci			;;
373d0407baSopenharmony_ci		--kernel)
383d0407baSopenharmony_ci			kernel=$2
393d0407baSopenharmony_ci			shift 2
403d0407baSopenharmony_ci			;;
413d0407baSopenharmony_ci		--ramdisk)
423d0407baSopenharmony_ci			ramdisk=$2
433d0407baSopenharmony_ci			shift 2
443d0407baSopenharmony_ci			;;
453d0407baSopenharmony_ci		--second)
463d0407baSopenharmony_ci			second=$2
473d0407baSopenharmony_ci			shift 2
483d0407baSopenharmony_ci			;;
493d0407baSopenharmony_ci		--dtb)
503d0407baSopenharmony_ci			dtb=$2
513d0407baSopenharmony_ci			shift 2
523d0407baSopenharmony_ci			;;
533d0407baSopenharmony_ci		--recovery_dtbo)
543d0407baSopenharmony_ci			recovery_dtbo=$2
553d0407baSopenharmony_ci			shift 2
563d0407baSopenharmony_ci			;;
573d0407baSopenharmony_ci		-h)
583d0407baSopenharmony_ci			usage
593d0407baSopenharmony_ci			exit 0
603d0407baSopenharmony_ci			;;
613d0407baSopenharmony_ci		--help)
623d0407baSopenharmony_ci			usage
633d0407baSopenharmony_ci			exit 0
643d0407baSopenharmony_ci			;;
653d0407baSopenharmony_ci		-z)
663d0407baSopenharmony_ci			compressed_kernel=y
673d0407baSopenharmony_ci			shift
683d0407baSopenharmony_ci			;;
693d0407baSopenharmony_ci		-o)
703d0407baSopenharmony_ci			output=$2
713d0407baSopenharmony_ci			shift 2
723d0407baSopenharmony_ci			;;
733d0407baSopenharmony_ci		--output)
743d0407baSopenharmony_ci			output=$2
753d0407baSopenharmony_ci			shift 2
763d0407baSopenharmony_ci			;;
773d0407baSopenharmony_ci		*)
783d0407baSopenharmony_ci			shift
793d0407baSopenharmony_ci			;;
803d0407baSopenharmony_ci        esac
813d0407baSopenharmony_cidone
823d0407baSopenharmony_ci
833d0407baSopenharmony_ciif [ "$boot_img" == "" -o ! -e "$boot_img" ]; then
843d0407baSopenharmony_ci	echo "No boot img"
853d0407baSopenharmony_ci	usage
863d0407baSopenharmony_ci	exit 1
873d0407baSopenharmony_cifi
883d0407baSopenharmony_ci
893d0407baSopenharmony_ciif [ "$output" == "" ]; then
903d0407baSopenharmony_ci	echo "No output file name"
913d0407baSopenharmony_ci	usage
923d0407baSopenharmony_ci	exit 1
933d0407baSopenharmony_cifi
943d0407baSopenharmony_ci
953d0407baSopenharmony_cisrctree=${srctree-"."}
963d0407baSopenharmony_ciobjtree=${objtree-"."}
973d0407baSopenharmony_ciout=${out-"out"}
983d0407baSopenharmony_ciif [ "$($srctree/scripts/config --state CONFIG_ARM64)" == "y" ]; then
993d0407baSopenharmony_ci	if [ "$compressed_kernel" == "y" ]; then
1003d0407baSopenharmony_ci		default_kernel=arch/arm64/boot/Image.lz4
1013d0407baSopenharmony_ci	else
1023d0407baSopenharmony_ci		default_kernel=arch/arm64/boot/Image
1033d0407baSopenharmony_ci	fi
1043d0407baSopenharmony_cielse
1053d0407baSopenharmony_ci	if [ "$compressed_kernel" == "y" ]; then
1063d0407baSopenharmony_ci		default_kernel=arch/arm/boot/zImage
1073d0407baSopenharmony_ci	else
1083d0407baSopenharmony_ci		default_kernel=arch/arm/boot/Image
1093d0407baSopenharmony_ci	fi
1103d0407baSopenharmony_cifi
1113d0407baSopenharmony_cikernel=${kernel-$objtree/$default_kernel}
1123d0407baSopenharmony_cisecond=${second-$objtree/resource.img}
1133d0407baSopenharmony_ciramdisk=${ramdisk-$out/ramdisk}
1143d0407baSopenharmony_cidtb=${dtb-$out/dtb}
1153d0407baSopenharmony_cirecovery_dtbo=${recovery_dtbo-$out/recovery_dtbo}
1163d0407baSopenharmony_cilog="$out/unpack.log"
1173d0407baSopenharmony_ci
1183d0407baSopenharmony_cimkdir -p $out
1193d0407baSopenharmony_ci$srctree/scripts/unpack_bootimg --boot_img $boot_img --out $out > $log
1203d0407baSopenharmony_ci
1213d0407baSopenharmony_cicmdline=$(grep -a "^command line args: " $log | tr '\0' '\n'| sed "s/^command line args: //")
1223d0407baSopenharmony_ciextra_cmdline=$(grep -a "^additional command line args: " $log | tr '\0' '\n'| sed "s/^additional command line args: //")
1233d0407baSopenharmony_civersion=$(grep -a "^boot image header version: " $log | sed "s/^boot image header version: //")
1243d0407baSopenharmony_cios_version=$(grep -a "^os version: " $log | sed "s/^os version: //")
1253d0407baSopenharmony_cios_patch_level=$(grep -a "^os patch level: " $log | sed "s/^os patch level: //")
1263d0407baSopenharmony_ci
1273d0407baSopenharmony_cidtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //")
1283d0407baSopenharmony_cidtb_size=${dtb_size:-0}
1293d0407baSopenharmony_ciif [ $dtb_size -gt 0 -a -e "$dtb" ]; then
1303d0407baSopenharmony_ci	DTB="--dtb $dtb"
1313d0407baSopenharmony_cifi
1323d0407baSopenharmony_ci
1333d0407baSopenharmony_cirecovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //")
1343d0407baSopenharmony_cirecovery_dtbo_size=${recovery_dtbo_size:-0}
1353d0407baSopenharmony_ciif [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then
1363d0407baSopenharmony_ci	RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo"
1373d0407baSopenharmony_cifi
1383d0407baSopenharmony_ci
1393d0407baSopenharmony_ciif [ $version -lt 3 ]; then
1403d0407baSopenharmony_ci	SECOND="--second $second"
1413d0407baSopenharmony_cifi
1423d0407baSopenharmony_ci
1433d0407baSopenharmony_ci$srctree/scripts/mkbootimg \
1443d0407baSopenharmony_ci--kernel $kernel \
1453d0407baSopenharmony_ci$SECOND \
1463d0407baSopenharmony_ci--ramdisk $ramdisk \
1473d0407baSopenharmony_ci$DTB \
1483d0407baSopenharmony_ci$RECOVERY_DTBO \
1493d0407baSopenharmony_ci--cmdline "${cmdline}${extra_cmdline}" \
1503d0407baSopenharmony_ci--header_version $version \
1513d0407baSopenharmony_ci--os_version $os_version \
1523d0407baSopenharmony_ci--os_patch_level $os_patch_level \
1533d0407baSopenharmony_ci--output $output
154