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