xref: /rk3399_rockchip-uboot/scripts/repack-bootimg (revision 92cdb0ce918a19abd8854f601979ec362ef20572)
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"}
98*92cdb0ceSJoseph Chen
99*92cdb0ceSJoseph Chenif [ "$kernel" == "" ]; then
100*92cdb0ceSJoseph Chen	kernel=${kernel-$out/kernel}
1018a334094SJoseph Chenfi
102*92cdb0ceSJoseph Chen
103*92cdb0ceSJoseph Chenif [ "$second" == "" ]; then
104*92cdb0ceSJoseph Chen	second=${second-$out/second}
1058a334094SJoseph Chenfi
106*92cdb0ceSJoseph Chen
107*92cdb0ceSJoseph Chenif [ "$ramdisk" == "" ]; then
1088a334094SJoseph Chen	ramdisk=${ramdisk-$out/ramdisk}
109*92cdb0ceSJoseph Chenfi
110*92cdb0ceSJoseph Chen
111*92cdb0ceSJoseph Chenif [ "$dtb" == "" ]; then
1128a334094SJoseph Chen	dtb=${dtb-$out/dtb}
113*92cdb0ceSJoseph Chenfi
114*92cdb0ceSJoseph 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: //")
1248a334094SJoseph Chen
1258a334094SJoseph Chenos_version_patch_level=$(grep -a "^os version and patch level: " $log | sed "s/^os version and patch level: //")
1268a334094SJoseph Chen
1278a334094SJoseph Chenv=$(($os_version_patch_level >> 11))
1288a334094SJoseph Chena=$(($v >> 14))
1298a334094SJoseph Chenb=$((($v >> 7) & 0x7f))
1308a334094SJoseph Chenc=$(($v & 0x7f))
1318a334094SJoseph Chenos_version=$(printf '%d.%d.%d' $a $b $c)
1328a334094SJoseph Chen
1338a334094SJoseph Chenv=$(($os_version_patch_level & 0x7ff))
1348a334094SJoseph Cheny=$((($v >> 4) + 2000))
1358a334094SJoseph Chenm=$((($v & 15)))
1368a334094SJoseph Chenos_patch_level=$(printf '%d-%02d-01' $y $m)
1378a334094SJoseph Chen
1388a334094SJoseph Chendtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //")
1398a334094SJoseph Chendtb_size=${dtb_size:-0}
1408a334094SJoseph Chenif [ $dtb_size -gt 0 -a -e "$dtb" ]; then
1418a334094SJoseph Chen	DTB="--dtb $dtb"
1428a334094SJoseph Chenfi
1438a334094SJoseph Chen
1448a334094SJoseph Chenrecovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //")
1458a334094SJoseph Chenrecovery_dtbo_size=${recovery_dtbo_size:-0}
1468a334094SJoseph Chenif [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then
1478a334094SJoseph Chen	RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo"
1488a334094SJoseph Chenfi
1498a334094SJoseph Chen
1508a334094SJoseph Chen$srctree/scripts/mkbootimg \
1518a334094SJoseph Chen--kernel $kernel \
1528a334094SJoseph Chen--second $second \
1538a334094SJoseph Chen--ramdisk $ramdisk \
1548a334094SJoseph Chen$DTB \
1558a334094SJoseph Chen$RECOVERY_DTBO \
1568a334094SJoseph Chen--cmdline "${cmdline}${extra_cmdline}" \
1578a334094SJoseph Chen--header_version $version \
1588a334094SJoseph Chen--os_version $os_version \
1598a334094SJoseph Chen--os_patch_level $os_patch_level \
1608a334094SJoseph Chen--output $output
161*92cdb0ceSJoseph Chen
162*92cdb0ceSJoseph Chenecho -e "\nRepack Image is ready: $output\n"
163