xref: /rk3399_rockchip-uboot/scripts/repack-bootimg (revision 01b8c4d110abb0dcbe36dc5b6b10d93b2b8e2667)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd.
4set -e
5
6ARGC=$#
7
8usage() {
9	cat >&2 << USAGE
10usage: $0 [-h] [-z] --boot_img BOOT_IMG [--out OUT] [--kernel KERNEL] [--ramdisk RAMDISK] [--second SECOND] [--dtb DTB ] [--recovery_dtbo RECOVERY_DTBO] -o OUTPUT
11
12optional arguments:
13  -h, --help            show this help message and exit
14  -z                    pack compressed kernel image
15  --boot_img BOOT_IMG   path to the original boot image
16  --out OUT             path to out binaries (default: out)
17  --kernel KERNEL       path to the new kernel
18  --ramdisk RAMDISK     path to the new ramdisk
19  --second SECOND       path to the new 2nd bootloader (default: resource.img)
20  --dtb DTB             path to the new dtb
21  --recovery_dtbo RECOVERY_DTBO
22                        path to the new recovery DTBO
23  -o OUTPUT, --output OUTPUT
24                        output file name
25USAGE
26}
27
28# Parse command-line arguments
29while [ $# -gt 0 ]; do
30	case $1 in
31		--boot_img)
32			boot_img=$2
33			shift 2
34			;;
35		--out)
36			out=$2
37			shift 2
38			;;
39		--kernel)
40			kernel=$2
41			shift 2
42			;;
43		--ramdisk)
44			ramdisk=$2
45			shift 2
46			;;
47		--second)
48			second=$2
49			shift 2
50			;;
51		--dtb)
52			dtb=$2
53			shift 2
54			;;
55		--recovery_dtbo)
56			recovery_dtbo=$2
57			shift 2
58			;;
59		-h)
60			usage
61			exit 0
62			;;
63		--help)
64			usage
65			exit 0
66			;;
67		-z)
68			compressed_kernel=y
69			shift
70			;;
71		-o)
72			output=$2
73			shift 2
74			;;
75		--output)
76			output=$2
77			shift 2
78			;;
79		*)
80			shift
81			;;
82        esac
83done
84
85if [ "$boot_img" == "" -o ! -e "$boot_img" ]; then
86	echo "No boot img"
87	usage
88	exit 1
89fi
90
91if [ "$output" == "" ]; then
92	echo "No output file name"
93	usage
94	exit 1
95fi
96
97srctree=${srctree-"."}
98objtree=${objtree-"."}
99out=${out-"out"}
100
101if [ "$kernel" == "" ]; then
102	kernel=${kernel-$out/kernel}
103fi
104
105if [ "$second" == "" ]; then
106	second=${second-$out/second}
107fi
108
109if [ "$ramdisk" == "" ]; then
110	ramdisk=${ramdisk-$out/ramdisk}
111fi
112
113if [ "$dtb" == "" ]; then
114	dtb=${dtb-$out/dtb}
115fi
116
117recovery_dtbo=${recovery_dtbo-$out/recovery_dtbo}
118log="$out/unpack.log"
119
120mkdir -p $out
121$srctree/scripts/unpack_bootimg --boot_img $boot_img --out $out > $log
122
123if [ $ARGC -eq 4 ]; then
124	$srctree/scripts/unpack_resource.sh $second out/resource/ > /dev/null
125	$srctree/tools/resource_tool --root=out/resource --image=$second out/resource/* > /dev/null
126fi
127
128cmdline=$(grep -a "^command line args: " $log | tr '\0' '\n'| sed "s/^command line args: //")
129extra_cmdline=$(grep -a "^additional command line args: " $log | tr '\0' '\n'| sed "s/^additional command line args: //")
130version=$(grep -a "^boot image header version: " $log | sed "s/^boot image header version: //")
131
132os_version_patch_level=$(grep -a "^os version and patch level: " $log | sed "s/^os version and patch level: //")
133
134v=$(($os_version_patch_level >> 11))
135a=$(($v >> 14))
136b=$((($v >> 7) & 0x7f))
137c=$(($v & 0x7f))
138os_version=$(printf '%d.%d.%d' $a $b $c)
139
140v=$(($os_version_patch_level & 0x7ff))
141y=$((($v >> 4) + 2000))
142m=$((($v & 15)))
143
144if [ $m -eq 0 ]; then
145	m=1
146fi
147
148os_patch_level=$(printf '%d-%02d-01' $y $m)
149
150dtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //")
151dtb_size=${dtb_size:-0}
152if [ $dtb_size -gt 0 -a -e "$dtb" ]; then
153	DTB="--dtb $dtb"
154fi
155
156recovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //")
157recovery_dtbo_size=${recovery_dtbo_size:-0}
158if [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then
159	RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo"
160fi
161
162$srctree/scripts/mkbootimg \
163--kernel $kernel \
164--second $second \
165--ramdisk $ramdisk \
166$DTB \
167$RECOVERY_DTBO \
168--cmdline "${cmdline}${extra_cmdline}" \
169--header_version $version \
170--os_version $os_version \
171--os_patch_level $os_patch_level \
172--output $output
173
174echo -e "\nRepack Image is ready: $output\n"
175