xref: /rk3399_rockchip-uboot/scripts/repack-bootimg (revision c8a22fb85e7897da3a0a3ede4705e54e9f18eba3)
18a334094SJoseph Chen#!/bin/bash
28a334094SJoseph Chen# SPDX-License-Identifier: GPL-2.0
38a334094SJoseph Chen# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd.
48a334094SJoseph Chenset -e
58a334094SJoseph Chen
68a334094SJoseph Chenusage() {
78a334094SJoseph Chen	cat >&2 << USAGE
88a334094SJoseph Chenusage: $0 [-h] [-z] --boot_img BOOT_IMG [--out OUT] [--kernel KERNEL] [--ramdisk RAMDISK] [--second SECOND] [--dtb DTB ] [--recovery_dtbo RECOVERY_DTBO] -o OUTPUT
98a334094SJoseph Chen
108a334094SJoseph Chenoptional arguments:
118a334094SJoseph Chen  -h, --help            show this help message and exit
128a334094SJoseph Chen  -z                    pack compressed kernel image
138a334094SJoseph Chen  --boot_img BOOT_IMG   path to the original boot image
148a334094SJoseph Chen  --out OUT             path to out binaries (default: out)
158a334094SJoseph Chen  --kernel KERNEL       path to the new kernel
168a334094SJoseph Chen  --ramdisk RAMDISK     path to the new ramdisk
178a334094SJoseph Chen  --second SECOND       path to the new 2nd bootloader (default: resource.img)
188a334094SJoseph Chen  --dtb DTB             path to the new dtb
198a334094SJoseph Chen  --recovery_dtbo RECOVERY_DTBO
208a334094SJoseph Chen                        path to the new recovery DTBO
218a334094SJoseph Chen  -o OUTPUT, --output OUTPUT
228a334094SJoseph Chen                        output file name
238a334094SJoseph ChenUSAGE
248a334094SJoseph Chen}
258a334094SJoseph Chen
268a334094SJoseph Chen# Parse command-line arguments
278a334094SJoseph Chenwhile [ $# -gt 0 ]; do
288a334094SJoseph Chen	case $1 in
298a334094SJoseph Chen		--boot_img)
308a334094SJoseph Chen			boot_img=$2
318a334094SJoseph Chen			shift 2
328a334094SJoseph Chen			;;
338a334094SJoseph Chen		--out)
348a334094SJoseph Chen			out=$2
358a334094SJoseph Chen			shift 2
368a334094SJoseph Chen			;;
378a334094SJoseph Chen		--kernel)
388a334094SJoseph Chen			kernel=$2
398a334094SJoseph Chen			shift 2
408a334094SJoseph Chen			;;
418a334094SJoseph Chen		--ramdisk)
428a334094SJoseph Chen			ramdisk=$2
438a334094SJoseph Chen			shift 2
448a334094SJoseph Chen			;;
458a334094SJoseph Chen		--second)
468a334094SJoseph Chen			second=$2
478a334094SJoseph Chen			shift 2
488a334094SJoseph Chen			;;
498a334094SJoseph Chen		--dtb)
508a334094SJoseph Chen			dtb=$2
518a334094SJoseph Chen			shift 2
528a334094SJoseph Chen			;;
538a334094SJoseph Chen		--recovery_dtbo)
548a334094SJoseph Chen			recovery_dtbo=$2
558a334094SJoseph Chen			shift 2
568a334094SJoseph Chen			;;
578a334094SJoseph Chen		-h)
588a334094SJoseph Chen			usage
598a334094SJoseph Chen			exit 0
608a334094SJoseph Chen			;;
618a334094SJoseph Chen		--help)
628a334094SJoseph Chen			usage
638a334094SJoseph Chen			exit 0
648a334094SJoseph Chen			;;
658a334094SJoseph Chen		-z)
668a334094SJoseph Chen			compressed_kernel=y
678a334094SJoseph Chen			shift
688a334094SJoseph Chen			;;
698a334094SJoseph Chen		-o)
708a334094SJoseph Chen			output=$2
718a334094SJoseph Chen			shift 2
728a334094SJoseph Chen			;;
738a334094SJoseph Chen		--output)
748a334094SJoseph Chen			output=$2
758a334094SJoseph Chen			shift 2
768a334094SJoseph Chen			;;
778a334094SJoseph Chen		*)
788a334094SJoseph Chen			shift
798a334094SJoseph Chen			;;
808a334094SJoseph Chen        esac
818a334094SJoseph Chendone
828a334094SJoseph Chen
838a334094SJoseph Chenif [ "$boot_img" == "" -o ! -e "$boot_img" ]; then
848a334094SJoseph Chen	echo "No boot img"
858a334094SJoseph Chen	usage
868a334094SJoseph Chen	exit 1
878a334094SJoseph Chenfi
888a334094SJoseph Chen
898a334094SJoseph Chenif [ "$output" == "" ]; then
908a334094SJoseph Chen	echo "No output file name"
918a334094SJoseph Chen	usage
928a334094SJoseph Chen	exit 1
938a334094SJoseph Chenfi
948a334094SJoseph Chen
958a334094SJoseph Chensrctree=${srctree-"."}
968a334094SJoseph Chenobjtree=${objtree-"."}
978a334094SJoseph Chenout=${out-"out"}
9892cdb0ceSJoseph Chen
9992cdb0ceSJoseph Chenif [ "$kernel" == "" ]; then
10092cdb0ceSJoseph Chen	kernel=${kernel-$out/kernel}
1018a334094SJoseph Chenfi
10292cdb0ceSJoseph Chen
10392cdb0ceSJoseph Chenif [ "$second" == "" ]; then
10492cdb0ceSJoseph Chen	second=${second-$out/second}
1058a334094SJoseph Chenfi
10692cdb0ceSJoseph Chen
10792cdb0ceSJoseph Chenif [ "$ramdisk" == "" ]; then
1088a334094SJoseph Chen	ramdisk=${ramdisk-$out/ramdisk}
10992cdb0ceSJoseph Chenfi
11092cdb0ceSJoseph Chen
11192cdb0ceSJoseph Chenif [ "$dtb" == "" ]; then
1128a334094SJoseph Chen	dtb=${dtb-$out/dtb}
11392cdb0ceSJoseph Chenfi
11492cdb0ceSJoseph Chen
1158a334094SJoseph Chenrecovery_dtbo=${recovery_dtbo-$out/recovery_dtbo}
1168a334094SJoseph Chenlog="$out/unpack.log"
1178a334094SJoseph Chen
1188a334094SJoseph Chenmkdir -p $out
1198a334094SJoseph Chen$srctree/scripts/unpack_bootimg --boot_img $boot_img --out $out > $log
1208a334094SJoseph Chen
1218a334094SJoseph Chencmdline=$(grep -a "^command line args: " $log | tr '\0' '\n'| sed "s/^command line args: //")
1228a334094SJoseph Chenextra_cmdline=$(grep -a "^additional command line args: " $log | tr '\0' '\n'| sed "s/^additional command line args: //")
1238a334094SJoseph Chenversion=$(grep -a "^boot image header version: " $log | sed "s/^boot image header version: //")
124*c8a22fb8SJoseph Chenos_version=$(grep -a "^os version: " $log | sed "s/^os version: //")
125*c8a22fb8SJoseph Chenos_patch_level=$(grep -a "^os patch level: " $log | sed "s/^os patch level: //")
1268a334094SJoseph Chen
1278a334094SJoseph Chendtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //")
1288a334094SJoseph Chendtb_size=${dtb_size:-0}
1298a334094SJoseph Chenif [ $dtb_size -gt 0 -a -e "$dtb" ]; then
1308a334094SJoseph Chen	DTB="--dtb $dtb"
1318a334094SJoseph Chenfi
1328a334094SJoseph Chen
1338a334094SJoseph Chenrecovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //")
1348a334094SJoseph Chenrecovery_dtbo_size=${recovery_dtbo_size:-0}
1358a334094SJoseph Chenif [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then
1368a334094SJoseph Chen	RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo"
1378a334094SJoseph Chenfi
1388a334094SJoseph Chen
139*c8a22fb8SJoseph Chenif [ $version -lt 3 ]; then
140*c8a22fb8SJoseph Chen	SECOND="--second $second"
141*c8a22fb8SJoseph Chenfi
142*c8a22fb8SJoseph Chen
1438a334094SJoseph Chen$srctree/scripts/mkbootimg \
1448a334094SJoseph Chen--kernel $kernel \
145*c8a22fb8SJoseph Chen$SECOND \
1468a334094SJoseph Chen--ramdisk $ramdisk \
1478a334094SJoseph Chen$DTB \
1488a334094SJoseph Chen$RECOVERY_DTBO \
1498a334094SJoseph Chen--cmdline "${cmdline}${extra_cmdline}" \
1508a334094SJoseph Chen--header_version $version \
1518a334094SJoseph Chen--os_version $os_version \
1528a334094SJoseph Chen--os_patch_level $os_patch_level \
1538a334094SJoseph Chen--output $output
154